Logo AND Algorithmique Numérique Distribuée

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