Logo AND Algorithmique Numérique Distribuée

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