Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[trace] buffering all events except type hierarchy definition and create/destroy...
authorschnorr <schnorr@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 28 Dec 2010 23:19:44 +0000 (23:19 +0000)
committerschnorr <schnorr@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 28 Dec 2010 23:19:44 +0000 (23:19 +0000)
todo:
- leaking memory now, to be fixed in the next commits

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9323 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/instr/instr_config.c
src/instr/instr_paje_trace.c
src/instr/instr_private.h
src/surf/surf.c

index fe80f66..6c72f7f 100644 (file)
@@ -69,6 +69,9 @@ int TRACE_end()
     TRACE_generate_triva_cat_conf();
   }
 
     TRACE_generate_triva_cat_conf();
   }
 
+  /* dump trace buffer */
+  TRACE_paje_dump_buffer();
+
   /* destroy all data structures of tracing (and free) */
   destroyAllContainers();
 
   /* destroy all data structures of tracing (and free) */
   destroyAllContainers();
 
index 5e5033b..4bd2081 100644 (file)
@@ -145,6 +145,7 @@ typedef struct s_newEvent {
 
 static FILE *tracing_file = NULL;
 
 
 static FILE *tracing_file = NULL;
 
+static xbt_dynar_t buffer = NULL;
 
 void TRACE_paje_start(void)
 {
 
 void TRACE_paje_start(void)
 {
@@ -156,6 +157,8 @@ void TRACE_paje_start(void)
 
   /* output header */
   TRACE_paje_create_header();
 
   /* output header */
   TRACE_paje_create_header();
+
+  buffer = xbt_dynar_new (sizeof(paje_event_t), NULL);
 }
 
 void TRACE_paje_end(void)
 }
 
 void TRACE_paje_end(void)
@@ -165,6 +168,15 @@ void TRACE_paje_end(void)
   DEBUG1("Filename %s is closed", filename);
 }
 
   DEBUG1("Filename %s is closed", filename);
 }
 
+void TRACE_paje_dump_buffer (void)
+{
+  paje_event_t event;
+  while (xbt_dynar_length (buffer) > 0){
+    xbt_dynar_remove_at (buffer, 0, &event);
+    event->print (event);
+  }
+}
+
 void TRACE_paje_create_header(void)
 {
   DEBUG0 ("Define paje header");
 void TRACE_paje_create_header(void)
 {
   DEBUG0 ("Define paje header");
@@ -286,6 +298,27 @@ void TRACE_paje_create_header(void)
 }
 
 /* internal do the instrumentation module */
 }
 
 /* internal do the instrumentation module */
