Logo AND Algorithmique Numérique Distribuée

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