typedef struct paje_event *paje_event_t;
typedef struct paje_event {
- unsigned int id;
double timestamp;
e_event_type event_type;
void (*print) (paje_event_t event);
typedef struct s_popState {
container_t container;
type_t type;
- char *value;
}s_popState_t;
typedef struct s_startLink *startLink_t;
typedef struct s_startLink {
- type_t type;
container_t container;
+ type_t type;
container_t sourceContainer;
char *value;
char *key;
typedef struct s_endLink *endLink_t;
typedef struct s_endLink {
- type_t type;
container_t container;
+ type_t type;
container_t destContainer;
char *value;
char *key;
typedef struct s_newEvent *newEvent_t;
typedef struct s_newEvent {
- type_t type;
container_t container;
+ type_t type;
char *value;
}s_newEvent_t;
static FILE *tracing_file = NULL;
-static int pajeDefineContainerTypeId = 0;
-static int pajeDefineStateTypeId = 1;
-static int pajeDefineEntityValueId = 2;
-static int pajeDefineEventTypeId = 3;
-static int pajeDefineLinkTypeId = 4;
-static int pajeCreateContainerId = 5;
-static int pajeSetStateId = 6;
-#define UNUSED007 7
-static int pajePopStateId = 8;
-static int pajeDestroyContainerId = 9;
-#define UNUSED006 10
-#define UNUSED003 11
-static int pajeStartLinkId = 12;
-static int pajeEndLinkId = 13;
-#define UNUSED000 14
-#define UNUSED004 15
-#define UNUSED008 16
-#define UNUSED009 17
-#define UNUSED005 18
-static int pajePushStateId = 19;
-static int pajeDefineEventTypeWithColorId = 20;
-static int pajeDefineVariableTypeWithColorId = 21;
-static int pajeSetVariableId = 22;
-static int pajeAddVariableId = 23;
-static int pajeSubVariableId = 24;
-static int pajeDefineVariableTypeId = 25;
-#define UNUSED001 26
-static int pajeNewEventId = 27;
-
-#define TRACE_LINE_SIZE 1000
+static xbt_dynar_t buffer = NULL;
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)
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");
%% ContainerType string \n\
%% Name string \n\
%%EndEventDef \n\
-%%EventDef PajeDefineStateType %d \n\
+%%EventDef PajeDefineVariableType %d \n\
%% Alias string \n\
%% ContainerType string \n\
%% Name string \n\
+%% Color color \n\
%%EndEventDef \n\
-%%EventDef PajeDefineEntityValue %d \n\
+%%EventDef PajeDefineStateType %d \n\
%% Alias string \n\
-%% EntityType string \n\
+%% ContainerType string \n\
%% Name string \n\
%%EndEventDef \n\
%%EventDef PajeDefineEventType %d \n\
%% Name string \n\
%% Color color \n\
%%EndEventDef \n\
-%%EventDef PajeDefineEventType %d \n\
-%% Alias string \n\
-%% EntityType string \n\
-%% Name string \n\
-%%EndEventDef \n\
%%EventDef PajeDefineLinkType %d \n\
%% Alias string \n\
%% ContainerType string \n\
%% Type string \n\
%% Container string \n\
%%EndEventDef \n\
-%%EventDef PajeSetState %d \n\
+%%EventDef PajeSetVariable %d \n\
%% Time date \n\
%% EntityType string \n\
%% Container string \n\
%% Value string \n\
%%EndEventDef\n\
-%%EventDef PajePopState %d \n\
+%%EventDef PajeAddVariable %d \n\
%% Time date \n\
%% EntityType string \n\
%% Container string \n\
+%% Value string \n\
%%EndEventDef\n\
-%%EventDef PajeStartLink %d \n\
+%%EventDef PajeSubVariable %d \n\
%% Time date \n\
%% EntityType string \n\
%% Container string \n\
%% Value string \n\
-%% SourceContainer string \n\
-%% Key string \n\
%%EndEventDef\n\
-%%EventDef PajeEndLink %d \n\
+%%EventDef PajeSetState %d \n\
%% Time date \n\
%% EntityType string \n\
%% Container string \n\
%% Value string \n\
-%% DestContainer string \n\
-%% Key string \n\
%%EndEventDef\n\
%%EventDef PajePushState %d \n\
%% Time date \n\
%% Container string \n\
%% Value string \n\
%%EndEventDef\n\
-%%EventDef PajeSetVariable %d \n\
+%%EventDef PajePopState %d \n\
%% Time date \n\
%% EntityType string \n\
%% Container string \n\
-%% Value string \n\
%%EndEventDef\n\
-%%EventDef PajeAddVariable %d \n\
+%%EventDef PajeStartLink %d \n\
%% Time date \n\
%% EntityType string \n\
%% Container string \n\
%% Value string \n\
+%% SourceContainer string \n\
+%% Key string \n\
%%EndEventDef\n\
-%%EventDef PajeSubVariable %d \n\
+%%EventDef PajeEndLink %d \n\
%% Time date \n\
%% EntityType string \n\
%% Container string \n\
%% Value string \n\
+%% DestContainer string \n\
+%% Key string \n\
%%EndEventDef\n\
-%%EventDef PajeDefineVariableType %d \n\
-%% Alias string \n\
-%% ContainerType string \n\
-%% Name string \n\
-%%EndEventDef \n\
-%%EventDef PajeDefineVariableType %d \n\
-%% Alias string \n\
-%% ContainerType string \n\
-%% Name string \n\
-%% Color color \n\
-%%EndEventDef \n\
%%EventDef PajeNewEvent %d \n\
%% Time date \n\
%% EntityType string \n\
%% Container string \n\
%% Value string \n\
-%%EndEventDef\n", pajeDefineContainerTypeId, pajeDefineStateTypeId, pajeDefineEntityValueId, pajeDefineEventTypeWithColorId, pajeDefineEventTypeId, pajeDefineLinkTypeId, pajeCreateContainerId, pajeDestroyContainerId, pajeSetStateId, pajePopStateId, pajeStartLinkId, pajeEndLinkId, pajePushStateId, pajeSetVariableId, pajeAddVariableId, pajeSubVariableId, pajeDefineVariableTypeId, pajeDefineVariableTypeWithColorId, pajeNewEventId);
+%%EndEventDef\n",
+ PAJE_DefineContainerType,
+ PAJE_DefineVariableType,
+ PAJE_DefineStateType,
+ PAJE_DefineEventType,
+ PAJE_DefineLinkType,
+ 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)
+{
+ 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",
- event->id,
+ event->event_type,
((defineContainerType_t)event->data)->type->id,
((defineContainerType_t)event->data)->type->father->id,
((defineContainerType_t)event->data)->type->name);
static void print_pajeDefineVariableType(paje_event_t event)
{
fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
- event->id,
+ event->event_type,
((defineVariableType_t)event->data)->type->id,
((defineVariableType_t)event->data)->type->father->id,
((defineVariableType_t)event->data)->type->name,
static void print_pajeDefineStateType(paje_event_t event)
{
fprintf(tracing_file, "%d %s %s %s\n",
- event->id,
+ event->event_type,
((defineStateType_t)event->data)->type->id,
((defineStateType_t)event->data)->type->father->id,
((defineStateType_t)event->data)->type->name);
static void print_pajeDefineEventType(paje_event_t event)
{
fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
- event->id,
+ event->event_type,
((defineEventType_t)event->data)->type->id,
((defineEventType_t)event->data)->type->father->id,
((defineEventType_t)event->data)->type->name,
static void print_pajeDefineLinkType(paje_event_t event)
{
fprintf(tracing_file, "%d %s %s %s %s %s\n",
- event->id,
+ event->event_type,
((defineLinkType_t)event->data)->type->id,
((defineLinkType_t)event->data)->type->father->id,
((defineLinkType_t)event->data)->source->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %s %s\n",
- event->id,
+ event->event_type,
((createContainer_t)event->data)->container->id,
((createContainer_t)event->data)->container->type->id,
((createContainer_t)event->data)->container->father->id,
((createContainer_t)event->data)->container->name);
}else{
fprintf(tracing_file, "%d %lf %s %s %s %s\n",
- event->id,
+ event->event_type,
event->timestamp,
((createContainer_t)event->data)->container->id,
((createContainer_t)event->data)->container->type->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s\n",
- event->id,
+ event->event_type,
((destroyContainer_t)event->data)->container->type->id,
((destroyContainer_t)event->data)->container->id);
}else{
fprintf(tracing_file, "%d %lf %s %s\n",
- event->id,
+ event->event_type,
event->timestamp,
((destroyContainer_t)event->data)->container->type->id,
((destroyContainer_t)event->data)->container->id);
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %f\n",
- event->id,
+ event->event_type,
((setVariable_t)event->data)->type->id,
((setVariable_t)event->data)->container->id,
((setVariable_t)event->data)->value);
}else{
fprintf(tracing_file, "%d %lf %s %s %f\n",
- event->id,
+ event->event_type,
event->timestamp,
((setVariable_t)event->data)->type->id,
((setVariable_t)event->data)->container->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %f\n",
- event->id,
+ event->event_type,
((addVariable_t)event->data)->type->id,
((addVariable_t)event->data)->container->id,
((addVariable_t)event->data)->value);
}else{
fprintf(tracing_file, "%d %lf %s %s %f\n",
- event->id,
+ event->event_type,
event->timestamp,
((addVariable_t)event->data)->type->id,
((addVariable_t)event->data)->container->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %f\n",
- event->id,
+ event->event_type,
((subVariable_t)event->data)->type->id,
((subVariable_t)event->data)->container->id,
((subVariable_t)event->data)->value);
}else{
fprintf(tracing_file, "%d %lf %s %s %f\n",
- event->id,
+ event->event_type,
event->timestamp,
((subVariable_t)event->data)->type->id,
((subVariable_t)event->data)->container->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %s\n",
- event->id,
+ event->event_type,
((setState_t)event->data)->type->id,
((setState_t)event->data)->container->id,
((setState_t)event->data)->value);
}else{
fprintf(tracing_file, "%d %lf %s %s %s\n",
- event->id,
+ event->event_type,
event->timestamp,
((setState_t)event->data)->type->id,
((setState_t)event->data)->container->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %s\n",
- event->id,
+ event->event_type,
((pushState_t)event->data)->type->id,
((pushState_t)event->data)->container->id,
((pushState_t)event->data)->value);
}else{
fprintf(tracing_file, "%d %lf %s %s %s\n",
- event->id,
+ event->event_type,
event->timestamp,
((pushState_t)event->data)->type->id,
((pushState_t)event->data)->container->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s\n",
- event->id,
+ event->event_type,
((popState_t)event->data)->type->id,
((popState_t)event->data)->container->id);
}else{
fprintf(tracing_file, "%d %lf %s %s\n",
- event->id,
+ event->event_type,
event->timestamp,
((popState_t)event->data)->type->id,
((popState_t)event->data)->container->id);
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
- event->id,
+ event->event_type,
((startLink_t)event->data)->type->id,
((startLink_t)event->data)->container->id,
((startLink_t)event->data)->value,
((startLink_t)event->data)->key);
}else {
fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
- event->id,
+ event->event_type,
event->timestamp,
((startLink_t)event->data)->type->id,
((startLink_t)event->data)->container->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
- event->id,
+ event->event_type,
((endLink_t)event->data)->type->id,
((endLink_t)event->data)->container->id,
((endLink_t)event->data)->value,
((endLink_t)event->data)->key);
}else {
fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
- event->id,
+ event->event_type,
event->timestamp,
((endLink_t)event->data)->type->id,
((endLink_t)event->data)->container->id,
{
if (event->timestamp == 0){
fprintf(tracing_file, "%d 0 %s %s %s\n",
- event->id,
+ event->event_type,
((newEvent_t)event->data)->type->id,
((newEvent_t)event->data)->container->id,
((newEvent_t)event->data)->value);
}else{
fprintf(tracing_file, "%d %lf %s %s %s\n",
- event->id,
+ event->event_type,
event->timestamp,
((newEvent_t)event->data)->type->id,
((newEvent_t)event->data)->container->id,
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_DefineContainerType;
- event->id = pajeDefineContainerTypeId;
event->timestamp = 0;
event->print = print_pajeDefineContainerType;
event->data = xbt_new0(s_defineContainerType_t, 1);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_DefineVariableType;
- event->id = pajeDefineVariableTypeWithColorId;
event->timestamp = 0;
event->print = print_pajeDefineVariableType;
event->data = xbt_new0(s_defineVariableType_t, 1);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_DefineStateType;
- event->id = pajeDefineStateTypeId;
event->timestamp = 0;
event->print = print_pajeDefineStateType;
event->data = xbt_new0(s_defineStateType_t, 1);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_DefineEventType;
- event->id = pajeDefineEventTypeWithColorId;
event->timestamp = 0;
event->print = print_pajeDefineEventType;
event->data = xbt_new0(s_defineEventType_t, 1);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_DefineLinkType;
- event->id = pajeDefineLinkTypeId;
event->timestamp = 0;
event->print = print_pajeDefineLinkType;
event->data = xbt_new0(s_defineLinkType_t, 1);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_CreateContainer;
- event->id = pajeCreateContainerId;
event->timestamp = SIMIX_get_clock();
event->print = print_pajeCreateContainer;
event->data = xbt_new0(s_createContainer_t, 1);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_DestroyContainer;
- event->id = pajeDestroyContainerId;
event->timestamp = SIMIX_get_clock();
event->print = print_pajeDestroyContainer;
event->data = xbt_new0(s_destroyContainer_t, 1);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_SetVariable;
- event->id = pajeSetVariableId;
event->timestamp = timestamp;
event->print = print_pajeSetVariable;
event->data = xbt_new0(s_setVariable_t, 1);
((setVariable_t)(event->data))->container = container;
((setVariable_t)(event->data))->value = value;
+ insert_into_buffer (event);
+ return;
+
//print it
event->print (event);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_AddVariable;
- event->id = pajeAddVariableId;
event->timestamp = timestamp;
event->print = print_pajeAddVariable;
event->data = xbt_new0(s_addVariable_t, 1);
((addVariable_t)(event->data))->container = container;
((addVariable_t)(event->data))->value = value;
+ insert_into_buffer (event);
+ return;
+
//print it
event->print (event);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_SubVariable;
- event->id = pajeSubVariableId;
event->timestamp = timestamp;
event->print = print_pajeSubVariable;
event->data = xbt_new0(s_subVariable_t, 1);
((subVariable_t)(event->data))->container = container;
((subVariable_t)(event->data))->value = value;
+ insert_into_buffer (event);
+ return;
+
//print it
event->print (event);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_SetState;
- event->id = pajeSetStateId;
event->timestamp = timestamp;
event->print = print_pajeSetState;
event->data = xbt_new0(s_setState_t, 1);
((setState_t)(event->data))->container = container;
((setState_t)(event->data))->value = xbt_strdup(value);
+ insert_into_buffer (event);
+ return;
+
//print it
event->print (event);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_PushState;
- event->id = pajePushStateId;
event->timestamp = timestamp;
event->print = print_pajePushState;
event->data = xbt_new0(s_pushState_t, 1);
((pushState_t)(event->data))->container = container;
((pushState_t)(event->data))->value = xbt_strdup(value);
+ insert_into_buffer (event);
+ return;
+
//print it
event->print (event);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_PopState;
- event->id = pajePopStateId;
event->timestamp = timestamp;
event->print = print_pajePopState;
event->data = xbt_new0(s_popState_t, 1);
((popState_t)(event->data))->type = type;
((popState_t)(event->data))->container = container;
+ insert_into_buffer (event);
+ return;
+
//print it
event->print (event);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_StartLink;
- event->id = pajeStartLinkId;
event->timestamp = timestamp;
event->print = print_pajeStartLink;
event->data = xbt_new0(s_startLink_t, 1);
((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);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_EndLink;
- event->id = pajeEndLinkId;
event->timestamp = timestamp;
event->print = print_pajeEndLink;
event->data = xbt_new0(s_endLink_t, 1);
((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);
{
paje_event_t event = xbt_new0(s_paje_event_t, 1);
event->event_type = PAJE_NewEvent;
- event->id = pajeNewEventId;
event->timestamp = timestamp;
event->print = print_pajeNewEvent;
event->data = xbt_new0(s_newEvent_t, 1);
((newEvent_t)(event->data))->container = container;
((newEvent_t)(event->data))->value = xbt_strdup(value);
+ insert_into_buffer (event);
+ return;
+
//print it
event->print (event);