Logo AND Algorithmique Numérique Distribuée

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