Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Revert "[trace] remove version, otherwise we'll have to updates tesh'es at every...
[simgrid.git] / src / instr / instr_paje_trace.c
index 916e18a..7b5568d 100644 (file)
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr, "Paje tracing event system");
 
-typedef enum {
-  PAJE_DefineContainerType,
-  PAJE_DefineVariableType,
-  PAJE_DefineStateType,
-  PAJE_DefineEventType,
-  PAJE_DefineLinkType,
-  PAJE_DefineEntityValue,
-  PAJE_CreateContainer,
-  PAJE_DestroyContainer,
-  PAJE_SetVariable,
-  PAJE_AddVariable,
-  PAJE_SubVariable,
-  PAJE_SetState,
-  PAJE_PushState,
-  PAJE_PopState,
-  PAJE_StartLink,
-  PAJE_EndLink,
-  PAJE_NewEvent
-} e_event_type;
-
 typedef struct paje_event *paje_event_t;
 typedef struct paje_event {
   double timestamp;
@@ -122,6 +102,12 @@ typedef struct s_popState {
   type_t type;
 }s_popState_t;
 
+typedef struct s_resetState *resetState_t;
+typedef struct s_resetState {
+  container_t container;
+  type_t type;
+}s_resetState_t;
+
 typedef struct s_startLink *startLink_t;
 typedef struct s_startLink {
   container_t container;
@@ -147,10 +133,39 @@ typedef struct s_newEvent {
   val_t value;
 }s_newEvent_t;
 
-static FILE *tracing_file = NULL;
+FILE *tracing_file = NULL;
 
 static xbt_dynar_t buffer = NULL;
 
+static void dump_comment (const char *comment)
+{
+  if (!strlen(comment)) return;
+  fprintf (tracing_file, "# %s\n", comment);
+}
+
+static void dump_comment_file (const char *filename)
+{
+  if (!strlen(filename)) return;
+  FILE *file = fopen (filename, "r");
+  if (!file){
+    THROWF (system_error, 1, "Comment file %s could not be opened for reading.", filename);
+  }
+  while (!feof(file)){
+    char c;
+    c = fgetc(file);
+    if (feof(file)) break;
+    fprintf (tracing_file, "# ");
+    while (c != '\n'){
+      fprintf (tracing_file, "%c", c);
+      c = fgetc(file);
+      if (feof(file)) break;
+    }
+    fprintf (tracing_file, "\n");
+  }
+  fclose(file);
+}
+
+
 void TRACE_paje_start(void)
 {
   char *filename = TRACE_get_filename();
@@ -161,8 +176,17 @@ void TRACE_paje_start(void)
 
   XBT_DEBUG("Filename %s is open for writing", filename);
 
+  /* output generator version */
+  fprintf (tracing_file, "#This file was generated using SimGrid-%d.%d.%d\n", SIMGRID_VERSION_MAJOR, SIMGRID_VERSION_MINOR, SIMGRID_VERSION_PATCH);
+
+  /* output one line comment */
+  dump_comment (TRACE_get_comment());
+
+  /* output comment file */
+  dump_comment_file (TRACE_get_comment_file());
+
   /* output header */
-  TRACE_paje_create_header();
+  TRACE_header(TRACE_basic());
 
   buffer = xbt_dynar_new (sizeof(paje_event_t), NULL);
 }
@@ -205,133 +229,6 @@ void TRACE_paje_dump_buffer (int force)
   XBT_DEBUG("%s: ends", __FUNCTION__);
 }
 
-void TRACE_paje_create_header(void)
-{
-  XBT_DEBUG ("Define paje header");
-  fprintf(tracing_file, "\
-%%EventDef PajeDefineContainerType %d \n\
-%%       Alias string \n\
-%%       Type string \n\
-%%       Name string \n\
-%%EndEventDef \n\
-%%EventDef PajeDefineVariableType %d \n\
-%%       Alias string \n\
-%%       Type string \n\
-%%       Name string \n\
-%%       Color color \n\
-%%EndEventDef \n\
-%%EventDef PajeDefineStateType %d \n\
-%%       Alias string \n\
-%%       Type string \n\
-%%       Name string \n\
-%%EndEventDef \n\
-%%EventDef PajeDefineEventType %d \n\
-%%       Alias string \n\
-%%       Type string \n\
-%%       Name string \n\
-%%       Color color \n\
-%%EndEventDef \n\
-%%EventDef PajeDefineLinkType %d \n\
-%%       Alias string \n\
-%%       Type string \n\
-%%       StartContainerType string \n\
-%%       EndContainerType string \n\
-%%       Name string \n\
-%%EndEventDef \n\
-%%EventDef PajeDefineEntityValue %d \n\
-%%       Alias string \n\
-%%       Type string \n\
-%%       Name string \n\
-%%       Color color \n\
-%%EndEventDef \n\
-%%EventDef PajeCreateContainer %d \n\
-%%       Time date \n\
-%%       Alias string \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Name string \n\
-%%EndEventDef \n\
-%%EventDef PajeDestroyContainer %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Name string \n\
-%%EndEventDef \n\
-%%EventDef PajeSetVariable %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Value double \n\
-%%EndEventDef\n\
-%%EventDef PajeAddVariable %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Value double \n\
-%%EndEventDef\n\
-%%EventDef PajeSubVariable %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Value double \n\
-%%EndEventDef\n\
-%%EventDef PajeSetState %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Value string \n\
-%%EndEventDef\n\
-%%EventDef PajePushState %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Value string \n\
-%%EndEventDef\n\
-%%EventDef PajePopState %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%EndEventDef\n\
-%%EventDef PajeStartLink %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Value string \n\
-%%       StartContainer string \n\
-%%       Key string \n\
-%%EndEventDef\n\
-%%EventDef PajeEndLink %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Value string \n\
-%%       EndContainer string \n\
-%%       Key string \n\
-%%EndEventDef\n\
-%%EventDef PajeNewEvent %d \n\
-%%       Time date \n\
-%%       Type string \n\
-%%       Container string \n\
-%%       Value string \n\
-%%EndEventDef\n",
-  PAJE_DefineContainerType,
-  PAJE_DefineVariableType,
-  PAJE_DefineStateType,
-  PAJE_DefineEventType,
-  PAJE_DefineLinkType,
-  PAJE_DefineEntityValue,
-  PAJE_CreateContainer,
-  PAJE_DestroyContainer,
-  PAJE_SetVariable,
-  PAJE_AddVariable,
-  PAJE_SubVariable,
-  PAJE_SetState,
-  PAJE_PushState,
-  PAJE_PopState,
-  PAJE_StartLink,
-  PAJE_EndLink,
-  PAJE_NewEvent);
-}
-
 /* internal do the instrumentation module */
 static void insert_into_buffer (paje_event_t tbi)
 {
@@ -341,7 +238,7 @@ static void insert_into_buffer (paje_event_t tbi)
     return;
   }
   XBT_DEBUG("%s: insert event_type=%d, timestamp=%f, buffersize=%lu)",
-           __FUNCTION__, (int)tbi->event_type, tbi->timestamp, xbt_dynar_length(buffer));
+      __FUNCTION__, (int)tbi->event_type, tbi->timestamp, xbt_dynar_length(buffer));
 
   unsigned int i;
   for (i = xbt_dynar_length(buffer); i > 0; i--) {
@@ -391,12 +288,11 @@ static void print_pajeDefineStateType(paje_event_t event)
 static void print_pajeDefineEventType(paje_event_t event)
 {
   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
-  fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
+  fprintf(tracing_file, "%d %s %s %s\n",
       (int)event->event_type,
       ((defineEventType_t)event->data)->type->id,
       ((defineEventType_t)event->data)->type->father->id,
-      ((defineEventType_t)event->data)->type->name,
-      ((defineEventType_t)event->data)->type->color);
+      ((defineEventType_t)event->data)->type->name);
 }
 
 static void print_pajeDefineLinkType(paje_event_t event)
