Logo AND Algorithmique Numérique Distribuée

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