Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
get trace category from surf_action instead of smx_action when tracing categorized...
[simgrid.git] / src / instr / resource_utilization.c
index eef6614..b41c6b0 100644 (file)
 
 #define VARIABLE_SEPARATOR '#'
 
+//to check if variables were previously set to 0, otherwise paje won't simulate them
+static xbt_dict_t platform_variables; /* host or link name -> array of categories */
+
 //B
-static xbt_dict_t last_platform_variables; /* to control the amount of add/sub variables events:
-   dict with key {RESOURCE_NAME}#Time or {RESOURCE_NAME}#Value of dict with variables types == string */
+static xbt_dict_t method_b_dict;
 
 //C
 static xbt_dict_t method_c_dict;
@@ -43,24 +45,47 @@ static char *strsplit (char *input, int field, char del) //caller should free th
 }
 
 //resource utilization tracing method
-typedef enum {methodA,methodB,methodC} TracingMethod;
-static TracingMethod currentMethod;
-
-static void __TRACE_define_method (char *method)
+static void (*TRACE_method_alloc)(void) = NULL;
+static void (*TRACE_method_release)(void) = NULL;
+static void (*TRACE_method_start)(smx_action_t action) = NULL;
+static void (*TRACE_method_event)(smx_action_t action, double now, double delta, const char *variable, const char *resource, double value) = NULL;
+static void (*TRACE_method_end)(smx_action_t action) = NULL;
+
+//used by all methods
+static void __TRACE_surf_check_variable_set_to_zero (double now, const char *variable, const char *resource)
 {
-  if (!strcmp(method, "a")){
-    currentMethod = methodA;
-  }else if (!strcmp(method, "b")){
-    currentMethod = methodB;
-  }else if (!strcmp(method, "c")){
-    currentMethod = methodC;
+  /* check if we have to set it to 0 */
+  if (!xbt_dict_get_or_null (platform_variables, resource)){
+    xbt_dynar_t array = xbt_dynar_new(sizeof(char*), xbt_free);
+    char *var_cpy = xbt_strdup(variable);
+    xbt_dynar_push (array, &var_cpy);
+    if (IS_TRACING_PLATFORM) pajeSetVariable (now, variable, resource, "0");
+    xbt_dict_set (platform_variables, resource, array, xbt_dynar_free_voidp);
   }else{
-    currentMethod = methodB; //default
+    xbt_dynar_t array = xbt_dict_get (platform_variables, resource);
+    unsigned int i;
+    char* cat;
+    int flag = 0;
+    xbt_dynar_foreach (array, i, cat) {
+      if (strcmp(variable, cat)==0){
+        flag = 1;
+      }
+    }
+    if (flag==0){
+      char *var_cpy = xbt_strdup(variable);
+      xbt_dynar_push (array, &var_cpy);
+      if (IS_TRACING_PLATFORM) pajeSetVariable (now, variable, resource, "0");
+    }
   }
+  /* end of check */
 }
 
+#define A_METHOD
 //A
-static void __TRACE_surf_resource_utilization_A (double now, double delta, const char *variable, const char *resource, double value)
+static void __TRACE_A_alloc (void) {}
+static void __TRACE_A_release (void) {}
+static void __TRACE_A_start (smx_action_t action) {}
+static void __TRACE_A_event (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value)
 {
   if (!IS_TRACING_PLATFORM) return;
 
@@ -70,17 +95,71 @@ static void __TRACE_surf_resource_utilization_A (double now, double delta, const
   __TRACE_surf_check_variable_set_to_zero (now, variable, resource);
   pajeAddVariable (now, variable, resource, valuestr);
   pajeSubVariable (now+delta, variable, resource, valuestr);
-  return;
 }
+static void __TRACE_A_end (smx_action_t action) {}
 
+#define B_METHOD
 //B
-static void __TRACE_surf_resource_utilization_initialize_B ()
+
+static void __TRACE_B_alloc (void)
+{
+  method_b_dict =  xbt_dict_new();
+}
+
+static void __TRACE_B_release (void)
 {
-  last_platform_variables =  xbt_dict_new();
+  xbt_dict_cursor_t cursor = NULL;
+  unsigned int cursor_ar = 0;
+    char *key, *value, *res;
+    char *resource;
+    char *aux = NULL;
+    char *var_cpy = NULL;
+    xbt_dynar_t resources = NULL;
+  if (!IS_TRACING_PLATFORM) return;
+  if (!xbt_dict_length(method_b_dict)){
+    return;
+  }else{
+    /* get all resources from method_b_dict */
+    resources = xbt_dynar_new(sizeof(char*), xbt_free);
+    xbt_dict_foreach(method_b_dict, cursor, key, value) {
+      res = strsplit (key, 0, VARIABLE_SEPARATOR);
+      aux = strsplit (key, 1, VARIABLE_SEPARATOR);
+      if (strcmp (aux, "Time") == 0){ //only need to add one of three
+        var_cpy = xbt_strdup (res);
+        xbt_dynar_push (resources, &var_cpy);
+      }
+      free (aux);
+      free (res);
+    }
+
+    /* iterate through resources array */
+    xbt_dynar_foreach (resources, cursor_ar, resource) {
+      char timekey[100], valuekey[100], variablekey[100];
+      char *time = NULL;
+      char *value = NULL;
+      char *variable = NULL;
+      snprintf (timekey, 100, "%s%cTime", resource, VARIABLE_SEPARATOR);
+      snprintf (valuekey, 100, "%s%cValue", resource, VARIABLE_SEPARATOR);
+      snprintf (variablekey, 100, "%s%cVariable", resource, VARIABLE_SEPARATOR);
+
+      time = xbt_dict_get_or_null (method_b_dict, timekey);
+      if (!time) continue;
+      value = xbt_dict_get (method_b_dict, valuekey);
+      variable = xbt_dict_get (method_b_dict, variablekey);
+      pajeSubVariable (atof(time), variable, resource, value);
+
+      xbt_dict_remove (method_b_dict, timekey);
+      xbt_dict_remove (method_b_dict, valuekey);
+      xbt_dict_remove (method_b_dict, variablekey);
+    }
+  }
+  xbt_dict_free (&method_b_dict);
 }
 
-static void __TRACE_surf_resource_utilization_B (double now, double delta, const char *variable, const char *resource, double value)
+static void __TRACE_B_start (smx_action_t action) {}
+static void __TRACE_B_event (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value)
 {
+
   if (!IS_TRACING_PLATFORM) return;
 
   char valuestr[100];
@@ -106,19 +185,19 @@ static void __TRACE_surf_resource_utilization_B (double now, double delta, const
   snprintf (valuekey, 100, "%s%cValue", resource, VARIABLE_SEPARATOR);
   snprintf (variablekey, 100, "%s%cVariable", resource, VARIABLE_SEPARATOR);
 
-  lastvariable = xbt_dict_get_or_null (last_platform_variables, variablekey);
+  lastvariable = xbt_dict_get_or_null (method_b_dict, variablekey);
   if (lastvariable == NULL){
     __TRACE_surf_check_variable_set_to_zero (now, variable, resource);
     pajeAddVariable (now, variable, resource, valuestr);
     nowdeltastr_cpy = xbt_strdup (nowdeltastr);
     valuestr_cpy = xbt_strdup (valuestr);
     variable_cpy = xbt_strdup (variable);
-    xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free);
-    xbt_dict_set (last_platform_variables, valuekey, valuestr_cpy, xbt_free);
-    xbt_dict_set (last_platform_variables, variablekey, variable_cpy, xbt_free);
+    xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free);
+    xbt_dict_set (method_b_dict, valuekey, valuestr_cpy, xbt_free);
+    xbt_dict_set (method_b_dict, variablekey, variable_cpy, xbt_free);
   }else{
-    lasttime = xbt_dict_get_or_null (last_platform_variables, timekey);
-    lastvalue = xbt_dict_get_or_null (last_platform_variables, valuekey);
+    lasttime = xbt_dict_get_or_null (method_b_dict, timekey);
+    lastvalue = xbt_dict_get_or_null (method_b_dict, valuekey);
 
     /* check if it is the same variable */
     if (strcmp(lastvariable, variable) == 0){ /* same variable */
@@ -127,15 +206,15 @@ static void __TRACE_surf_resource_utilization_B (double now, double delta, const
         /* check if lastvalue equals valuestr */
         if (atof(lastvalue) == value){ /* lastvalue == value (good, just advance time) */
           char *nowdeltastr_cpy = xbt_strdup (nowdeltastr);
-          xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free);
+          xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free);
         }else{ /* value has changed */
           /* value has changed, subtract previous value, add new one */
           pajeSubVariable (atof(lasttime), variable, resource, lastvalue);
           pajeAddVariable (atof(nowstr), variable, resource, valuestr);
           nowdeltastr_cpy = xbt_strdup (nowdeltastr);
           valuestr_cpy = xbt_strdup (valuestr);
-          xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free);
-          xbt_dict_set (last_platform_variables, valuekey, valuestr_cpy, xbt_free);
+          xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free);
+          xbt_dict_set (method_b_dict, valuekey, valuestr_cpy, xbt_free);
         }
       }else{ /* lasttime != now */
         /* the last time is different from new starting time, subtract to lasttime and add from nowstr */
@@ -143,8 +222,8 @@ static void __TRACE_surf_resource_utilization_B (double now, double delta, const
         pajeAddVariable (atof(nowstr), variable, resource, valuestr);
         nowdeltastr_cpy = xbt_strdup (nowdeltastr);
         valuestr_cpy = xbt_strdup (valuestr);
-        xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free);
-        xbt_dict_set (last_platform_variables, valuekey, valuestr_cpy, xbt_free);
+        xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free);
+        xbt_dict_set (method_b_dict, valuekey, valuestr_cpy, xbt_free);
       }
     }else{ /* variable has changed */
       pajeSubVariable (atof(lasttime), lastvariable, resource, lastvalue);
@@ -153,65 +232,28 @@ static void __TRACE_surf_resource_utilization_B (double now, double delta, const
       nowdeltastr_cpy = xbt_strdup (nowdeltastr);
       valuestr_cpy = xbt_strdup (valuestr);
       variable_cpy = xbt_strdup (variable);
-      xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free);
-      xbt_dict_set (last_platform_variables, valuekey, valuestr_cpy, xbt_free);
-      xbt_dict_set (last_platform_variables, variablekey, variable_cpy, xbt_free);
+      xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free);
+      xbt_dict_set (method_b_dict, valuekey, valuestr_cpy, xbt_free);
+      xbt_dict_set (method_b_dict, variablekey, variable_cpy, xbt_free);
     }
   }
   return;
 }
