Logo AND Algorithmique Numérique Distribuée

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