Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branches 'MC_LTL' and 'MC_LTL' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git] / src / instr / instr_paje_trace.c
1 /* Copyright (c) 2010. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5   * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #include "instr/instr_private.h"
8
9 #ifdef HAVE_TRACING
10
11 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr, "Paje tracing event system");
12
13 typedef enum {
14   PAJE_DefineContainerType,
15   PAJE_DefineVariableType,
16   PAJE_DefineStateType,
17   PAJE_DefineEventType,
18   PAJE_DefineLinkType,
19   PAJE_DefineEntityValue,
20   PAJE_CreateContainer,
21   PAJE_DestroyContainer,
22   PAJE_SetVariable,
23   PAJE_AddVariable,
24   PAJE_SubVariable,
25   PAJE_SetState,
26   PAJE_PushState,
27   PAJE_PopState,
28   PAJE_StartLink,
29   PAJE_EndLink,
30   PAJE_NewEvent,
31 } e_event_type;
32
33 typedef struct paje_event *paje_event_t;
34 typedef struct paje_event {
35   double timestamp;
36   e_event_type event_type;
37   void (*print) (paje_event_t event);
38   void (*free) (paje_event_t event);
39   void *data;
40 } s_paje_event_t;
41
42 typedef struct s_defineContainerType *defineContainerType_t;
43 typedef struct s_defineContainerType {
44   type_t type;
45 }s_defineContainerType_t;
46
47 typedef struct s_defineVariableType *defineVariableType_t;
48 typedef struct s_defineVariableType {
49   type_t type;
50 }s_defineVariableType_t;
51
52 typedef struct s_defineStateType *defineStateType_t;
53 typedef struct s_defineStateType {
54   type_t type;
55 }s_defineStateType_t;
56
57 typedef struct s_defineEventType *defineEventType_t;
58 typedef struct s_defineEventType {
59   type_t type;
60 }s_defineEventType_t;
61
62 typedef struct s_defineLinkType *defineLinkType_t;
63 typedef struct s_defineLinkType {
64   type_t type;
65   type_t source;
66   type_t dest;
67 }s_defineLinkType_t;
68
69 typedef struct s_defineEntityValue *defineEntityValue_t;
70 typedef struct s_defineEntityValue {
71   val_t value;
72 }s_defineEntityValue_t;
73
74 typedef struct s_createContainer *createContainer_t;
75 typedef struct s_createContainer {
76   container_t container;
77 }s_createContainer_t;
78
79 typedef struct s_destroyContainer *destroyContainer_t;
80 typedef struct s_destroyContainer {
81   container_t container;
82 }s_destroyContainer_t;
83
84 typedef struct s_setVariable *setVariable_t;
85 typedef struct s_setVariable {
86   container_t container;
87   type_t type;
88   double value;
89 }s_setVariable_t;
90
91 typedef struct s_addVariable *addVariable_t;
92 typedef struct s_addVariable {
93   container_t container;
94   type_t type;
95   double value;
96 }s_addVariable_t;
97
98 typedef struct s_subVariable *subVariable_t;
99 typedef struct s_subVariable {
100   container_t container;
101   type_t type;
102   double value;
103 }s_subVariable_t;
104
105 typedef struct s_setState *setState_t;
106 typedef struct s_setState {
107   container_t container;
108   type_t type;
109   val_t value;
110 }s_setState_t;
111
112 typedef struct s_pushState *pushState_t;
113 typedef struct s_pushState {
114   container_t container;
115   type_t type;
116   val_t value;
117 }s_pushState_t;
118
119 typedef struct s_popState *popState_t;
120 typedef struct s_popState {
121   container_t container;
122   type_t type;
123 }s_popState_t;
124
125 typedef struct s_startLink *startLink_t;
126 typedef struct s_startLink {
127   container_t container;
128   type_t type;
129   container_t sourceContainer;
130   char *value;
131   char *key;
132 }s_startLink_t;
133
134 typedef struct s_endLink *endLink_t;
135 typedef struct s_endLink {
136   container_t container;
137   type_t type;
138   container_t destContainer;
139   char *value;
140   char *key;
141 }s_endLink_t;
142
143 typedef struct s_newEvent *newEvent_t;
144 typedef struct s_newEvent {
145   container_t container;
146   type_t type;
147   val_t value;
148 }s_newEvent_t;
149
150 static FILE *tracing_file = NULL;
151
152 static xbt_dynar_t buffer = NULL;
153
154 void TRACE_paje_start(void)
155 {
156   char *filename = TRACE_get_filename();
157   tracing_file = fopen(filename, "w");
158   xbt_assert (tracing_file != NULL, "Tracefile %s could not be opened for writing.", filename);
159
160   XBT_DEBUG("Filename %s is open for writing", filename);
161
162   /* output header */
163   TRACE_paje_create_header();
164
165   buffer = xbt_dynar_new (sizeof(paje_event_t), NULL);
166 }
167
168 void TRACE_paje_end(void)
169 {
170   fclose(tracing_file);
171   char *filename = TRACE_get_filename();
172   xbt_dynar_free (&buffer);
173   XBT_DEBUG("Filename %s is closed", filename);
174 }
175
176 double TRACE_last_timestamp_to_dump = 0;
177 //dumps the trace file until the timestamp TRACE_last_timestamp_to_dump
178 void TRACE_paje_dump_buffer (int force)
179 {
180   if (!TRACE_is_enabled()) return;
181   XBT_DEBUG("%s: dump until %f. starts", __FUNCTION__, TRACE_last_timestamp_to_dump);
182   if (force){
183     paje_event_t event;
184     unsigned int i;
185     xbt_dynar_foreach(buffer, i, event){
186       event->print (event);
187       event->free (event);
188     }
189     xbt_dynar_free (&buffer);
190     buffer = xbt_dynar_new (sizeof(paje_event_t), NULL);
191   }else{
192     paje_event_t event;
193     while (!xbt_dynar_is_empty(buffer)){
194       double head_timestamp = (*(paje_event_t*)xbt_dynar_get_ptr(buffer, 0))->timestamp;
195       if (head_timestamp > TRACE_last_timestamp_to_dump){
196         break;
197       }
198       xbt_dynar_remove_at (buffer, 0, &event);
199       event->print (event);
200       event->free (event);
201     }
202   }
203   XBT_DEBUG("%s: ends", __FUNCTION__);
204 }
205
206 void TRACE_paje_create_header(void)
207 {
208   XBT_DEBUG ("Define paje header");
209   fprintf(tracing_file, "\
210 %%EventDef PajeDefineContainerType %d \n\
211 %%       Alias string \n\
212 %%       ContainerType string \n\
213 %%       Name string \n\
214 %%EndEventDef \n\
215 %%EventDef PajeDefineVariableType %d \n\
216 %%       Alias string \n\
217 %%       ContainerType string \n\
218 %%       Name string \n\
219 %%       Color color \n\
220 %%EndEventDef \n\
221 %%EventDef PajeDefineStateType %d \n\
222 %%       Alias string \n\
223 %%       ContainerType string \n\
224 %%       Name string \n\
225 %%EndEventDef \n\
226 %%EventDef PajeDefineEventType %d \n\
227 %%       Alias string \n\
228 %%       ContainerType string \n\
229 %%       Name string \n\
230 %%       Color color \n\
231 %%EndEventDef \n\
232 %%EventDef PajeDefineLinkType %d \n\
233 %%       Alias string \n\
234 %%       ContainerType string \n\
235 %%       SourceContainerType string \n\
236 %%       DestContainerType string \n\
237 %%       Name string \n\
238 %%EndEventDef \n\
239 %%EventDef PajeDefineEntityValue %d \n\
240 %%       Alias string \n\
241 %%       EntityType string \n\
242 %%       Name string \n\
243 %%       Color color \n\
244 %%EndEventDef \n\
245 %%EventDef PajeCreateContainer %d \n\
246 %%       Time date \n\
247 %%       Alias string \n\
248 %%       Type string \n\
249 %%       Container string \n\
250 %%       Name string \n\
251 %%EndEventDef \n\
252 %%EventDef PajeDestroyContainer %d \n\
253 %%       Time date \n\
254 %%       Type string \n\
255 %%       Name string \n\
256 %%EndEventDef \n\
257 %%EventDef PajeSetVariable %d \n\
258 %%       Time date \n\
259 %%       Type string \n\
260 %%       Container string \n\
261 %%       Value double \n\
262 %%EndEventDef\n\
263 %%EventDef PajeAddVariable %d \n\
264 %%       Time date \n\
265 %%       Type string \n\
266 %%       Container string \n\
267 %%       Value double \n\
268 %%EndEventDef\n\
269 %%EventDef PajeSubVariable %d \n\
270 %%       Time date \n\
271 %%       Type string \n\
272 %%       Container string \n\
273 %%       Value double \n\
274 %%EndEventDef\n\
275 %%EventDef PajeSetState %d \n\
276 %%       Time date \n\
277 %%       Type string \n\
278 %%       Container string \n\
279 %%       Value string \n\
280 %%EndEventDef\n\
281 %%EventDef PajePushState %d \n\
282 %%       Time date \n\
283 %%       Type string \n\
284 %%       Container string \n\
285 %%       Value string \n\
286 %%EndEventDef\n\
287 %%EventDef PajePopState %d \n\
288 %%       Time date \n\
289 %%       Type string \n\
290 %%       Container string \n\
291 %%EndEventDef\n\
292 %%EventDef PajeStartLink %d \n\
293 %%       Time date \n\
294 %%       Type string \n\
295 %%       Container string \n\
296 %%       Value string \n\
297 %%       SourceContainer string \n\
298 %%       Key string \n\
299 %%EndEventDef\n\
300 %%EventDef PajeEndLink %d \n\
301 %%       Time date \n\
302 %%       Type string \n\
303 %%       Container string \n\
304 %%       Value string \n\
305 %%       DestContainer string \n\
306 %%       Key string \n\
307 %%EndEventDef\n\
308 %%EventDef PajeNewEvent %d \n\
309 %%       Time date \n\
310 %%       Type string \n\
311 %%       Container string \n\
312 %%       Value string \n\
313 %%EndEventDef\n",
314   PAJE_DefineContainerType,
315   PAJE_DefineVariableType,
316   PAJE_DefineStateType,
317   PAJE_DefineEventType,
318   PAJE_DefineLinkType,
319   PAJE_DefineEntityValue,
320   PAJE_CreateContainer,
321   PAJE_DestroyContainer,
322   PAJE_SetVariable,
323   PAJE_AddVariable,
324   PAJE_SubVariable,
325   PAJE_SetState,
326   PAJE_PushState,
327   PAJE_PopState,
328   PAJE_StartLink,
329   PAJE_EndLink,
330   PAJE_NewEvent);
331 }
332
333 /* internal do the instrumentation module */
334 static void insert_into_buffer (paje_event_t tbi)
335 {
336   if (TRACE_buffer() == 0){
337     tbi->print (tbi);
338     tbi->free (tbi);
339     return;
340   }
341   XBT_DEBUG("%s: insert event_type=%d, timestamp=%f, buffersize=%ld)", __FUNCTION__, tbi->event_type, tbi->timestamp, xbt_dynar_length(buffer));
342
343   unsigned int i;
344   for (i = xbt_dynar_length(buffer); i > 0; i--) {
345     paje_event_t e1 = *(paje_event_t*)xbt_dynar_get_ptr(buffer, i - 1);
346     if (e1->timestamp <= tbi->timestamp)
347       break;
348   }
349   xbt_dynar_insert_at(buffer, i, &tbi);
350   if (i == 0)
351     XBT_DEBUG("%s: inserted at beginning", __FUNCTION__);
352   else
353     XBT_DEBUG("%s: inserted at%s %d", __FUNCTION__,
354               (i == xbt_dynar_length(buffer) - 1 ? " end, pos =" : ""), i);
355 }
356
357 static void print_pajeDefineContainerType(paje_event_t event)
358 {
359   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
360   fprintf(tracing_file, "%d %s %s %s\n",
361       event->event_type,
362       ((defineContainerType_t)event->data)->type->id,
363       ((defineContainerType_t)event->data)->type->father->id,
364       ((defineContainerType_t)event->data)->type->name);
365 }
366
367 static void print_pajeDefineVariableType(paje_event_t event)
368 {
369   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
370   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
371       event->event_type,
372       ((defineVariableType_t)event->data)->type->id,
373       ((defineVariableType_t)event->data)->type->father->id,
374       ((defineVariableType_t)event->data)->type->name,
375       ((defineVariableType_t)event->data)->type->color);
376 }
377
378 static void print_pajeDefineStateType(paje_event_t event)
379 {
380   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
381   fprintf(tracing_file, "%d %s %s %s\n",
382       event->event_type,
383       ((defineStateType_t)event->data)->type->id,
384       ((defineStateType_t)event->data)->type->father->id,
385       ((defineStateType_t)event->data)->type->name);
386 }
387
388 static void print_pajeDefineEventType(paje_event_t event)
389 {
390   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
391   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
392       event->event_type,
393       ((defineEventType_t)event->data)->type->id,
394       ((defineEventType_t)event->data)->type->father->id,
395       ((defineEventType_t)event->data)->type->name,
396       ((defineEventType_t)event->data)->type->color);
397 }
398
399 static void print_pajeDefineLinkType(paje_event_t event)
400 {
401   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
402   fprintf(tracing_file, "%d %s %s %s %s %s\n",
403       event->event_type,
404       ((defineLinkType_t)event->data)->type->id,
405       ((defineLinkType_t)event->data)->type->father->id,
406       ((defineLinkType_t)event->data)->source->id,
407       ((defineLinkType_t)event->data)->dest->id,
408       ((defineLinkType_t)event->data)->type->name);
409 }
410
411 static void print_pajeDefineEntityValue (paje_event_t event)
412 {
413   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
414   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
415       event->event_type,
416       ((defineEntityValue_t)event->data)->value->id,
417       ((defineEntityValue_t)event->data)->value->father->id,
418       ((defineEntityValue_t)event->data)->value->name,
419       ((defineEntityValue_t)event->data)->value->color);
420 }
421
422 static void print_pajeCreateContainer(paje_event_t event)
423 {
424   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
425   if (event->timestamp == 0){
426     fprintf(tracing_file, "%d 0 %s %s %s \"%s\"\n",
427         event->event_type,
428         ((createContainer_t)event->data)->container->id,
429         ((createContainer_t)event->data)->container->type->id,
430         ((createContainer_t)event->data)->container->father->id,
431         ((createContainer_t)event->data)->container->name);
432   }else{
433     fprintf(tracing_file, "%d %lf %s %s %s \"%s\"\n",
434         event->event_type,
435         event->timestamp,
436         ((createContainer_t)event->data)->container->id,
437         ((createContainer_t)event->data)->container->type->id,
438         ((createContainer_t)event->data)->container->father->id,
439         ((createContainer_t)event->data)->container->name);
440   }
441 }
442
443 static void print_pajeDestroyContainer(paje_event_t event)
444 {
445   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
446   if (event->timestamp == 0){
447     fprintf(tracing_file, "%d 0 %s %s\n",
448         event->event_type,
449         ((destroyContainer_t)event->data)->container->type->id,
450         ((destroyContainer_t)event->data)->container->id);
451   }else{
452     fprintf(tracing_file, "%d %lf %s %s\n",
453         event->event_type,
454         event->timestamp,
455         ((destroyContainer_t)event->data)->container->type->id,
456         ((destroyContainer_t)event->data)->container->id);
457   }
458 }
459
460 static void print_pajeSetVariable(paje_event_t event)
461 {
462   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
463   if (event->timestamp == 0){
464     fprintf(tracing_file, "%d 0 %s %s %f\n",
465         event->event_type,
466         ((setVariable_t)event->data)->type->id,
467         ((setVariable_t)event->data)->container->id,
468         ((setVariable_t)event->data)->value);
469   }else{
470     fprintf(tracing_file, "%d %lf %s %s %f\n",
471         event->event_type,
472         event->timestamp,
473         ((setVariable_t)event->data)->type->id,
474         ((setVariable_t)event->data)->container->id,
475         ((setVariable_t)event->data)->value);
476   }
477 }
478
479 static void print_pajeAddVariable(paje_event_t event)
480 {
481   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
482   if (event->timestamp == 0){
483     fprintf(tracing_file, "%d 0 %s %s %f\n",
484         event->event_type,
485         ((addVariable_t)event->data)->type->id,
486         ((addVariable_t)event->data)->container->id,
487         ((addVariable_t)event->data)->value);
488   }else{
489     fprintf(tracing_file, "%d %lf %s %s %f\n",
490         event->event_type,
491         event->timestamp,
492         ((addVariable_t)event->data)->type->id,
493         ((addVariable_t)event->data)->container->id,
494         ((addVariable_t)event->data)->value);
495   }
496 }
497
498 static void print_pajeSubVariable(paje_event_t event)
499 {
500   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
501   if (event->timestamp == 0){
502     fprintf(tracing_file, "%d 0 %s %s %f\n",
503         event->event_type,
504         ((subVariable_t)event->data)->type->id,
505         ((subVariable_t)event->data)->container->id,
506         ((subVariable_t)event->data)->value);
507   }else{
508     fprintf(tracing_file, "%d %lf %s %s %f\n",
509         event->event_type,
510         event->timestamp,
511         ((subVariable_t)event->data)->type->id,
512         ((subVariable_t)event->data)->container->id,
513         ((subVariable_t)event->data)->value);
514   }
515 }
516
517 static void print_pajeSetState(paje_event_t event)
518 {
519   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
520   if (event->timestamp == 0){
521     fprintf(tracing_file, "%d 0 %s %s %s\n",
522         event->event_type,
523         ((setState_t)event->data)->type->id,
524         ((setState_t)event->data)->container->id,
525         ((setState_t)event->data)->value->id);
526   }else{
527     fprintf(tracing_file, "%d %lf %s %s %s\n",
528         event->event_type,
529         event->timestamp,
530         ((setState_t)event->data)->type->id,
531         ((setState_t)event->data)->container->id,
532         ((setState_t)event->data)->value->id);
533   }
534 }
535
536 static void print_pajePushState(paje_event_t event)
537 {
538   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
539   if (event->timestamp == 0){
540     fprintf(tracing_file, "%d 0 %s %s %s\n",
541         event->event_type,
542         ((pushState_t)event->data)->type->id,
543         ((pushState_t)event->data)->container->id,
544         ((pushState_t)event->data)->value->id);
545   }else{
546     fprintf(tracing_file, "%d %lf %s %s %s\n",
547         event->event_type,
548         event->timestamp,
549         ((pushState_t)event->data)->type->id,
550         ((pushState_t)event->data)->container->id,
551         ((pushState_t)event->data)->value->id);
552   }
553 }
554
555 static void print_pajePopState(paje_event_t event)
556 {
557   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
558   if (event->timestamp == 0){
559     fprintf(tracing_file, "%d 0 %s %s\n",
560         event->event_type,
561         ((popState_t)event->data)->type->id,
562         ((popState_t)event->data)->container->id);
563   }else{
564     fprintf(tracing_file, "%d %lf %s %s\n",
565         event->event_type,
566         event->timestamp,
567         ((popState_t)event->data)->type->id,
568         ((popState_t)event->data)->container->id);
569   }
570 }
571
572 static void print_pajeStartLink(paje_event_t event)
573 {
574   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
575   if (event->timestamp == 0){
576     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
577         event->event_type,
578         ((startLink_t)event->data)->type->id,
579         ((startLink_t)event->data)->container->id,
580         ((startLink_t)event->data)->value,
581         ((startLink_t)event->data)->sourceContainer->id,
582         ((startLink_t)event->data)->key);
583   }else {
584     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
585         event->event_type,
586         event->timestamp,
587         ((startLink_t)event->data)->type->id,
588         ((startLink_t)event->data)->container->id,
589         ((startLink_t)event->data)->value,
590         ((startLink_t)event->data)->sourceContainer->id,
591         ((startLink_t)event->data)->key);
592   }
593 }
594
595 static void print_pajeEndLink(paje_event_t event)
596 {
597   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
598   if (event->timestamp == 0){
599     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
600         event->event_type,
601         ((endLink_t)event->data)->type->id,
602         ((endLink_t)event->data)->container->id,
603         ((endLink_t)event->data)->value,
604         ((endLink_t)event->data)->destContainer->id,
605         ((endLink_t)event->data)->key);
606   }else {
607     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
608         event->event_type,
609         event->timestamp,
610         ((endLink_t)event->data)->type->id,
611         ((endLink_t)event->data)->container->id,
612         ((endLink_t)event->data)->value,
613         ((endLink_t)event->data)->destContainer->id,
614         ((endLink_t)event->data)->key);
615   }
616 }
617
618 static void print_pajeNewEvent (paje_event_t event)
619 {
620   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
621   if (event->timestamp == 0){
622     fprintf(tracing_file, "%d 0 %s %s %s\n",
623         event->event_type,
624         ((newEvent_t)event->data)->type->id,
625         ((newEvent_t)event->data)->container->id,
626         ((newEvent_t)event->data)->value->id);
627   }else{
628     fprintf(tracing_file, "%d %lf %s %s %s\n",
629         event->event_type,
630         event->timestamp,
631         ((newEvent_t)event->data)->type->id,
632         ((newEvent_t)event->data)->container->id,
633         ((newEvent_t)event->data)->value->id);
634   }
635 }
636
637 static void free_paje_event (paje_event_t event)
638 {
639   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
640   switch (event->event_type){
641   case PAJE_StartLink:
642     xbt_free (((startLink_t)(event->data))->value);
643     xbt_free (((startLink_t)(event->data))->key);
644     break;
645   case PAJE_EndLink:
646     xbt_free (((endLink_t)(event->data))->value);
647     xbt_free (((endLink_t)(event->data))->key);
648     break;
649   }
650   xbt_free (event->data);
651   xbt_free (event);
652 }
653
654 void new_pajeDefineContainerType(type_t type)
655 {
656   paje_event_t event = xbt_new0(s_paje_event_t, 1);
657   event->event_type = PAJE_DefineContainerType;
658   event->timestamp = 0;
659   event->print = print_pajeDefineContainerType;
660   event->free = free_paje_event;
661   event->data = xbt_new0(s_defineContainerType_t, 1);
662   ((defineContainerType_t)(event->data))->type = type;
663
664   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
665
666   //print it
667   event->print (event);
668   event->free (event);
669 }
670
671 void new_pajeDefineVariableType(type_t type)
672 {
673   paje_event_t event = xbt_new0(s_paje_event_t, 1);
674   event->event_type = PAJE_DefineVariableType;
675   event->timestamp = 0;
676   event->print = print_pajeDefineVariableType;
677   event->free = free_paje_event;
678   event->data = xbt_new0(s_defineVariableType_t, 1);
679   ((defineVariableType_t)(event->data))->type = type;
680
681   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
682
683   //print it
684   event->print (event);
685   event->free (event);
686 }
687
688 void new_pajeDefineStateType(type_t type)
689 {
690   paje_event_t event = xbt_new0(s_paje_event_t, 1);
691   event->event_type = PAJE_DefineStateType;
692   event->timestamp = 0;
693   event->print = print_pajeDefineStateType;
694   event->free = free_paje_event;
695   event->data = xbt_new0(s_defineStateType_t, 1);
696   ((defineStateType_t)(event->data))->type = type;
697
698   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
699
700   //print it
701   event->print (event);
702   event->free (event);
703 }
704
705 void new_pajeDefineEventType(type_t type)
706 {
707   paje_event_t event = xbt_new0(s_paje_event_t, 1);
708   event->event_type = PAJE_DefineEventType;
709   event->timestamp = 0;
710   event->print = print_pajeDefineEventType;
711   event->free = free_paje_event;
712   event->data = xbt_new0(s_defineEventType_t, 1);
713   ((defineEventType_t)(event->data))->type = type;
714
715   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
716
717   //print it
718   event->print (event);
719   event->free (event);
720 }
721
722 void new_pajeDefineLinkType(type_t type, type_t source, type_t dest)
723 {
724   paje_event_t event = xbt_new0(s_paje_event_t, 1);
725   event->event_type = PAJE_DefineLinkType;
726   event->timestamp = 0;
727   event->print = print_pajeDefineLinkType;
728   event->free = free_paje_event;
729   event->data = xbt_new0(s_defineLinkType_t, 1);
730   ((defineLinkType_t)(event->data))->type = type;
731   ((defineLinkType_t)(event->data))->source = source;
732   ((defineLinkType_t)(event->data))->dest = dest;
733
734   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
735
736   //print it
737   event->print (event);
738   event->free (event);
739 }
740
741 void new_pajeDefineEntityValue (val_t value)
742 {
743   paje_event_t event = xbt_new0(s_paje_event_t, 1);
744   event->event_type = PAJE_DefineEntityValue;
745   event->timestamp = 0;
746   event->print = print_pajeDefineEntityValue;
747   event->free = free_paje_event;
748   event->data = xbt_new0(s_defineEntityValue_t, 1);
749   ((defineEntityValue_t)(event->data))->value = value;
750
751   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, event->event_type);
752
753   //print it
754   event->print (event);
755   event->free (event);
756 }
757
758 void new_pajeCreateContainer (container_t container)
759 {
760   paje_event_t event = xbt_new0(s_paje_event_t, 1);
761   event->event_type = PAJE_CreateContainer;
762   event->timestamp = SIMIX_get_clock();
763   event->print = print_pajeCreateContainer;
764   event->free = free_paje_event;
765   event->data = xbt_new0(s_createContainer_t, 1);
766   ((createContainer_t)(event->data))->container = container;
767
768   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
769
770   //print it
771   event->print (event);
772   event->free (event);
773 }
774
775 void new_pajeDestroyContainer (container_t container)
776 {
777   paje_event_t event = xbt_new0(s_paje_event_t, 1);
778   event->event_type = PAJE_DestroyContainer;
779   event->timestamp = SIMIX_get_clock();
780   event->print = print_pajeDestroyContainer;
781   event->free = free_paje_event;
782   event->data = xbt_new0(s_destroyContainer_t, 1);
783   ((destroyContainer_t)(event->data))->container = container;
784
785   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
786
787   //print it
788   event->print (event);
789   event->free (event);
790 }
791
792 void new_pajeSetVariable (double timestamp, container_t container, type_t type, double value)
793 {
794   paje_event_t event = xbt_new0(s_paje_event_t, 1);
795   event->event_type = PAJE_SetVariable;
796   event->timestamp = timestamp;
797   event->print = print_pajeSetVariable;
798   event->free = free_paje_event;
799   event->data = xbt_new0(s_setVariable_t, 1);
800   ((setVariable_t)(event->data))->type = type;
801   ((setVariable_t)(event->data))->container = container;
802   ((setVariable_t)(event->data))->value = value;
803
804   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
805
806   insert_into_buffer (event);
807 }
808
809
810 void new_pajeAddVariable (double timestamp, container_t container, type_t type, double value)
811 {
812   paje_event_t event = xbt_new0(s_paje_event_t, 1);
813   event->event_type = PAJE_AddVariable;
814   event->timestamp = timestamp;
815   event->print = print_pajeAddVariable;
816   event->free = free_paje_event;
817   event->data = xbt_new0(s_addVariable_t, 1);
818   ((addVariable_t)(event->data))->type = type;
819   ((addVariable_t)(event->data))->container = container;
820   ((addVariable_t)(event->data))->value = value;
821
822   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
823
824   insert_into_buffer (event);
825 }
826
827 void new_pajeSubVariable (double timestamp, container_t container, type_t type, double value)
828 {
829   paje_event_t event = xbt_new0(s_paje_event_t, 1);
830   event->event_type = PAJE_SubVariable;
831   event->timestamp = timestamp;
832   event->print = print_pajeSubVariable;
833   event->free = free_paje_event;
834   event->data = xbt_new0(s_subVariable_t, 1);
835   ((subVariable_t)(event->data))->type = type;
836   ((subVariable_t)(event->data))->container = container;
837   ((subVariable_t)(event->data))->value = value;
838
839   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
840
841   insert_into_buffer (event);
842 }
843
844 void new_pajeSetState (double timestamp, container_t container, type_t type, val_t value)
845 {
846   paje_event_t event = xbt_new0(s_paje_event_t, 1);
847   event->event_type = PAJE_SetState;
848   event->timestamp = timestamp;
849   event->print = print_pajeSetState;
850   event->free = free_paje_event;
851   event->data = xbt_new0(s_setState_t, 1);
852   ((setState_t)(event->data))->type = type;
853   ((setState_t)(event->data))->container = container;
854   ((setState_t)(event->data))->value = value;
855
856   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
857
858   insert_into_buffer (event);
859 }
860
861
862 void new_pajePushState (double timestamp, container_t container, type_t type, val_t value)
863 {
864   paje_event_t event = xbt_new0(s_paje_event_t, 1);
865   event->event_type = PAJE_PushState;
866   event->timestamp = timestamp;
867   event->print = print_pajePushState;
868   event->free = free_paje_event;
869   event->data = xbt_new0(s_pushState_t, 1);
870   ((pushState_t)(event->data))->type = type;
871   ((pushState_t)(event->data))->container = container;
872   ((pushState_t)(event->data))->value = value;
873
874   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
875
876   insert_into_buffer (event);
877 }
878
879
880 void new_pajePopState (double timestamp, container_t container, type_t type)
881 {
882   paje_event_t event = xbt_new0(s_paje_event_t, 1);
883   event->event_type = PAJE_PopState;
884   event->timestamp = timestamp;
885   event->print = print_pajePopState;
886   event->free = free_paje_event;
887   event->data = xbt_new0(s_popState_t, 1);
888   ((popState_t)(event->data))->type = type;
889   ((popState_t)(event->data))->container = container;
890
891   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
892
893   insert_into_buffer (event);
894 }
895
896 void new_pajeStartLink (double timestamp, container_t container, type_t type, container_t sourceContainer, const char *value, const char *key)
897 {
898   paje_event_t event = xbt_new0(s_paje_event_t, 1);
899   event->event_type = PAJE_StartLink;
900   event->timestamp = timestamp;
901   event->print = print_pajeStartLink;
902   event->free = free_paje_event;
903   event->data = xbt_new0(s_startLink_t, 1);
904   ((startLink_t)(event->data))->type = type;
905   ((startLink_t)(event->data))->container = container;
906   ((startLink_t)(event->data))->sourceContainer = sourceContainer;
907   ((startLink_t)(event->data))->value = xbt_strdup(value);
908   ((startLink_t)(event->data))->key = xbt_strdup(key);
909
910   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
911
912   insert_into_buffer (event);
913 }
914
915 void new_pajeEndLink (double timestamp, container_t container, type_t type, container_t destContainer, const char *value, const char *key)
916 {
917   paje_event_t event = xbt_new0(s_paje_event_t, 1);
918   event->event_type = PAJE_EndLink;
919   event->timestamp = timestamp;
920   event->print = print_pajeEndLink;
921   event->free = free_paje_event;
922   event->data = xbt_new0(s_endLink_t, 1);
923   ((endLink_t)(event->data))->type = type;
924   ((endLink_t)(event->data))->container = container;
925   ((endLink_t)(event->data))->destContainer = destContainer;
926   ((endLink_t)(event->data))->value = xbt_strdup(value);
927   ((endLink_t)(event->data))->key = xbt_strdup(key);
928
929   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
930
931   insert_into_buffer (event);
932 }
933
934 void new_pajeNewEvent (double timestamp, container_t container, type_t type, val_t value)
935 {
936   paje_event_t event = xbt_new0(s_paje_event_t, 1);
937   event->event_type = PAJE_NewEvent;
938   event->timestamp = timestamp;
939   event->print = print_pajeNewEvent;
940   event->free = free_paje_event;
941   event->data = xbt_new0(s_newEvent_t, 1);
942   ((newEvent_t)(event->data))->type = type;
943   ((newEvent_t)(event->data))->container = container;
944   ((newEvent_t)(event->data))->value = value;
945
946   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
947
948   insert_into_buffer (event);
949 }
950
951 #endif /* HAVE_TRACING */