X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b8df87e176f27b25534f27d7e240defa32ca35bc..4141cd9660259caa66e2e9af10873e53402b4812:/src/kernel/activity/IoImpl.cpp diff --git a/src/kernel/activity/IoImpl.cpp b/src/kernel/activity/IoImpl.cpp index f7121544ae..5fac5af006 100644 --- a/src/kernel/activity/IoImpl.cpp +++ b/src/kernel/activity/IoImpl.cpp @@ -6,51 +6,52 @@ #include "src/kernel/activity/IoImpl.hpp" #include "simgrid/kernel/resource/Action.hpp" #include "src/simix/smx_io_private.hpp" +#include "src/surf/StorageImpl.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_io); +namespace simgrid { +namespace kernel { +namespace activity { -simgrid::kernel::activity::IoImpl::IoImpl(std::string name, resource::Action* surf_action, s4u::Storage* storage) - : ActivityImpl(name), storage_(storage), surf_action_(surf_action) +IoImpl::IoImpl(std::string name, surf::StorageImpl* storage) : ActivityImpl(std::move(name)), storage_(storage) { this->state_ = SIMIX_RUNNING; - surf_action_->set_data(this); - - XBT_DEBUG("Create io %p", this); + XBT_DEBUG("Create io impl %p", this); } -simgrid::kernel::activity::IoImpl::~IoImpl() +IoImpl::~IoImpl() { if (surf_action_ != nullptr) surf_action_->unref(); XBT_DEBUG("Destroy io %p", this); } -void simgrid::kernel::activity::IoImpl::cancel() +IoImpl* IoImpl::start(sg_size_t size, simgrid::s4u::Io::OpType type) { - XBT_VERB("This exec %p is canceled", this); - if (surf_action_ != nullptr) - surf_action_->cancel(); -} + surf_action_ = storage_->io_start(size, type); + surf_action_->set_data(this); -void simgrid::kernel::activity::IoImpl::suspend() -{ - if (surf_action_ != nullptr) - surf_action_->suspend(); + XBT_DEBUG("Create IO synchro %p %s", this, get_cname()); + simgrid::kernel::activity::IoImpl::on_start(this); + + return this; } -void simgrid::kernel::activity::IoImpl::resume() +void IoImpl::cancel() { + XBT_VERB("This exec %p is canceled", this); if (surf_action_ != nullptr) - surf_action_->resume(); + surf_action_->cancel(); + state_ = SIMIX_CANCELED; } -double simgrid::kernel::activity::IoImpl::get_remaining() +double IoImpl::get_remaining() { return surf_action_ ? surf_action_->get_remains() : 0; } -void simgrid::kernel::activity::IoImpl::post() +void IoImpl::post() { performed_ioops_ = surf_action_->get_cost(); switch (surf_action_->get_state()) { @@ -71,5 +72,9 @@ void simgrid::kernel::activity::IoImpl::post() /************* * Callbacks * *************/ -simgrid::xbt::signal simgrid::kernel::activity::IoImpl::on_creation; -simgrid::xbt::signal simgrid::kernel::activity::IoImpl::on_completion; +xbt::signal IoImpl::on_start; +xbt::signal IoImpl::on_completion; + +} // namespace activity +} // namespace kernel +} // namespace simgrid