Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of framagit.org:simgrid/simgrid
[simgrid.git] / src / plugins / link_energy_wifi.cpp
index 2a57a2b..481f1f2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2017-2022. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2017-2023. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -10,6 +10,7 @@
 #include "src/kernel/activity/CommImpl.hpp"
 #include "src/kernel/resource/StandardLinkImpl.hpp"
 #include "src/kernel/resource/WifiLinkImpl.hpp"
+#include "src/simgrid/module.hpp"
 
 #include <boost/algorithm/string/classification.hpp>
 #include <boost/algorithm/string/split.hpp>
@@ -22,8 +23,7 @@ SIMGRID_REGISTER_PLUGIN(link_energy_wifi, "Energy wifi test", &sg_wifi_energy_pl
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(link_energy_wifi, kernel, "Logging specific to the link energy wifi plugin");
 
-namespace simgrid {
-namespace plugin {
+namespace simgrid::plugin {
 
 class XBT_PRIVATE LinkEnergyWifi {
   // associative array keeping size of data already sent for a given flow (required for interleaved actions)
@@ -105,10 +105,11 @@ void LinkEnergyWifi::update_destroy()
   dur_idle_ += duration;
 
   // add IDLE energy usage, as well as beacons consumption since previous update
-  eDyn_ += duration * control_duration_ * wifi_link->get_host_count() * pRx_;
-  eStat_ += (duration - (duration * control_duration_)) * pIdle_ * (wifi_link->get_host_count() + 1);
+  const auto host_count = static_cast<double>(wifi_link->get_host_count());
+  eDyn_ += duration * control_duration_ * host_count * pRx_;
+  eStat_ += (duration - (duration * control_duration_)) * pIdle_ * (host_count + 1);
 
-  XBT_DEBUG("finish eStat_ += %f * %f * (%d+1) | eStat = %f", duration, pIdle_, wifi_link->get_host_count(), eStat_);
+  XBT_DEBUG("finish eStat_ += %f * %f * (%f+1) | eStat = %f", duration, pIdle_, host_count, eStat_);
 }
 
 void LinkEnergyWifi::update()
@@ -177,7 +178,8 @@ void LinkEnergyWifi::update()
   XBT_DEBUG("durUsage: %f", durUsage);
 
   // beacons cost
-  eDyn_ += duration * control_duration_ * wifi_link->get_host_count() * pRx_;
+  const auto host_count = static_cast<double>(wifi_link->get_host_count());
+  eDyn_ += duration * control_duration_ * host_count * pRx_;
 
   /**
    * Same principle as ns3:
@@ -186,17 +188,17 @@ void LinkEnergyWifi::update()
    * P_{tot} = P_{dyn}+P_{stat}
    */
   if (link_->get_usage() != 0.0) {
-    eDyn_ += /*duration * */ durUsage * ((wifi_link->get_host_count() * pRx_) + pTx_);
-    eStat_ += (duration - durUsage) * pIdle_ * (wifi_link->get_host_count() + 1);
-    XBT_DEBUG("eDyn +=  %f * ((%d * %f) + %f) | eDyn = %f (durusage =%f)", durUsage, wifi_link->get_host_count(), pRx_,
-              pTx_, eDyn_, durUsage);
+    eDyn_ += /*duration * */ durUsage * ((host_count * pRx_) + pTx_);
+    eStat_ += (duration - durUsage) * pIdle_ * (host_count + 1);
+    XBT_DEBUG("eDyn +=  %f * ((%f * %f) + %f) | eDyn = %f (durusage =%f)", durUsage, host_count, pRx_, pTx_, eDyn_,
+              durUsage);
     dur_TxRx_ += duration;
   } else {
     dur_idle_ += duration;
-    eStat_ += (duration - (duration * control_duration_)) * pIdle_ * (wifi_link->get_host_count() + 1);
+    eStat_ += (duration - (duration * control_duration_)) * pIdle_ * (host_count + 1);
   }
 
-  XBT_DEBUG("eStat_ += %f * %f * (%d+1) | eStat = %f", duration, pIdle_, wifi_link->get_host_count(), eStat_);
+  XBT_DEBUG("eStat_ += %f * %f * (%f+1) | eStat = %f", duration, pIdle_, host_count, eStat_);
 }
 
 void LinkEnergyWifi::init_watts_range_list()
@@ -209,12 +211,11 @@ void LinkEnergyWifi::init_watts_range_list()
   Set to 0 if you do not want to compute beacons,
   otherwise to the duration of beacons transmissions per second
   */
-  const char* beacons_factor = this->link_->get_property("control_duration");
-  if(beacons_factor != nullptr) {
+  if (const char* beacons_factor = this->link_->get_property("control_duration")) {
     try {
       control_duration_ = std::stod(beacons_factor);
     } catch (const std::invalid_argument&) {
-      throw std::invalid_argument(std::string("Invalid beacons factor value for link ") + this->link_->get_cname());
+      throw std::invalid_argument("Invalid beacons factor value for link " + this->link_->get_name());
     }
   }
 
@@ -237,22 +238,22 @@ void LinkEnergyWifi::init_watts_range_list()
       try {
         pSleep_ = std::stod(current_power_values.at(3));
       } catch (const std::invalid_argument&) {
-        throw std::invalid_argument(std::string("Invalid idle power value for link ") + this->link_->get_cname());
+        throw std::invalid_argument("Invalid idle power value for link " + this->link_->get_name());
       }
       try {
         pRx_ = std::stod(current_power_values.at(2));
       } catch (const std::invalid_argument&) {
-        throw std::invalid_argument(std::string("Invalid idle power value for link ") + this->link_->get_cname());
+        throw std::invalid_argument("Invalid idle power value for link " + this->link_->get_name());
       }
       try {
         pTx_ = std::stod(current_power_values.at(1));
       } catch (const std::invalid_argument&) {
-        throw std::invalid_argument(std::string("Invalid idle power value for link ") + this->link_->get_cname());
+        throw std::invalid_argument("Invalid idle power value for link " + this->link_->get_name());
       }
       try {
         pIdle_ = std::stod(current_power_values.at(0));
       } catch (const std::invalid_argument&) {
-        throw std::invalid_argument(std::string("Invalid busy power value for link ") + this->link_->get_cname());
+        throw std::invalid_argument("Invalid busy power value for link " + this->link_->get_name());
       }
 
       XBT_DEBUG("Values aa initialized with: pSleep=%f pIdle=%f pTx=%f pRx=%f", pSleep_, pIdle_, pTx_, pRx_);
@@ -260,8 +261,7 @@ void LinkEnergyWifi::init_watts_range_list()
   }
 }
 
-} // namespace plugin
-} // namespace simgrid
+} // namespace simgrid::plugin
 
 using simgrid::plugin::LinkEnergyWifi;
 /* **************************** events  callback *************************** */