Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
update
[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     while (!xbt_dynar_is_empty(buffer)){
228       double head_timestamp = (*(paje_event_t*)xbt_dynar_get_ptr(buffer, 0))->timestamp;
229       if (head_timestamp > TRACE_last_timestamp_to_dump){
230         break;
231       }
232       xbt_dynar_remove_at (buffer, 0, &event);
233       event->print (event);
234       event->free (event);
235     }
236   }
237   XBT_DEBUG("%s: ends", __FUNCTION__);
238 }
239
240 /* internal do the instrumentation module */
241 static void insert_into_buffer (paje_event_t tbi)
242 {
243   if (TRACE_buffer() == 0){
244     tbi->print (tbi);
245     tbi->free (tbi);
246     return;
247   }
248   XBT_DEBUG("%s: insert event_type=%d, timestamp=%f, buffersize=%lu)",
249       __FUNCTION__, (int)tbi->event_type, tbi->timestamp, xbt_dynar_length(buffer));
250
251   unsigned int i;
252   for (i = xbt_dynar_length(buffer); i > 0; i--) {
253     paje_event_t e1 = *(paje_event_t*)xbt_dynar_get_ptr(buffer, i - 1);
254     if (e1->timestamp <= tbi->timestamp)
255       break;
256   }
257   xbt_dynar_insert_at(buffer, i, &tbi);
258   if (i == 0)
259     XBT_DEBUG("%s: inserted at beginning", __FUNCTION__);
260   else
261     XBT_DEBUG("%s: inserted at%s %u", __FUNCTION__,
262               (i == xbt_dynar_length(buffer) - 1 ? " end, pos =" : ""), i);
263 }
264
265 static void print_pajeDefineContainerType(paje_event_t event)
266 {
267   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
268   fprintf(tracing_file, "%d %s %s %s\n",
269       (int)event->event_type,
270       ((defineContainerType_t)event->data)->type->id,
271       ((defineContainerType_t)event->data)->type->father->id,
272       ((defineContainerType_t)event->data)->type->name);
273 }
274
275 static void print_pajeDefineVariableType(paje_event_t event)
276 {
277   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
278   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
279       (int)event->event_type,
280       ((defineVariableType_t)event->data)->type->id,
281       ((defineVariableType_t)event->data)->type->father->id,
282       ((defineVariableType_t)event->data)->type->name,
283       ((defineVariableType_t)event->data)->type->color);
284 }
285
286 static void print_pajeDefineStateType(paje_event_t event)
287 {
288   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
289   fprintf(tracing_file, "%d %s %s %s\n",
290       (int)event->event_type,
291       ((defineStateType_t)event->data)->type->id,
292       ((defineStateType_t)event->data)->type->father->id,
293       ((defineStateType_t)event->data)->type->name);
294 }
295
296 static void print_pajeDefineEventType(paje_event_t event)
297 {
298   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
299   fprintf(tracing_file, "%d %s %s %s\n",
300       (int)event->event_type,
301       ((defineEventType_t)event->data)->type->id,
302       ((defineEventType_t)event->data)->type->father->id,
303       ((defineEventType_t)event->data)->type->name);
304 }
305
306 static void print_pajeDefineLinkType(paje_event_t event)
307 {
308   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
309   fprintf(tracing_file, "%d %s %s %s %s %s\n",
310       (int)event->event_type,
311       ((defineLinkType_t)event->data)->type->id,
312       ((defineLinkType_t)event->data)->type->father->id,
313       ((defineLinkType_t)event->data)->source->id,
314       ((defineLinkType_t)event->data)->dest->id,
315       ((defineLinkType_t)event->data)->type->name);
316 }
317
318 static void print_pajeDefineEntityValue (paje_event_t event)
319 {
320   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
321   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
322       (int)event->event_type,
323       ((defineEntityValue_t)event->data)->value->id,
324       ((defineEntityValue_t)event->data)->value->father->id,
325       ((defineEntityValue_t)event->data)->value->name,
326       ((defineEntityValue_t)event->data)->value->color);
327 }
328
329 static void print_pajeCreateContainer(paje_event_t event)
330 {
331   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
332   if (event->timestamp == 0){
333     fprintf(tracing_file, "%d 0 %s %s %s \"%s\"\n",
334         (int)event->event_type,
335         ((createContainer_t)event->data)->container->id,
336         ((createContainer_t)event->data)->container->type->id,
337         ((createContainer_t)event->data)->container->father->id,
338         ((createContainer_t)event->data)->container->name);
339   }else{
340     fprintf(tracing_file, "%d %lf %s %s %s \"%s\"\n",
341         (int)event->event_type,
342         event->timestamp,
343         ((createContainer_t)event->data)->container->id,
344         ((createContainer_t)event->data)->container->type->id,
345         ((createContainer_t)event->data)->container->father->id,
346         ((createContainer_t)event->data)->container->name);
347   }
348 }
349
350 static void print_pajeDestroyContainer(paje_event_t event)
351 {
352   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
353   if (event->timestamp == 0){
354     fprintf(tracing_file, "%d 0 %s %s\n",
355         (int)event->event_type,
356         ((destroyContainer_t)event->data)->container->type->id,
357         ((destroyContainer_t)event->data)->container->id);
358   }else{
359     fprintf(tracing_file, "%d %lf %s %s\n",
360         (int)event->event_type,
361         event->timestamp,
362         ((destroyContainer_t)event->data)->container->type->id,
363         ((destroyContainer_t)event->data)->container->id);
364   }
365 }
366
367 static void print_pajeSetVariable(paje_event_t event)
368 {
369   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
370   if (event->timestamp == 0){
371     fprintf(tracing_file, "%d 0 %s %s %f\n",
372         (int)event->event_type,
373         ((setVariable_t)event->data)->type->id,
374         ((setVariable_t)event->data)->container->id,
375         ((setVariable_t)event->data)->value);
376   }else{
377     fprintf(tracing_file, "%d %lf %s %s %f\n",
378         (int)event->event_type,
379         event->timestamp,
380         ((setVariable_t)event->data)->type->id,
381         ((setVariable_t)event->data)->container->id,
382         ((setVariable_t)event->data)->value);
383   }
384 }
385
386 static void print_pajeAddVariable(paje_event_t event)
387 {
388   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
389   if (event->timestamp == 0){
390     fprintf(tracing_file, "%d 0 %s %s %f\n",
391         (int)event->event_type,
392         ((addVariable_t)event->data)->type->id,
393         ((addVariable_t)event->data)->container->id,
394         ((addVariable_t)event->data)->value);
395   }else{
396     fprintf(tracing_file, "%d %lf %s %s %f\n",
397         (int)event->event_type,
398         event->timestamp,
399         ((addVariable_t)event->data)->type->id,
400         ((addVariable_t)event->data)->container->id,
401         ((addVariable_t)event->data)->value);
402   }
403 }
404
405 static void print_pajeSubVariable(paje_event_t event)
406 {
407   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
408   if (event->timestamp == 0){
409     fprintf(tracing_file, "%d 0 %s %s %f\n",
410         (int)event->event_type,
411         ((subVariable_t)event->data)->type->id,
412         ((subVariable_t)event->data)->container->id,
413         ((subVariable_t)event->data)->value);
414   }else{
415     fprintf(tracing_file, "%d %lf %s %s %f\n",
416         (int)event->event_type,
417         event->timestamp,
418         ((subVariable_t)event->data)->type->id,
419         ((subVariable_t)event->data)->container->id,
420         ((subVariable_t)event->data)->value);
421   }
422 }
423
424 static void print_pajeSetState(paje_event_t event)
425 {
426   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
427   if (event->timestamp == 0){
428     fprintf(tracing_file, "%d 0 %s %s %s\n",
429         (int)event->event_type,
430         ((setState_t)event->data)->type->id,
431         ((setState_t)event->data)->container->id,
432         ((setState_t)event->data)->value->id);
433   }else{
434     fprintf(tracing_file, "%d %lf %s %s %s\n",
435         (int)event->event_type,
436         event->timestamp,
437         ((setState_t)event->data)->type->id,
438         ((setState_t)event->data)->container->id,
439         ((setState_t)event->data)->value->id);
440   }
441 }
442
443 static void print_pajePushState(paje_event_t event)
444 {
445   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
446   if (event->timestamp == 0){
447     fprintf(tracing_file, "%d 0 %s %s %s\n",
448         (int)event->event_type,
449         ((pushState_t)event->data)->type->id,
450         ((pushState_t)event->data)->container->id,
451         ((pushState_t)event->data)->value->id);
452   }else{
453     fprintf(tracing_file, "%d %lf %s %s %s\n",
454         (int)event->event_type,
455         event->timestamp,
456         ((pushState_t)event->data)->type->id,
457         ((pushState_t)event->data)->container->id,
458         ((pushState_t)event->data)->value->id);
459   }
460 }
461
462 static void print_pajePopState(paje_event_t event)
463 {
464   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
465   if (event->timestamp == 0){
466     fprintf(tracing_file, "%d 0 %s %s\n",
467         (int)event->event_type,
468         ((popState_t)event->data)->type->id,
469         ((popState_t)event->data)->container->id);
470   }else{
471     fprintf(tracing_file, "%d %lf %s %s\n",
472         (int)event->event_type,
473         event->timestamp,
474         ((popState_t)event->data)->type->id,
475         ((popState_t)event->data)->container->id);
476   }
477 }
478
479 static void print_pajeResetState(paje_event_t event)
480 {
481   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
482   if (event->timestamp == 0){
483     fprintf(tracing_file, "%d 0 %s %s\n",
484         (int)event->event_type,
485         ((resetState_t)event->data)->type->id,
486         ((resetState_t)event->data)->container->id);
487   }else{
488     fprintf(tracing_file, "%d %lf %s %s\n",
489         (int)event->event_type,
490         event->timestamp,
491         ((resetState_t)event->data)->type->id,
492         ((resetState_t)event->data)->container->id);
493   }
494 }
495
496 static void print_pajeStartLink(paje_event_t event)
497 {
498   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
499   if (event->timestamp == 0){
500     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
501         (int)event->event_type,
502         ((startLink_t)event->data)->type->id,
503         ((startLink_t)event->data)->container->id,
504         ((startLink_t)event->data)->value,
505         ((startLink_t)event->data)->sourceContainer->id,
506         ((startLink_t)event->data)->key);
507   }else {
508     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
509         (int)event->event_type,
510         event->timestamp,
511         ((startLink_t)event->data)->type->id,
512         ((startLink_t)event->data)->container->id,
513         ((startLink_t)event->data)->value,
514         ((startLink_t)event->data)->sourceContainer->id,
515         ((startLink_t)event->data)->key);
516   }
517 }
518
519 static void print_pajeEndLink(paje_event_t event)
520 {
521   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
522   if (event->timestamp == 0){
523     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
524         (int)event->event_type,
525         ((endLink_t)event->data)->type->id,
526         ((endLink_t)event->data)->container->id,
527         ((endLink_t)event->data)->value,
528         ((endLink_t)event->data)->destContainer->id,
529         ((endLink_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         ((endLink_t)event->data)->type->id,
535         ((endLink_t)event->data)->container->id,
536         ((endLink_t)event->data)->value,
537         ((endLink_t)event->data)->destContainer->id,
538         ((endLink_t)event->data)->key);
539   }
540 }
541
542 static void print_pajeNewEvent (paje_event_t event)
543 {
544   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
545   if (event->timestamp == 0){
546     fprintf(tracing_file, "%d 0 %s %s %s\n",
547         (int)event->event_type,
548         ((newEvent_t)event->data)->type->id,
549         ((newEvent_t)event->data)->container->id,
550         ((newEvent_t)event->data)->value->id);
551   }else{
552     fprintf(tracing_file, "%d %lf %s %s %s\n",
553         (int)event->event_type,
554         event->timestamp,
555         ((newEvent_t)event->data)->type->id,
556         ((newEvent_t)event->data)->container->id,
557         ((newEvent_t)event->data)->value->id);
558   }
559 }
560
561 static void free_paje_event (paje_event_t event)
562 {
563   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
564   switch (event->event_type){
565   case PAJE_StartLink:
566     xbt_free (((startLink_t)(event->data))->value);
567     xbt_free (((startLink_t)(event->data))->key);
568     break;
569   case PAJE_EndLink:
570     xbt_free (((endLink_t)(event->data))->value);
571     xbt_free (((endLink_t)(event->data))->key);
572     break;
573   default:
574     break;
575   }
576   xbt_free (event->data);
577   xbt_free (event);
578 }
579
580 void new_pajeDefineContainerType(type_t type)
581 {
582   paje_event_t event = xbt_new0(s_paje_event_t, 1);
583   event->event_type = PAJE_DefineContainerType;
584   event->timestamp = 0;
585   event->print = print_pajeDefineContainerType;
586   event->free = free_paje_event;
587   event->data = xbt_new0(s_defineContainerType_t, 1);
588   ((defineContainerType_t)(event->data))->type = type;
589
590   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
591
592   //print it
593   event->print (event);
594   event->free (event);
595 }
596
597 void new_pajeDefineVariableType(type_t type)
598 {
599   paje_event_t event = xbt_new0(s_paje_event_t, 1);
600   event->event_type = PAJE_DefineVariableType;
601   event->timestamp = 0;
602   event->print = print_pajeDefineVariableType;
603   event->free = free_paje_event;
604   event->data = xbt_new0(s_defineVariableType_t, 1);
605   ((defineVariableType_t)(event->data))->type = type;
606
607   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
608
609   //print it
610   event->print (event);
611   event->free (event);
612 }
613
614 void new_pajeDefineStateType(type_t type)
615 {
616   paje_event_t event = xbt_new0(s_paje_event_t, 1);
617   event->event_type = PAJE_DefineStateType;
618   event->timestamp = 0;
619   event->print = print_pajeDefineStateType;
620   event->free = free_paje_event;
621   event->data = xbt_new0(s_defineStateType_t, 1);
622   ((defineStateType_t)(event->data))->type = type;
623
624   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
625
626   //print it
627   event->print (event);
628   event->free (event);
629 }
630
631 void new_pajeDefineEventType(type_t type)
632 {
633   paje_event_t event = xbt_new0(s_paje_event_t, 1);
634   event->event_type = PAJE_DefineEventType;
635   event->timestamp = 0;
636   event->print = print_pajeDefineEventType;
637   event->free = free_paje_event;
638   event->data = xbt_new0(s_defineEventType_t, 1);
639   ((defineEventType_t)(event->data))->type = type;
640
641   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
642
643   //print it
644   event->print (event);
645   event->free (event);
646 }
647
648 void new_pajeDefineLinkType(type_t type, type_t source, type_t dest)
649 {
650   paje_event_t event = xbt_new0(s_paje_event_t, 1);
651   event->event_type = PAJE_DefineLinkType;
652   event->timestamp = 0;
653   event->print = print_pajeDefineLinkType;
654   event->free = free_paje_event;
655   event->data = xbt_new0(s_defineLinkType_t, 1);
656   ((defineLinkType_t)(event->data))->type = type;
657   ((defineLinkType_t)(event->data))->source = source;
658   ((defineLinkType_t)(event->data))->dest = dest;
659
660   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
661
662   //print it
663   event->print (event);
664   event->free (event);
665 }
666
667 void new_pajeDefineEntityValue (val_t value)
668 {
669   paje_event_t event = xbt_new0(s_paje_event_t, 1);
670   event->event_type = PAJE_DefineEntityValue;
671   event->timestamp = 0;
672   event->print = print_pajeDefineEntityValue;
673   event->free = free_paje_event;
674   event->data = xbt_new0(s_defineEntityValue_t, 1);
675   ((defineEntityValue_t)(event->data))->value = value;
676
677   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
678
679   //print it
680   event->print (event);
681   event->free (event);
682 }
683
684 void new_pajeCreateContainer (container_t container)
685 {
686   paje_event_t event = xbt_new0(s_paje_event_t, 1);
687   event->event_type = PAJE_CreateContainer;
688   event->timestamp = SIMIX_get_clock();
689   event->print = print_pajeCreateContainer;
690   event->free = free_paje_event;
691   event->data = xbt_new0(s_createContainer_t, 1);
692   ((createContainer_t)(event->data))->container = container;
693
694   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
695
696   //print it
697   event->print (event);
698   event->free (event);
699 }
700
701 void new_pajeDestroyContainer (container_t container)
702 {
703   paje_event_t event = xbt_new0(s_paje_event_t, 1);
704   event->event_type = PAJE_DestroyContainer;
705   event->timestamp = SIMIX_get_clock();
706   event->print = print_pajeDestroyContainer;
707   event->free = free_paje_event;
708   event->data = xbt_new0(s_destroyContainer_t, 1);
709   ((destroyContainer_t)(event->data))->container = container;
710
711   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
712
713   //print it
714   event->print (event);
715   event->free (event);
716 }
717
718 void new_pajeSetVariable (double timestamp, container_t container, type_t type, double value)
719 {
720   paje_event_t event = xbt_new0(s_paje_event_t, 1);
721   event->event_type = PAJE_SetVariable;
722   event->timestamp = timestamp;
723   event->print = print_pajeSetVariable;
724   event->free = free_paje_event;
725   event->data = xbt_new0(s_setVariable_t, 1);
726   ((setVariable_t)(event->data))->type = type;
727   ((setVariable_t)(event->data))->container = container;
728   ((setVariable_t)(event->data))->value = value;
729
730   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
731
732   insert_into_buffer (event);
733 }
734
735
736 void new_pajeAddVariable (double timestamp, container_t container, type_t type, double value)
737 {
738   paje_event_t event = xbt_new0(s_paje_event_t, 1);
739   event->event_type = PAJE_AddVariable;
740   event->timestamp = timestamp;
741   event->print = print_pajeAddVariable;
742   event->free = free_paje_event;
743   event->data = xbt_new0(s_addVariable_t, 1);
744   ((addVariable_t)(event->data))->type = type;
745   ((addVariable_t)(event->data))->container = container;
746   ((addVariable_t)(event->data))->value = value;
747
748   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
749
750   insert_into_buffer (event);
751 }
752
753 void new_pajeSubVariable (double timestamp, container_t container, type_t type, double value)
754 {
755   paje_event_t event = xbt_new0(s_paje_event_t, 1);
756   event->event_type = PAJE_SubVariable;
757   event->timestamp = timestamp;
758   event->print = print_pajeSubVariable;
759   event->free = free_paje_event;
760   event->data = xbt_new0(s_subVariable_t, 1);
761   ((subVariable_t)(event->data))->type = type;
762   ((subVariable_t)(event->data))->container = container;
763   ((subVariable_t)(event->data))->value = value;
764
765   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
766
767   insert_into_buffer (event);
768 }
769
770 void new_pajeSetState (double timestamp, container_t container, type_t type, val_t value)
771 {
772   paje_event_t event = xbt_new0(s_paje_event_t, 1);
773   event->event_type = PAJE_SetState;
774   event->timestamp = timestamp;
775   event->print = print_pajeSetState;
776   event->free = free_paje_event;
777   event->data = xbt_new0(s_setState_t, 1);
778   ((setState_t)(event->data))->type = type;
779   ((setState_t)(event->data))->container = container;
780   ((setState_t)(event->data))->value = value;
781
782   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
783
784   insert_into_buffer (event);
785 }
786
787
788 void new_pajePushState (double timestamp, container_t container, type_t type, val_t value)
789 {
790   paje_event_t event = xbt_new0(s_paje_event_t, 1);
791   event->event_type = PAJE_PushState;
792   event->timestamp = timestamp;
793   event->print = print_pajePushState;
794   event->free = free_paje_event;
795   event->data = xbt_new0(s_pushState_t, 1);
796   ((pushState_t)(event->data))->type = type;
797   ((pushState_t)(event->data))->container = container;
798   ((pushState_t)(event->data))->value = value;
799
800   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
801
802   insert_into_buffer (event);
803 }
804
805
806 void new_pajePopState (double timestamp, container_t container, type_t type)
807 {
808   paje_event_t event = xbt_new0(s_paje_event_t, 1);
809   event->event_type = PAJE_PopState;
810   event->timestamp = timestamp;
811   event->print = print_pajePopState;
812   event->free = free_paje_event;
813   event->data = xbt_new0(s_popState_t, 1);
814   ((popState_t)(event->data))->type = type;
815   ((popState_t)(event->data))->container = container;
816
817   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
818
819   insert_into_buffer (event);
820 }
821
822
823 void new_pajeResetState (double timestamp, container_t container, type_t type)
824 {
825   paje_event_t event = xbt_new0(s_paje_event_t, 1);
826   event->event_type = PAJE_ResetState;
827   event->timestamp = timestamp;
828   event->print = print_pajeResetState;
829   event->free = free_paje_event;
830   event->data = xbt_new0(s_resetState_t, 1);
831   ((resetState_t)(event->data))->type = type;
832   ((resetState_t)(event->data))->container = container;
833
834   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
835
836   insert_into_buffer (event);
837 }
838
839 void new_pajeStartLink (double timestamp, container_t container, type_t type, container_t sourceContainer, const char *value, const char *key)
840 {
841   paje_event_t event = xbt_new0(s_paje_event_t, 1);
842   event->event_type = PAJE_StartLink;
843   event->timestamp = timestamp;
844   event->print = print_pajeStartLink;
845   event->free = free_paje_event;
846   event->data = xbt_new0(s_startLink_t, 1);
847   ((startLink_t)(event->data))->type = type;
848   ((startLink_t)(event->data))->container = container;
849   ((startLink_t)(event->data))->sourceContainer = sourceContainer;
850   ((startLink_t)(event->data))->value = xbt_strdup(value);
851   ((startLink_t)(event->data))->key = xbt_strdup(key);
852
853   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
854
855   insert_into_buffer (event);
856 }
857
858 void new_pajeEndLink (double timestamp, container_t container, type_t type, container_t destContainer, const char *value, const char *key)
859 {
860   paje_event_t event = xbt_new0(s_paje_event_t, 1);
861   event->event_type = PAJE_EndLink;
862   event->timestamp = timestamp;
863   event->print = print_pajeEndLink;
864   event->free = free_paje_event;
865   event->data = xbt_new0(s_endLink_t, 1);
866   ((endLink_t)(event->data))->type = type;
867   ((endLink_t)(event->data))->container = container;
868   ((endLink_t)(event->data))->destContainer = destContainer;
869   ((endLink_t)(event->data))->value = xbt_strdup(value);
870   ((endLink_t)(event->data))->key = xbt_strdup(key);
871
872   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
873
874   insert_into_buffer (event);
875 }
876
877 void new_pajeNewEvent (double timestamp, container_t container, type_t type, val_t value)
878 {
879   paje_event_t event = xbt_new0(s_paje_event_t, 1);
880   event->event_type = PAJE_NewEvent;
881   event->timestamp = timestamp;
882   event->print = print_pajeNewEvent;
883   event->free = free_paje_event;
884   event->data = xbt_new0(s_newEvent_t, 1);
885   ((newEvent_t)(event->data))->type = type;
886   ((newEvent_t)(event->data))->container = container;
887   ((newEvent_t)(event->data))->value = value;
888
889   XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
890
891   insert_into_buffer (event);
892 }
893
894 #endif /* HAVE_TRACING */