Logo AND Algorithmique Numérique Distribuée

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