@@ -572,6 +468,23 @@ static void print_pajePopState(paje_event_t event)
   }
 }
 
+static void print_pajeResetState(paje_event_t event)
+{
+  XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
+  if (event->timestamp == 0){
+    fprintf(tracing_file, "%d 0 %s %s\n",
+        (int)event->event_type,
+        ((resetState_t)event->data)->type->id,
+        ((resetState_t)event->data)->container->id);
+  }else{
+    fprintf(tracing_file, "%d %lf %s %s\n",
+        (int)event->event_type,
+        event->timestamp,
+        ((resetState_t)event->data)->type->id,
+        ((resetState_t)event->data)->container->id);
+  }
+}
+
 static void print_pajeStartLink(paje_event_t event)
 {
   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
@@ -898,6 +811,23 @@ void new_pajePopState (double timestamp, container_t container, type_t type)
   insert_into_buffer (event);
 }
 
+
+void new_pajeResetState (double timestamp, container_t container, type_t type)
+{
+  paje_event_t event = xbt_new0(s_paje_event_t, 1);
+  event->event_type = PAJE_ResetState;
+  event->timestamp = timestamp;
+  event->print = print_pajeResetState;
+  event->free = free_paje_event;
+  event->data = xbt_new0(s_resetState_t, 1);
+  ((resetState_t)(event->data))->type = type;
+  ((resetState_t)(event->data))->container = container;
+
+  XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
+
+  insert_into_buffer (event);
+}
+
 void new_pajeStartLink (double timestamp, container_t container, type_t type, container_t sourceContainer, const char *value, const char *key)
 {
   paje_event_t event = xbt_new0(s_paje_event_t, 1);