#include "src/kernel/activity/ActivityImpl.hpp"
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process);
+
namespace simgrid {
namespace kernel {
namespace activity {
-void simgrid::kernel::activity::ActivityImpl::set_category(std::string category)
+void ActivityImpl::suspend()
+{
+ if (surf_action_ == nullptr)
+ return;
+ XBT_VERB("This activity is suspended (remain: %f)", surf_action_->get_remains());
+ surf_action_->suspend();
+ on_suspended(this);
+}
+
+void ActivityImpl::resume()
+{
+ if (surf_action_ == nullptr)
+ return;
+ XBT_VERB("This activity is resumed (remain: %f)", surf_action_->get_remains());
+ surf_action_->resume();
+ on_resumed(this);
+}
+
+void ActivityImpl::set_category(std::string category)
{
if (surf_action_)
surf_action_->set_category(category);
delete activity;
}
}
+xbt::signal<void(ActivityImplPtr)> ActivityImpl::on_resumed;
+xbt::signal<void(ActivityImplPtr)> ActivityImpl::on_suspended;
}
}
} // namespace simgrid::kernel::activity::
std::list<smx_simcall_t> simcalls_; /* List of simcalls waiting for this activity */
resource::Action* surf_action_ = nullptr;
- virtual void suspend() = 0;
- virtual void resume() = 0;
+ virtual void suspend();
+ virtual void resume();
virtual void post() = 0; // What to do when a simcall terminates
void set_category(std::string category);
private:
std::atomic_int_fast32_t refcount_{0};
+
+public:
+ static simgrid::xbt::signal<void(ActivityImplPtr)> on_suspended;
+ static simgrid::xbt::signal<void(ActivityImplPtr)> on_resumed;
};
}}} // namespace simgrid::kernel::activity
simgrid::kernel::activity::ExecImpl::on_creation(this);
}
-void simgrid::kernel::activity::ExecImpl::suspend()
-{
- XBT_VERB("This exec is suspended (remain: %f)", surf_action_->get_remains());
- if (surf_action_ != nullptr)
- surf_action_->suspend();
- on_suspended(this);
-}
-void simgrid::kernel::activity::ExecImpl::resume()
-{
- XBT_VERB("This exec is resumed (remain: %f)", surf_action_->get_remains());
- if (surf_action_ != nullptr)
- surf_action_->resume();
- on_resumed(this);
-}
void simgrid::kernel::activity::ExecImpl::cancel()
{
XBT_VERB("This exec %p is canceled", this);
*************/
simgrid::xbt::signal<void(simgrid::kernel::activity::ExecImplPtr)> simgrid::kernel::activity::ExecImpl::on_creation;
simgrid::xbt::signal<void(simgrid::kernel::activity::ExecImplPtr)> simgrid::kernel::activity::ExecImpl::on_completion;
-simgrid::xbt::signal<void(simgrid::kernel::activity::ExecImplPtr)> simgrid::kernel::activity::ExecImpl::on_resumed;
-simgrid::xbt::signal<void(simgrid::kernel::activity::ExecImplPtr)> simgrid::kernel::activity::ExecImpl::on_suspended;
simgrid::xbt::signal<void(simgrid::kernel::activity::ExecImplPtr, simgrid::s4u::Host*)>
simgrid::kernel::activity::ExecImpl::on_migration;
explicit ExecImpl(std::string name, std::string tracing_category, resource::Action* timeout_detector,
s4u::Host* host);
void start(double flops_amount, double priority, double bound);
- void suspend() override;
- void resume() override;
void cancel();
void post() override;
double get_remaining();
resource::Action* timeout_detector_ = nullptr;
public:
- static simgrid::xbt::signal<void(kernel::activity::ExecImplPtr)> on_creation;
- static simgrid::xbt::signal<void(kernel::activity::ExecImplPtr)> on_completion;
- static simgrid::xbt::signal<void(kernel::activity::ExecImplPtr)> on_suspended;
- static simgrid::xbt::signal<void(kernel::activity::ExecImplPtr)> on_resumed;
- static simgrid::xbt::signal<void(simgrid::kernel::activity::ExecImplPtr, simgrid::s4u::Host*)> on_migration;
+ static simgrid::xbt::signal<void(ExecImplPtr)> on_creation;
+ static simgrid::xbt::signal<void(ExecImplPtr)> on_completion;
+ static simgrid::xbt::signal<void(ExecImplPtr, simgrid::s4u::Host*)> on_migration;
};
}
}
surf_action_->cancel();
}
-void simgrid::kernel::activity::IoImpl::suspend()
-{
- if (surf_action_ != nullptr)
- surf_action_->suspend();
-}
-
-void simgrid::kernel::activity::IoImpl::resume()
-{
- if (surf_action_ != nullptr)
- surf_action_->resume();
-}
-
double simgrid::kernel::activity::IoImpl::get_remaining()
{
return surf_action_ ? surf_action_->get_remains() : 0;
explicit IoImpl(std::string name, surf::StorageImpl* storage);
void start(sg_size_t size, simgrid::s4u::Io::OpType type);
- void suspend() override;
- void resume() override;
void post() override;
void cancel();
double get_remaining();
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process);
-void simgrid::kernel::activity::SleepImpl::suspend()
-{
- surf_action_->suspend();
-}
-
-void simgrid::kernel::activity::SleepImpl::resume()
-{
- surf_action_->resume();
-}
-
void simgrid::kernel::activity::SleepImpl::post()
{
while (not simcalls_.empty()) {
class XBT_PUBLIC SleepImpl : public ActivityImpl {
public:
- void suspend() override;
- void resume() override;
void post() override;
sg_host_t host = nullptr;
}
}
-static void addActiveTask(kernel::activity::ExecImplPtr exec)
+static void addActiveTask(kernel::activity::ActivityImplPtr exec)
{
- s4u::VirtualMachine *vm = dynamic_cast<s4u::VirtualMachine*>(exec->host_);
+ s4u::VirtualMachine* vm =
+ dynamic_cast<s4u::VirtualMachine*>(boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(exec)->host_);
if (vm != nullptr) {
VirtualMachineImpl *vm_impl = vm->get_impl();
vm_impl->active_tasks_ = vm_impl->active_tasks_ + 1;
}
}
-static void removeActiveTask(kernel::activity::ExecImplPtr exec)
+static void removeActiveTask(kernel::activity::ActivityImplPtr exec)
{
- s4u::VirtualMachine *vm = dynamic_cast<s4u::VirtualMachine*>(exec->host_);
+ s4u::VirtualMachine* vm =
+ dynamic_cast<s4u::VirtualMachine*>(boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(exec)->host_);
if (vm != nullptr) {
VirtualMachineImpl *vm_impl = vm->get_impl();
vm_impl->active_tasks_ = vm_impl->active_tasks_ - 1;
s4u::Host::on_state_change.connect(hostStateChange);
kernel::activity::ExecImpl::on_creation.connect(addActiveTask);
kernel::activity::ExecImpl::on_completion.connect(removeActiveTask);
- kernel::activity::ExecImpl::on_resumed.connect(addActiveTask);
- kernel::activity::ExecImpl::on_suspended.connect(removeActiveTask);
+ kernel::activity::ActivityImpl::on_resumed.connect(addActiveTask);
+ kernel::activity::ActivityImpl::on_suspended.connect(removeActiveTask);
}
double VMModel::next_occuring_event(double now)