#define SIMGRID_S4U_HOST_HPP
#include <simgrid/forward.h>
+#include <simgrid/kernel/resource/Action.hpp>
#include <xbt/Extendable.hpp>
#include <xbt/signal.hpp>
kernel::resource::CpuImpl* pimpl_cpu_ = nullptr;
kernel::routing::NetPoint* pimpl_netpoint_ = nullptr;
+#ifndef DOXYGEN
+ friend kernel::resource::CpuAction; // signal exec_state_changed
+#endif
public:
explicit Host(kernel::resource::HostImpl* pimpl) : pimpl_(pimpl) {}
static xbt::signal<void(Host&)> on_creation;
static xbt::signal<void(Host const&)> on_destruction;
+ xbt::signal<void(Host const&)> on_this_destruction;
+ static xbt::signal<void(kernel::resource::CpuAction&, kernel::resource::Action::State)> on_exec_state_change;
public:
static xbt::signal<void(Host const&)> on_speed_change;
+ xbt::signal<void(Host const&)> on_this_speed_change;
static xbt::signal<void(Host const&)> on_state_change;
+ xbt::signal<void(Host const&)> on_this_state_change;
+
#endif
/** Add a callback fired on each newly created host */
static void on_creation_cb(const std::function<void(Host&)>& cb) { on_creation.connect(cb); }
- /** Add a callback fired when the machine is turned on or off (called AFTER the change) */
+ /** Add a callback fired when any machine is turned on or off (called AFTER the change) */
static void on_state_change_cb(const std::function<void(Host const&)>& cb) { on_state_change.connect(cb); }
- /** Add a callback fired when the speed of the machine is changed (called AFTER the change)
+ /** Add a callback fired when this specific machine is turned on or off (called AFTER the change) */
+ void on_this_state_change_cb(const std::function<void(Host const&)>& cb)
+ {
+ on_this_state_change.connect(cb);
+ }
+ /** Add a callback fired when the speed of any machine is changed (called AFTER the change)
* (either because of a pstate switch or because of an external load event coming from the profile) */
static void on_speed_change_cb(const std::function<void(Host const&)>& cb) { on_speed_change.connect(cb); }
- /** Add a callback fired just before destructing a host */
+ /** Add a callback fired when the speed of this specific machine is changed (called AFTER the change)
+ * (either because of a pstate switch or because of an external load event coming from the profile) */
+ void on_this_speed_change_cb(const std::function<void(Host const&)>& cb)
+ {
+ on_this_speed_change.connect(cb);
+ }
+ /** Add a callback fired just before destructing any host */
static void on_destruction_cb(const std::function<void(Host const&)>& cb) { on_destruction.connect(cb); }
+ /** Add a callback fired just before destructing this specific host */
+ void on_this_destruction_cb(const std::function<void(Host const&)>& cb)
+ {
+ on_this_destruction.connect(cb);
+ }
+ /** Add a callback fired when the state of any exec activity changes */
+ static void on_exec_state_change_cb(
+ const std::function<void(kernel::resource::CpuAction&, kernel::resource::Action::State previous)>& cb)
+ {
+ on_exec_state_change.connect(cb);
+ }
virtual void destroy();
#ifndef DOXYGEN