+static void __TRACE_B_end (smx_action_t action) {}
 
-static void __TRACE_surf_resource_utilization_finalize_B ()
+#define C_METHOD
+//C
+static void __TRACE_C_alloc (void)
 {
-  xbt_dict_cursor_t cursor = NULL;
-  unsigned int cursor_ar = 0;
-    char *key, *value, *res;
-    char *resource;
-    char *aux = NULL;
-    char *var_cpy = NULL;
-    xbt_dynar_t resources = NULL;
-  if (!IS_TRACING_PLATFORM) return;
-  if (!xbt_dict_length(last_platform_variables)){
-    return;
-  }else{
-    /* get all resources from last_platform_variables */
-    resources = xbt_dynar_new(sizeof(char*), xbt_free);
-    xbt_dict_foreach(last_platform_variables, cursor, key, value) {
-      res = strsplit (key, 0, VARIABLE_SEPARATOR);
-      aux = strsplit (key, 1, VARIABLE_SEPARATOR);
-      if (strcmp (aux, "Time") == 0){ //only need to add one of three
-        var_cpy = xbt_strdup (res);
-        xbt_dynar_push (resources, &var_cpy);
-      }
-      free (aux);
-      free (res);
-    }
-
-    /* iterate through resources array */
-    xbt_dynar_foreach (resources, cursor_ar, resource) {
-      char timekey[100], valuekey[100], variablekey[100];
-      char *time = NULL;
-      char *value = NULL;
-      char *variable = NULL;
-      snprintf (timekey, 100, "%s%cTime", resource, VARIABLE_SEPARATOR);
-      snprintf (valuekey, 100, "%s%cValue", resource, VARIABLE_SEPARATOR);
-      snprintf (variablekey, 100, "%s%cVariable", resource, VARIABLE_SEPARATOR);
-
-      time = xbt_dict_get_or_null (last_platform_variables, timekey);
-      if (!time) continue;
-      value = xbt_dict_get (last_platform_variables, valuekey);
-      variable = xbt_dict_get (last_platform_variables, variablekey);
-      pajeSubVariable (atof(time), variable, resource, value);
+  method_c_dict = xbt_dict_new();
+}
 
-      xbt_dict_remove (last_platform_variables, timekey);
-      xbt_dict_remove (last_platform_variables, valuekey);
-      xbt_dict_remove (last_platform_variables, variablekey);
-    }
-  }
+static void __TRACE_C_release (void)
+{
+  xbt_dict_free (&method_c_dict);
 }
 
