Logo AND Algorithmique Numérique Distribuée

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