From 7ff60387c9140b46ec6bbcefe3897e9238bca79d Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Tue, 12 Jan 2016 14:39:35 +0100 Subject: [PATCH] re-move content into separate callback functions (and empty the destructor) --- src/surf/plugins/energy.cpp | 84 +++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/src/surf/plugins/energy.cpp b/src/surf/plugins/energy.cpp index f4e464448c..33add3f7d4 100644 --- a/src/surf/plugins/energy.cpp +++ b/src/surf/plugins/energy.cpp @@ -114,12 +114,6 @@ HostEnergy::HostEnergy(simgrid::Host *ptr) : HostEnergy::~HostEnergy() { - // Ignore virtual machines - if (dynamic_cast(host->extension())) - return; - this->update(); - XBT_INFO("Total energy of host %s: %f Joules", - host->getName().c_str(), this->getConsumedEnergy()); } double HostEnergy::getWattMinAt(int pstate) @@ -198,8 +192,47 @@ void HostEnergy::initWattsRangeList() } } -/* **************************** Public interface *************************** */ +/* **************************** events callback *************************** */ +static void onCreation(simgrid::surf::Host *host) { + if (dynamic_cast(host)) // Ignore virtual machines + return; + host->p_host->extension_set(new HostEnergy(host->p_host)); +} + +static void onActionStateChange(simgrid::surf::CpuAction *action, + e_surf_action_state_t old, e_surf_action_state_t cur) { + const char *name = getActionCpu(action)->getName(); + simgrid::surf::Host *host = sg_host_by_name(name)->extension(); + simgrid::surf::VirtualMachine *vm = dynamic_cast(host); + if (vm) // If it's a VM, take the corresponding PM + host = vm->getPm()->extension(); + + HostEnergy *host_energy = host->p_host->extension(); + + if(host_energy->last_updated < surf_get_clock()) + host_energy->update(); +} + +static void onHostStateChange(simgrid::surf::Host *host) { + if (dynamic_cast(host)) // Ignore virtual machines + return; + + HostEnergy *host_energy = host->p_host->extension(); + + if(host_energy->last_updated < surf_get_clock()) + host_energy->update(); +} +static void onHostDestruction(simgrid::surf::Host *host) { + // Ignore virtual machines + if (dynamic_cast(host)) + return; + HostEnergy *host_energy = host->p_host->extension(); + host_energy->update(); + XBT_INFO("Total energy of host %s: %f Joules", host->getName(), host_energy->getConsumedEnergy()); +} + +/* **************************** Public interface *************************** */ /** \ingroup SURF_plugin_energy * \brief Enable energy plugin * \details Enable energy plugin to get joules consumption of each cpu. You should call this function before #MSG_init(). @@ -211,39 +244,10 @@ void sg_energy_plugin_init(void) HostEnergy::EXTENSION_ID = simgrid::Host::extension_create(); - /* The following attaches an anonymous function to the Host::onCreation signal */ - /* Search for "C++ lambda" for more information on the syntax used here */ - simgrid::surf::Host::onCreation.connect([](simgrid::surf::Host *host) { - if (dynamic_cast(host)) // Ignore virtual machines - return; - host->p_host->extension_set(new HostEnergy(host->p_host)); - }); - - simgrid::surf::CpuAction::onStateChange.connect([](simgrid::surf::CpuAction *action, - e_surf_action_state_t old, - e_surf_action_state_t cur) { - const char *name = getActionCpu(action)->getName(); - simgrid::surf::Host *host = sg_host_by_name(name)->extension(); - simgrid::surf::VirtualMachine *vm = dynamic_cast(host); - if (vm) // If it's a VM, take the corresponding PM - host = vm->getPm()->extension(); - - HostEnergy *host_energy = host->p_host->extension(); - - if(host_energy->last_updated < surf_get_clock()) - host_energy->update(); - - }); - - simgrid::surf::Host::onStateChange.connect([] (simgrid::surf::Host *host) { - if (dynamic_cast(host)) // Ignore virtual machines - return; - - HostEnergy *host_energy = host->p_host->extension(); - - if(host_energy->last_updated < surf_get_clock()) - host_energy->update(); - }); + simgrid::surf::Host::onCreation.connect(&onCreation); + simgrid::surf::CpuAction::onStateChange.connect(&onActionStateChange); + simgrid::surf::Host::onStateChange.connect(&onHostStateChange); + simgrid::surf::Host::onDestruction.connect(&onHostDestruction); } /** @brief Returns the total energy consumed by the host so far (in Joules) -- 2.20.1