Logo AND Algorithmique Numérique Distribuée

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