+static void insert_into_buffer (paje_event_t tbi)
+{
+  unsigned int i;
+  if (xbt_dynar_length(buffer) == 0){
+    xbt_dynar_push (buffer, &tbi);
+  }else{
+    int inserted = 0;
+    for (i = 0; i < xbt_dynar_length(buffer); i++){
+      paje_event_t e1 = *(paje_event_t*)xbt_dynar_get_ptr(buffer, i);
+      if (e1->timestamp > tbi->timestamp){
+        xbt_dynar_insert_at (buffer, i, &tbi);
+        inserted = 1;
+        break;
+      }
+    }
+    if (!inserted){
+      xbt_dynar_push (buffer, &tbi);
+    }
+  }
+}
+
 static void print_pajeDefineContainerType(paje_event_t event)
 {
   fprintf(tracing_file, "%d %s %s %s\n",
 static void print_pajeDefineContainerType(paje_event_t event)
 {
   fprintf(tracing_file, "%d %s %s %s\n",
@@ -678,6 +711,9 @@ void new_pajeSetVariable (double timestamp, container_t container, type_t type,
   ((setVariable_t)(event->data))->container = container;
   ((setVariable_t)(event->data))->value = value;
 
   ((setVariable_t)(event->data))->container = container;
   ((setVariable_t)(event->data))->value = value;
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
@@ -699,6 +735,9 @@ void new_pajeAddVariable (double timestamp, container_t container, type_t type,
   ((addVariable_t)(event->data))->container = container;
   ((addVariable_t)(event->data))->value = value;
 
   ((addVariable_t)(event->data))->container = container;
   ((addVariable_t)(event->data))->value = value;
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
@@ -719,6 +758,9 @@ void new_pajeSubVariable (double timestamp, container_t container, type_t type,
   ((subVariable_t)(event->data))->container = container;
   ((subVariable_t)(event->data))->value = value;
 
   ((subVariable_t)(event->data))->container = container;
   ((subVariable_t)(event->data))->value = value;
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
@@ -739,6 +781,9 @@ void new_pajeSetState (double timestamp, container_t container, type_t type, con
   ((setState_t)(event->data))->container = container;
   ((setState_t)(event->data))->value = xbt_strdup(value);
 
   ((setState_t)(event->data))->container = container;
   ((setState_t)(event->data))->value = xbt_strdup(value);
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
@@ -761,6 +806,9 @@ void new_pajePushState (double timestamp, container_t container, type_t type, co
   ((pushState_t)(event->data))->container = container;
   ((pushState_t)(event->data))->value = xbt_strdup(value);
 
   ((pushState_t)(event->data))->container = container;
   ((pushState_t)(event->data))->value = xbt_strdup(value);
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
@@ -782,6 +830,9 @@ void new_pajePopState (double timestamp, container_t container, type_t type)
   ((popState_t)(event->data))->type = type;
   ((popState_t)(event->data))->container = container;
 
   ((popState_t)(event->data))->type = type;
   ((popState_t)(event->data))->container = container;
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
@@ -804,6 +855,9 @@ void new_pajeStartLink (double timestamp, container_t container, type_t type, co
   ((startLink_t)(event->data))->value = xbt_strdup(value);
   ((startLink_t)(event->data))->key = xbt_strdup(key);
 
   ((startLink_t)(event->data))->value = xbt_strdup(value);
   ((startLink_t)(event->data))->key = xbt_strdup(key);
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
@@ -828,6 +882,9 @@ void new_pajeEndLink (double timestamp, container_t container, type_t type, cont
   ((endLink_t)(event->data))->value = xbt_strdup(value);
   ((endLink_t)(event->data))->key = xbt_strdup(key);
 
   ((endLink_t)(event->data))->value = xbt_strdup(value);
   ((endLink_t)(event->data))->key = xbt_strdup(key);
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
@@ -850,6 +907,9 @@ void new_pajeNewEvent (double timestamp, container_t container, type_t type, con
   ((newEvent_t)(event->data))->container = container;
   ((newEvent_t)(event->data))->value = xbt_strdup(value);
 
   ((newEvent_t)(event->data))->container = container;
   ((newEvent_t)(event->data))->value = xbt_strdup(value);
 
+  insert_into_buffer (event);
+  return;
+
   //print it
   event->print (event);
 
   //print it
   event->print (event);
 
index 4ea88e4..9e620e0 100644 (file)
@@ -63,6 +63,7 @@ extern xbt_dict_t created_categories;
 void TRACE_paje_create_header(void);
 void TRACE_paje_start(void);
 void TRACE_paje_end(void);
 void TRACE_paje_create_header(void);
 void TRACE_paje_start(void);
 void TRACE_paje_end(void);
+void TRACE_paje_dump_buffer (void);
 void new_pajeDefineContainerType(type_t type);
 void new_pajeDefineVariableType(type_t type);
 void new_pajeDefineStateType(type_t type);
 void new_pajeDefineContainerType(type_t type);
 void new_pajeDefineVariableType(type_t type);
 void new_pajeDefineStateType(type_t type);
index 4a8b163..8e3ce48 100644 (file)
@@ -414,6 +414,12 @@ double surf_solve(double max_date)
     min = max_date - NOW;
   }
 
     min = max_date - NOW;
   }
 
+
+#ifdef HAVE_TRACING
+  //NOW changed, dump buffer
+  TRACE_paje_dump_buffer ();
+#endif
+
   DEBUG0("Looking for next action end");
   xbt_dynar_foreach(model_list, iter, model) {
     DEBUG1("Running for Resource [%s]", model->name);
   DEBUG0("Looking for next action end");
   xbt_dynar_foreach(model_list, iter, model) {
     DEBUG1("Running for Resource [%s]", model->name);