Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
save final incorrect changes
[simgrid.git] / src / surf / instr_routing.cpp
index 5401f12..0b46803 100644 (file)
@@ -22,19 +22,18 @@ static std::vector<container_t> currentContainer; /* push and pop, used only in
 static const char *instr_node_name (xbt_node_t node)
 {
   void *data = xbt_graph_node_get_data(node);
-  char *str = (char*)data;
-  return str;
+  return static_cast<char*>(data);
 }
 
 static container_t lowestCommonAncestor (container_t a1, container_t a2)
 {
   //this is only an optimization (since most of a1 and a2 share the same parent)
-  if (a1->father == a2->father) return a1->father;
+  if (a1->father == a2->father)
+    return a1->father;
 
   //create an array with all ancestors of a1
   std::vector<container_t> ancestors_a1;
-  container_t p;
-  p = a1->father;
+  container_t p = a1->father;
   while (p){
     ancestors_a1.push_back(p);
     p = p->father;
@@ -82,7 +81,8 @@ static void linkContainers (container_t src, container_t dst, xbt_dict_t filter)
 
   if (filter != nullptr){
     //check if we already register this pair (we only need one direction)
-    char aux1[INSTR_DEFAULT_STR_SIZE], aux2[INSTR_DEFAULT_STR_SIZE];
+    char aux1[INSTR_DEFAULT_STR_SIZE];
+    char aux2[INSTR_DEFAULT_STR_SIZE];
     snprintf (aux1, INSTR_DEFAULT_STR_SIZE, "%s%s", src->name, dst->name);
     snprintf (aux2, INSTR_DEFAULT_STR_SIZE, "%s%s", dst->name, src->name);
     if (xbt_dict_get_or_null (filter, aux1)){
@@ -117,9 +117,11 @@ static void linkContainers (container_t src, container_t dst, xbt_dict_t filter)
   static long long counter = 0;
 
   char key[INSTR_DEFAULT_STR_SIZE];
-  snprintf (key, INSTR_DEFAULT_STR_SIZE, "%lld", counter++);
-  new_pajeStartLink(SIMIX_get_clock(), father, link_type, src, "topology", key);
-  new_pajeEndLink(SIMIX_get_clock(), father, link_type, dst, "topology", key);
+  snprintf (key, INSTR_DEFAULT_STR_SIZE, "%lld", counter);
+  counter++;
+
+  StartLinkEvent(SIMIX_get_clock(), father, link_type, src, "topology", key);
+  EndLinkEvent(SIMIX_get_clock(), father, link_type, dst, "topology", key);
 
   XBT_DEBUG ("  linkContainers %s <-> %s", src->name, dst->name);
 }
@@ -131,36 +133,31 @@ static void recursiveGraphExtraction(simgrid::s4u::NetZone* netzone, container_t
     return;
   }
   XBT_DEBUG("Graph extraction for NetZone = %s", netzone->name());
-  if (!xbt_dict_is_empty(netzone->children())) {
-    xbt_dict_cursor_t cursor = nullptr;
-    NetZone_t nz_son;
-    char *child_name;
+  if (!netzone->children()->empty()) {
     //bottom-up recursion
-    xbt_dict_foreach (netzone->children(), cursor, child_name, nz_son) {
-      container_t child_container = (container_t)xbt_dict_get(container->children, nz_son->name());
+    for (auto nz_son : *netzone->children()) {
+      container_t child_container = static_cast<container_t>(xbt_dict_get(container->children, nz_son->name()));
       recursiveGraphExtraction(nz_son, child_container, filter);
     }
   }
 
-  {
-    xbt_graph_t graph = xbt_graph_new_graph (0, nullptr);
-    xbt_dict_t nodes = xbt_dict_new_homogeneous(nullptr);
-    xbt_dict_t edges = xbt_dict_new_homogeneous(nullptr);
-    xbt_edge_t edge = nullptr;
+  xbt_graph_t graph = xbt_graph_new_graph (0, nullptr);
+  xbt_dict_t nodes = xbt_dict_new_homogeneous(nullptr);
+  xbt_dict_t edges = xbt_dict_new_homogeneous(nullptr);
+  xbt_edge_t edge = nullptr;
 
-    xbt_dict_cursor_t cursor = nullptr;
-    char *edge_name;
+  xbt_dict_cursor_t cursor = nullptr;
+  char *edge_name;
 
-    static_cast<simgrid::kernel::routing::NetZoneImpl*>(netzone)->getGraph(graph, nodes, edges);
-    xbt_dict_foreach(edges,cursor,edge_name,edge) {
-        linkContainers(
-          PJ_container_get((const char*) edge->src->data),
-          PJ_container_get((const char*) edge->dst->data), filter);
-    }
-    xbt_dict_free (&nodes);
-    xbt_dict_free (&edges);
-    xbt_graph_free_graph(graph, xbt_free_f, xbt_free_f, nullptr);
+  static_cast<simgrid::kernel::routing::NetZoneImpl*>(netzone)->getGraph(graph, nodes, edges);
+  xbt_dict_foreach(edges,cursor,edge_name,edge) {
+    linkContainers(
+          PJ_container_get(static_cast<const char*>(edge->src->data)),
+          PJ_container_get(static_cast<const char*>(edge->dst->data)), filter);
   }
+  xbt_dict_free (&nodes);
+  xbt_dict_free (&edges);
+  xbt_graph_free_graph(graph, xbt_free_f, xbt_free_f, nullptr);
 }
 
 /*
@@ -180,7 +177,8 @@ void sg_instr_AS_begin(sg_platf_AS_cbarg_t AS)
       type_t mpi = PJ_type_get_or_null ("MPI", root->type);
       if (mpi == nullptr){
         mpi = PJ_type_container_new("MPI", root->type);
-        if (!TRACE_smpi_is_grouped()) PJ_type_state_new ("MPI_STATE", mpi);
+        if (!TRACE_smpi_is_grouped())
+          PJ_type_state_new ("MPI_STATE", mpi);
         PJ_type_link_new ("MPI_LINK", PJ_type_get_root(), mpi, mpi);
       }
     }
@@ -205,16 +203,16 @@ void sg_instr_AS_end()
   }
 }
 
-static void instr_routing_parse_start_link(simgrid::surf::Link* link)
+static void instr_routing_parse_start_link(simgrid::s4u::Link& link)
 {
   if (currentContainer.empty()) // No ongoing parsing. Are you creating the loopback?
     return;
   container_t father = currentContainer.back();
 
-  double bandwidth_value = link->bandwidth();
-  double latency_value   = link->latency();
+  double bandwidth_value = link.bandwidth();
+  double latency_value   = link.latency();
 
-  container_t container = PJ_container_new(link->getName(), INSTR_LINK, father);
+  container_t container = PJ_container_new(link.name(), INSTR_LINK, father);
 
   if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (! TRACE_disable_link())) {
     type_t bandwidth = PJ_type_get_or_null("bandwidth", container->type);
@@ -225,8 +223,8 @@ static void instr_routing_parse_start_link(simgrid::surf::Link* link)
     if (latency == nullptr) {
       latency = PJ_type_variable_new("latency", nullptr, container->type);
     }
-    new_pajeSetVariable(0, container, bandwidth, bandwidth_value);
-    new_pajeSetVariable(0, container, latency, latency_value);
+    SetVariableEvent(0, container, bandwidth, bandwidth_value);
+    SetVariableEvent(0, container, latency, latency_value);
   }
   if (TRACE_uncategorized()) {
     type_t bandwidth_used = PJ_type_get_or_null("bandwidth_used", container->type);
@@ -247,8 +245,8 @@ void sg_instr_new_host(simgrid::s4u::Host& host)
       speed = PJ_type_variable_new ("power", nullptr, container->type);
     }
 
-    double current_speed_state = host.getPstateSpeedCurrent();
-    new_pajeSetVariable (0, container, speed, current_speed_state);
+    double current_speed_state = host.speed();
+    SetVariableEvent (0, container, speed, current_speed_state);
   }
   if (TRACE_uncategorized()){
     type_t speed_used = PJ_type_get_or_null ("power_used", container->type);
@@ -319,12 +317,12 @@ static void instr_routing_parse_end_platform ()
 
 void instr_routing_define_callbacks ()
 {
-  if (!TRACE_is_enabled()) return;
   //always need the call backs to ASes (we need only the root AS),
   //to create the rootContainer and the rootType properly
-  if (!TRACE_needs_platform()) return;
-  simgrid::surf::Link::onCreation.connect(instr_routing_parse_start_link);
-  simgrid::surf::on_postparse.connect(instr_routing_parse_end_platform);
+  if (!TRACE_is_enabled() || !TRACE_needs_platform())
+    return;
+  simgrid::s4u::Link::onCreation.connect(instr_routing_parse_start_link);
+  simgrid::s4u::onPlatformCreated.connect(instr_routing_parse_end_platform);
 }
 
 /*
@@ -421,16 +419,13 @@ int instr_platform_traced ()
 
 #define GRAPHICATOR_SUPPORT_FUNCTIONS
 
-static void recursiveXBTGraphExtraction(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges, NetZone_t netzone,
+static void recursiveXBTGraphExtraction(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges, sg_netzone_t netzone,
                                         container_t container)
 {
-  if (!xbt_dict_is_empty(netzone->children())) {
-    xbt_dict_cursor_t cursor = nullptr;
-    NetZone_t netzone_child;
-    char *child_name;
+  if (!netzone->children()->empty()) {
     //bottom-up recursion
-    xbt_dict_foreach (netzone->children(), cursor, child_name, netzone_child) {
-      container_t child_container = (container_t)xbt_dict_get(container->children, netzone_child->name());
+    for (auto netzone_child : *netzone->children()) {
+      container_t child_container = static_cast<container_t>(xbt_dict_get(container->children, netzone_child->name()));
       recursiveXBTGraphExtraction(graph, nodes, edges, netzone_child, child_container);
     }
   }
@@ -454,9 +449,8 @@ void instr_routing_platform_graph_export_graphviz (xbt_graph_t g, const char *fi
   unsigned int cursor = 0;
   xbt_node_t node = nullptr;
   xbt_edge_t edge = nullptr;
-  FILE *file = nullptr;
 
-  file = fopen(filename, "w");
+  FILE *file = fopen(filename, "w");
   xbt_assert(file, "Failed to open %s \n", filename);
 
   if (g->directed)
@@ -467,8 +461,7 @@ void instr_routing_platform_graph_export_graphviz (xbt_graph_t g, const char *fi
   fprintf(file, "  graph [overlap=scale]\n");
 
   fprintf(file, "  node [shape=box, style=filled]\n");
-  fprintf(file,
-          "  node [width=.3, height=.3, style=filled, color=skyblue]\n\n");
+  fprintf(file, "  node [width=.3, height=.3, style=filled, color=skyblue]\n\n");
 
   xbt_dynar_foreach(g->nodes, cursor, node) {
     fprintf(file, "  \"%s\";\n", instr_node_name(node));
@@ -483,5 +476,4 @@ void instr_routing_platform_graph_export_graphviz (xbt_graph_t g, const char *fi
   }
   fprintf(file, "}\n");
   fclose(file);
-
 }