Logo AND Algorithmique Numérique Distribuée

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