From: schnorr Date: Tue, 28 Dec 2010 23:19:44 +0000 (+0000) Subject: [trace] buffering all events except type hierarchy definition and create/destroy... X-Git-Tag: v3.6_beta2~603 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/9e0ca3c3610b911e43366c78f4948842db40e084 [trace] buffering all events except type hierarchy definition and create/destroy container 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 --- diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index fe80f666ae..6c72f7f978 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -69,6 +69,9 @@ int TRACE_end() TRACE_generate_triva_cat_conf(); } + /* dump trace buffer */ + TRACE_paje_dump_buffer(); + /* destroy all data structures of tracing (and free) */ destroyAllContainers(); diff --git a/src/instr/instr_paje_trace.c b/src/instr/instr_paje_trace.c index 5e5033b341..4bd20818f8 100644 --- a/src/instr/instr_paje_trace.c +++ b/src/instr/instr_paje_trace.c @@ -145,6 +145,7 @@ typedef struct s_newEvent { static FILE *tracing_file = NULL; +static xbt_dynar_t buffer = NULL; void TRACE_paje_start(void) { @@ -156,6 +157,8 @@ void TRACE_paje_start(void) /* output header */ TRACE_paje_create_header(); + + buffer = xbt_dynar_new (sizeof(paje_event_t), NULL); } void TRACE_paje_end(void) @@ -165,6 +168,15 @@ void TRACE_paje_end(void) 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"); @@ -286,6 +298,27 @@ void TRACE_paje_create_header(void) } /* 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", @@ -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; + insert_into_buffer (event); + return; + //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; + insert_into_buffer (event); + return; + //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; + insert_into_buffer (event); + return; + //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); + insert_into_buffer (event); + return; + //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); + insert_into_buffer (event); + return; + //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; + insert_into_buffer (event); + return; + //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); + insert_into_buffer (event); + return; + //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); + insert_into_buffer (event); + return; + //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); + insert_into_buffer (event); + return; + //print it event->print (event); diff --git a/src/instr/instr_private.h b/src/instr/instr_private.h index 4ea88e41b0..9e620e0259 100644 --- a/src/instr/instr_private.h +++ b/src/instr/instr_private.h @@ -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_dump_buffer (void); void new_pajeDefineContainerType(type_t type); void new_pajeDefineVariableType(type_t type); void new_pajeDefineStateType(type_t type); diff --git a/src/surf/surf.c b/src/surf/surf.c index 4a8b163795..8e3ce48aac 100644 --- a/src/surf/surf.c +++ b/src/surf/surf.c @@ -414,6 +414,12 @@ double surf_solve(double max_date) 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);