X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/778b06d156f6e300a447df10b297a62cc3c73b4d..e9a0e9bc5955dc35cdce96dfdee9ab09fcb0d25e:/src/instr/instr_paje_trace.c diff --git a/src/instr/instr_paje_trace.c b/src/instr/instr_paje_trace.c index 0e0af37434..e3d78b2f0b 100644 --- a/src/instr/instr_paje_trace.c +++ b/src/instr/instr_paje_trace.c @@ -5,32 +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_ResetState, - PAJE_StartLink, - PAJE_EndLink, - PAJE_NewEvent -} e_event_type; - typedef struct paje_event *paje_event_t; typedef struct paje_event { double timestamp; @@ -154,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(); @@ -168,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); } @@ -199,151 +224,20 @@ void TRACE_paje_dump_buffer (int force) buffer = xbt_dynar_new (sizeof(paje_event_t), NULL); }else{ paje_event_t event; - while (!xbt_dynar_is_empty(buffer)){ - double head_timestamp = (*(paje_event_t*)xbt_dynar_get_ptr(buffer, 0))->timestamp; + unsigned int cursor; + xbt_dynar_foreach(buffer, cursor, event) { + double head_timestamp = event->timestamp; if (head_timestamp > TRACE_last_timestamp_to_dump){ break; } - xbt_dynar_remove_at (buffer, 0, &event); event->print (event); event->free (event); } + xbt_dynar_remove_n_at(buffer, cursor, 0); } 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\ -%%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 PajeResetState %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_ResetState, - PAJE_StartLink, - PAJE_EndLink, - PAJE_NewEvent); -} - /* internal do the instrumentation module */ static void insert_into_buffer (paje_event_t tbi) {