X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/588d84fc8adffb87bdde21f3b6d8c410b54d53cc..6d2f9a6f0b14d7fe1f51dfe3b576a9bf2397ddb5:/src/instr/instr_paje_trace.c diff --git a/src/instr/instr_paje_trace.c b/src/instr/instr_paje_trace.c index 916e18a8c2..555ac028e8 100644 --- a/src/instr/instr_paje_trace.c +++ b/src/instr/instr_paje_trace.c @@ -5,31 +5,12 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "instr/instr_private.h" +#include "xbt/virtu.h" /* sg_cmdline */ #ifdef HAVE_TRACING 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 +103,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 +134,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 +177,24 @@ 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); + fprintf (tracing_file, "#["); + unsigned int cpt; + char *str; + xbt_dynar_foreach (xbt_cmdline, cpt, str){ + fprintf(tracing_file, "%s ",str); + } + fprintf (tracing_file, "]\n"); + + /* 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 +237,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 +246,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 +296,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 +476,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 +819,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);