-//C
-static void __TRACE_surf_resource_utilization_start_C (smx_action_t action)
+static void __TRACE_C_start (smx_action_t action)
 {
   char key[100];
   snprintf (key, 100, "%p", action);
@@ -221,60 +263,9 @@ static void __TRACE_surf_resource_utilization_start_C (smx_action_t action)
     xbt_dict_remove (method_c_dict, key); //should never execute here, but it does
   }
   xbt_dict_set (method_c_dict, key, xbt_dict_new(), xbt_free);
-
-  //fprintf (stderr, "start %p\n", action);
-  /*
-
-  if (xbt_dict_get_or_null (start_time, key)){
-    xbt_dict_remove (start_time, key);
-  }
-  */
 }
 
-static void __TRACE_surf_resource_utilization_end_C (smx_action_t action)
-{
-  char key[100];
-  snprintf (key, 100, "%p", action);
-
-  xbt_dict_t action_dict = xbt_dict_get (method_c_dict, key);
-//  fprintf (stderr, "end %p (%f - %f)\n", action, atof(xbt_dict_get_or_null(action_dict, "start")),
-//                                                 atof(xbt_dict_get_or_null(action_dict, "end")));
-
-  double start_time = atof(xbt_dict_get (action_dict, "start"));
-  double end_time = atof(xbt_dict_get (action_dict, "end"));
-
-  xbt_dict_cursor_t cursor=NULL;
-  char *action_dict_key, *action_dict_value;
-  xbt_dict_foreach(action_dict,cursor,action_dict_key,action_dict_value) {
-    char resource[100], variable[100];
-    if (sscanf (action_dict_key, "%s %s", resource, variable) != 2) continue;
-    __TRACE_surf_check_variable_set_to_zero (start_time, variable, resource);
-    char value_str[100];
-    if(end_time-start_time != 0){
-      snprintf (value_str, 100, "%f", atof(action_dict_value)/(end_time-start_time));
-      pajeAddVariable (start_time, variable, resource, value_str);
-      pajeSubVariable (end_time, variable, resource, value_str);
-    }
-
-    //fprintf(stderr, "\t%p (key=%s) %s %s = %s\n",action, action_dict_key, resource, variable, action_dict_value);
-    //fprintf(stderr, "\t%f %f\n", start_time, end_time);
-  }
-  //fprintf (stderr, "\n");
-
-  xbt_dict_remove (method_c_dict, key);
-  /*
-
-  if (xbt_dict_get_or_null (start_time_dict, key)){
-    xbt_dict_remove (start_time_dict, key);
-  }
-  if (xbt_dict_get_or_null (end_time_dict, key)){
-    xbt_dict_remove (end_time_dict, key);
-  }
-  */
-
-}
-
-static void __TRACE_surf_resource_utilization_C (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value)
+static void __TRACE_C_event (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value)
 {
   char key[100];
   snprintf (key, 100, "%p", action);
@@ -305,114 +296,131 @@ static void __TRACE_surf_resource_utilization_C (smx_action_t action, double now
   char new_current_value[100];
   snprintf (new_current_value, 100, "%f", current_value_f);
   xbt_dict_set (action_dict, res_var, xbt_strdup (new_current_value), xbt_free);
-
-  //fprintf (stderr, "event act=%p, now=%f, delta=%f, %s - %s %f\n", action, now, delta, resource, variable, value);
 }
 
-static void __TRACE_surf_resource_utilization_initialize_C ()
+static void __TRACE_C_end (smx_action_t action)
 {
-  //start_time_dict = xbt_dict_new();
-  //end_time_dict = xbt_dict_new();
-  method_c_dict = xbt_dict_new();
-}
+  char key[100];
+  snprintf (key, 100, "%p", action);
 
-static void __TRACE_surf_resource_utilization_finalize_C ()
-{
-  xbt_dict_free (&method_c_dict);
+  xbt_dict_t action_dict = xbt_dict_get (method_c_dict, key);
+  double start_time = atof(xbt_dict_get (action_dict, "start"));
+  double end_time = atof(xbt_dict_get (action_dict, "end"));
+
+  xbt_dict_cursor_t cursor=NULL;
+  char *action_dict_key, *action_dict_value;
+  xbt_dict_foreach(action_dict,cursor,action_dict_key,action_dict_value) {
+    char resource[100], variable[100];
+    if (sscanf (action_dict_key, "%s %s", resource, variable) != 2) continue;
+    __TRACE_surf_check_variable_set_to_zero (start_time, variable, resource);
+    char value_str[100];
+    if(end_time-start_time != 0){
+      snprintf (value_str, 100, "%f", atof(action_dict_value)/(end_time-start_time));
+      pajeAddVariable (start_time, variable, resource, value_str);
+      pajeSubVariable (end_time, variable, resource, value_str);
+    }
+  }
+  xbt_dict_remove (method_c_dict, key);
 }
 
+#define RESOURCE_UTILIZATION_INTERFACE
 /*
  * TRACE_surf_link_set_utilization: entry point from SimGrid
  */
-void TRACE_surf_link_set_utilization (const char *name, smx_action_t smx_action, double value, double now, double delta)
+void TRACE_surf_link_set_utilization (void *link, smx_action_t smx_action, surf_action_t surf_action, double value, double now, double delta)
 {
+  if (!IS_TRACING) return;
+  if (!value) return;
+  //only trace link utilization if link is known by tracing mechanism
+  if (!TRACE_surf_link_is_traced (link)) return;
+  if (!value) return;
+
+  //trace uncategorized link utilization
+  char resource[100];
+  snprintf (resource, 100, "%p", link);
+  TRACE_surf_resource_utilization_event (smx_action, now, delta, "bandwidth_used", resource, value);
+
+  //trace categorized utilization
+  if (!IS_TRACED(surf_action)) return;
   char type[100];
-  if (!IS_TRACING || !IS_TRACED(smx_action)) return;
-
-  if (strcmp (name, "__loopback__")==0 ||
-      strcmp (name, "loopback")==0){ //ignore loopback updates
-    return;
-  }
-
-  if (value == 0) return;
-
-  //if (!xbt_dict_get_or_null (created_links, name)){
-//    TRACE_surf_link_missing ();
-    //return;
-  //}
-
-  snprintf (type, 100, "b%s", smx_action->category);
-  __TRACE_surf_resource_utilization_event (smx_action, now, delta, type, name, value);
-//fprintf (stderr, "%p - (%f - %f = %f) %s %f metric = %f\n", smx_action, now, now+delta, delta, name, value, value*delta);
-//  __TRACE_surf_update_action_state_resource (now, delta, type, name, value);
+  snprintf (type, 100, "b%s", surf_action->category);
+  TRACE_surf_resource_utilization_event (smx_action, now, delta, type, resource, value);
   return;
 }
 
 /*
  * TRACE_surf_host_set_utilization: entry point from SimGrid
  */
-void TRACE_surf_host_set_utilization (const char *name, smx_action_t smx_action, double value, double now, double delta)
+void TRACE_surf_host_set_utilization (const char *name, smx_action_t smx_action, surf_action_t surf_action, double value, double now, double delta)
 {
-  char type[100];
-  if (!IS_TRACING || !IS_TRACED(smx_action)) return;
+  if (!IS_TRACING) return;
+  if (!value) return;
 
-  if (value==0){
-    return;
-  }
-  snprintf (type, 100, "p%s", smx_action->category);
-  __TRACE_surf_resource_utilization_event (smx_action, now, delta, type, name, value);
-//fprintf (stderr, "%p - (%f - %f = %f) %s %f metric = %f\n", smx_action, now, now+delta, delta, name, value, value*delta);
-//  __TRACE_surf_update_action_state_resource (now, delta, type, name, value);
+  //trace uncategorized host utilization
+  TRACE_surf_resource_utilization_event (smx_action, now, delta, "power_used", name, value);
+
+  //trace categorized utilization
+  if (!IS_TRACED(surf_action)) return;
+  char type[100];
+  snprintf (type, 100, "p%s", surf_action->category);
+  TRACE_surf_resource_utilization_event (smx_action, now, delta, type, name, value);
   return;
 }
 
 /*
  * __TRACE_surf_resource_utilization_*: entry points from tracing functions
  */
-void __TRACE_surf_resource_utilization_start (smx_action_t action)
+void TRACE_surf_resource_utilization_start (smx_action_t action)
 {
-  if (currentMethod == methodC){
-    __TRACE_surf_resource_utilization_start_C (action);
-  }
+  if (!IS_TRACING) return;
+  TRACE_method_start (action);
 }
 
-void __TRACE_surf_resource_utilization_end (smx_action_t action)
+void TRACE_surf_resource_utilization_event (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value)
 {
-  if (currentMethod == methodC){
-    __TRACE_surf_resource_utilization_end_C (action);
-  }
+  if (!IS_TRACING) return;
+  TRACE_method_event (action, now, delta, variable, resource, value);
 }
 
-void __TRACE_surf_resource_utilization_event (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value)
+void TRACE_surf_resource_utilization_end (smx_action_t action)
 {
-  if (currentMethod == methodA){
-    __TRACE_surf_resource_utilization_A (now, delta, variable, resource, value);
-  }else if (currentMethod == methodB){
-    __TRACE_surf_resource_utilization_B (now, delta, variable, resource, value);
-  }else if (currentMethod == methodC){
-    __TRACE_surf_resource_utilization_C (action, now, delta, variable, resource, value);
-  }
+  if (!IS_TRACING) return;
+  TRACE_method_end (action);
 }
 
-void __TRACE_surf_resource_utilization_initialize ()
+void TRACE_surf_resource_utilization_release ()
 {
-  __TRACE_define_method (_TRACE_platform_method());
+  if (!IS_TRACING) return;
+  TRACE_method_release ();
+}
 
-  if (currentMethod == methodA){
-  }else if (currentMethod == methodB){
-    __TRACE_surf_resource_utilization_initialize_B();
-  }else if (currentMethod == methodC){
-    __TRACE_surf_resource_utilization_initialize_C();
+static void __TRACE_define_method (char *method)
+{
+  if (!strcmp(method, "a")){
+    TRACE_method_alloc = __TRACE_A_alloc;
+    TRACE_method_release = __TRACE_A_release;
+    TRACE_method_start = __TRACE_A_start;
+    TRACE_method_event = __TRACE_A_event;
+    TRACE_method_end = __TRACE_A_end;
+  }else if (!strcmp(method, "c")){
+    TRACE_method_alloc = __TRACE_C_alloc;
+    TRACE_method_release = __TRACE_C_release;
+    TRACE_method_start = __TRACE_C_start;
+    TRACE_method_event = __TRACE_C_event;
+    TRACE_method_end = __TRACE_C_end;
+  }else{ //default is B
+    TRACE_method_alloc = __TRACE_B_alloc;
+    TRACE_method_release = __TRACE_B_release;
+    TRACE_method_start = __TRACE_B_start;
+    TRACE_method_event = __TRACE_B_event;
+    TRACE_method_end = __TRACE_B_end;
   }
 }
 
-void __TRACE_surf_resource_utilization_finalize ()
+void TRACE_surf_resource_utilization_alloc ()
 {
-  if (currentMethod == methodA){
-  }else if (currentMethod == methodB){
-    __TRACE_surf_resource_utilization_finalize_B();
-  }else if (currentMethod == methodC){
-    __TRACE_surf_resource_utilization_finalize_C();
-  }
+  platform_variables = xbt_dict_new();
+  __TRACE_define_method (TRACE_get_platform_method());
+  TRACE_method_alloc ();
 }
 #endif