Logo AND Algorithmique Numérique Distribuée

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