Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
- Add SIMIX_context_get_thread_id to the context factory interface.
[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   unsigned long len = xbt_dynar_length(buffer);
325   if (len == 0){
326     xbt_dynar_push (buffer, &tbi);
327     DEBUG1("%s: inserted at beginning", __FUNCTION__);
328   }else{
329     //check if last event has the same timestamp that tbi event
330     paje_event_t e2 = *(paje_event_t*)xbt_dynar_get_ptr (buffer, len-1);
331     if (e2->timestamp == tbi->timestamp){
332       //insert at the end
333       DEBUG2("%s: inserted at end, pos = %ld", __FUNCTION__, len);
334       xbt_dynar_insert_at (buffer, len, &tbi);
335       return;
336     }
337     int inserted = 0;
338     for (i = 0; i < len; i++){
339       paje_event_t e1 = *(paje_event_t*)xbt_dynar_get_ptr(buffer, i);
340       if (e1->timestamp > tbi->timestamp){
341         xbt_dynar_insert_at (buffer, i, &tbi);
342         DEBUG2("%s: inserted at %d", __FUNCTION__, i);
343         inserted = 1;
344         break;
345       }
346     }
347     if (!inserted){
348       xbt_dynar_push (buffer, &tbi);
349       DEBUG1("%s: inserted at end", __FUNCTION__);
350     }
351   }
352 }
353
354 static void print_pajeDefineContainerType(paje_event_t event)
355 {
356   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
357   fprintf(tracing_file, "%d %s %s %s\n",
358       event->event_type,
359       ((defineContainerType_t)event->data)->type->id,
360       ((defineContainerType_t)event->data)->type->father->id,
361       ((defineContainerType_t)event->data)->type->name);
362 }
363
364 static void print_pajeDefineVariableType(paje_event_t event)
365 {
366   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
367   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
368       event->event_type,
369       ((defineVariableType_t)event->data)->type->id,
370       ((defineVariableType_t)event->data)->type->father->id,
371       ((defineVariableType_t)event->data)->type->name,
372       ((defineVariableType_t)event->data)->type->color);
373 }
374
375 static void print_pajeDefineStateType(paje_event_t event)
376 {
377   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
378   fprintf(tracing_file, "%d %s %s %s\n",
379       event->event_type,
380       ((defineStateType_t)event->data)->type->id,
381       ((defineStateType_t)event->data)->type->father->id,
382       ((defineStateType_t)event->data)->type->name);
383 }
384
385 static void print_pajeDefineEventType(paje_event_t event)
386 {
387   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
388   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
389       event->event_type,
390       ((defineEventType_t)event->data)->type->id,
391       ((defineEventType_t)event->data)->type->father->id,
392       ((defineEventType_t)event->data)->type->name,
393       ((defineEventType_t)event->data)->type->color);
394 }
395
396 static void print_pajeDefineLinkType(paje_event_t event)
397 {
398   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
399   fprintf(tracing_file, "%d %s %s %s %s %s\n",
400       event->event_type,
401       ((defineLinkType_t)event->data)->type->id,
402       ((defineLinkType_t)event->data)->type->father->id,
403       ((defineLinkType_t)event->data)->source->id,
404       ((defineLinkType_t)event->data)->dest->id,
405       ((defineLinkType_t)event->data)->type->name);
406 }
407
408 static void print_pajeCreateContainer(paje_event_t event)
409 {
410   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
411   if (event->timestamp == 0){
412     fprintf(tracing_file, "%d 0 %s %s %s %s\n",
413         event->event_type,
414         ((createContainer_t)event->data)->container->id,
415         ((createContainer_t)event->data)->container->type->id,
416         ((createContainer_t)event->data)->container->father->id,
417         ((createContainer_t)event->data)->container->name);
418   }else{
419     fprintf(tracing_file, "%d %lf %s %s %s %s\n",
420         event->event_type,
421         event->timestamp,
422         ((createContainer_t)event->data)->container->id,
423         ((createContainer_t)event->data)->container->type->id,
424         ((createContainer_t)event->data)->container->father->id,
425         ((createContainer_t)event->data)->container->name);
426   }
427 }
428
429 static void print_pajeDestroyContainer(paje_event_t event)
430 {
431   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
432   if (event->timestamp == 0){
433     fprintf(tracing_file, "%d 0 %s %s\n",
434         event->event_type,
435         ((destroyContainer_t)event->data)->container->type->id,
436         ((destroyContainer_t)event->data)->container->id);
437   }else{
438     fprintf(tracing_file, "%d %lf %s %s\n",
439         event->event_type,
440         event->timestamp,
441         ((destroyContainer_t)event->data)->container->type->id,
442         ((destroyContainer_t)event->data)->container->id);
443   }
444 }
445
446 static void print_pajeSetVariable(paje_event_t event)
447 {
448   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
449   if (event->timestamp == 0){
450     fprintf(tracing_file, "%d 0 %s %s %f\n",
451         event->event_type,
452         ((setVariable_t)event->data)->type->id,
453         ((setVariable_t)event->data)->container->id,
454         ((setVariable_t)event->data)->value);
455   }else{
456     fprintf(tracing_file, "%d %lf %s %s %f\n",
457         event->event_type,
458         event->timestamp,
459         ((setVariable_t)event->data)->type->id,
460         ((setVariable_t)event->data)->container->id,
461         ((setVariable_t)event->data)->value);
462   }
463 }
464
465 static void print_pajeAddVariable(paje_event_t event)
466 {
467   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
468   if (event->timestamp == 0){
469     fprintf(tracing_file, "%d 0 %s %s %f\n",
470         event->event_type,
471         ((addVariable_t)event->data)->type->id,
472         ((addVariable_t)event->data)->container->id,
473         ((addVariable_t)event->data)->value);
474   }else{
475     fprintf(tracing_file, "%d %lf %s %s %f\n",
476         event->event_type,
477         event->timestamp,
478         ((addVariable_t)event->data)->type->id,
479         ((addVariable_t)event->data)->container->id,
480         ((addVariable_t)event->data)->value);
481   }
482 }
483
484 static void print_pajeSubVariable(paje_event_t event)
485 {
486   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
487   if (event->timestamp == 0){
488     fprintf(tracing_file, "%d 0 %s %s %f\n",
489         event->event_type,
490         ((subVariable_t)event->data)->type->id,
491         ((subVariable_t)event->data)->container->id,
492         ((subVariable_t)event->data)->value);
493   }else{
494     fprintf(tracing_file, "%d %lf %s %s %f\n",
495         event->event_type,
496         event->timestamp,
497         ((subVariable_t)event->data)->type->id,
498         ((subVariable_t)event->data)->container->id,
499         ((subVariable_t)event->data)->value);
500   }
501 }
502
503 static void print_pajeSetState(paje_event_t event)
504 {
505   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
506   if (event->timestamp == 0){
507     fprintf(tracing_file, "%d 0 %s %s %s\n",
508         event->event_type,
509         ((setState_t)event->data)->type->id,
510         ((setState_t)event->data)->container->id,
511         ((setState_t)event->data)->value);
512   }else{
513     fprintf(tracing_file, "%d %lf %s %s %s\n",
514         event->event_type,
515         event->timestamp,
516         ((setState_t)event->data)->type->id,
517         ((setState_t)event->data)->container->id,
518         ((setState_t)event->data)->value);
519   }
520 }
521
522 static void print_pajePushState(paje_event_t event)
523 {
524   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
525   if (event->timestamp == 0){
526     fprintf(tracing_file, "%d 0 %s %s %s\n",
527         event->event_type,
528         ((pushState_t)event->data)->type->id,
529         ((pushState_t)event->data)->container->id,
530         ((pushState_t)event->data)->value);
531   }else{
532     fprintf(tracing_file, "%d %lf %s %s %s\n",
533         event->event_type,
534         event->timestamp,
535         ((pushState_t)event->data)->type->id,
536         ((pushState_t)event->data)->container->id,
537         ((pushState_t)event->data)->value);
538   }
539 }
540
541 static void print_pajePopState(paje_event_t event)
542 {
543   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
544   if (event->timestamp == 0){
545     fprintf(tracing_file, "%d 0 %s %s\n",
546         event->event_type,
547         ((popState_t)event->data)->type->id,
548         ((popState_t)event->data)->container->id);
549   }else{
550     fprintf(tracing_file, "%d %lf %s %s\n",
551         event->event_type,
552         event->timestamp,
553         ((popState_t)event->data)->type->id,
554         ((popState_t)event->data)->container->id);
555   }
556 }
557
558 static void print_pajeStartLink(paje_event_t event)
559 {
560   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
561   if (event->timestamp == 0){
562     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
563         event->event_type,
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   }else {
570     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
571         event->event_type,
572         event->timestamp,
573         ((startLink_t)event->data)->type->id,
574         ((startLink_t)event->data)->container->id,
575         ((startLink_t)event->data)->value,
576         ((startLink_t)event->data)->sourceContainer->id,
577         ((startLink_t)event->data)->key);
578   }
579 }
580
581 static void print_pajeEndLink(paje_event_t event)
582 {
583   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
584   if (event->timestamp == 0){
585     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
586         event->event_type,
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   }else {
593     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
594         event->event_type,
595         event->timestamp,
596         ((endLink_t)event->data)->type->id,
597         ((endLink_t)event->data)->container->id,
598         ((endLink_t)event->data)->value,
599         ((endLink_t)event->data)->destContainer->id,
600         ((endLink_t)event->data)->key);
601   }
602 }
603
604 static void print_pajeNewEvent (paje_event_t event)
605 {
606   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
607   if (event->timestamp == 0){
608     fprintf(tracing_file, "%d 0 %s %s %s\n",
609         event->event_type,
610         ((newEvent_t)event->data)->type->id,
611         ((newEvent_t)event->data)->container->id,
612         ((newEvent_t)event->data)->value);
613   }else{
614     fprintf(tracing_file, "%d %lf %s %s %s\n",
615         event->event_type,
616         event->timestamp,
617         ((newEvent_t)event->data)->type->id,
618         ((newEvent_t)event->data)->container->id,
619         ((newEvent_t)event->data)->value);
620   }
621 }
622
623 static void free_paje_event (paje_event_t event)
624 {
625   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
626   if (event->event_type == PAJE_SetState) {
627     xbt_free (((setState_t)(event->data))->value);
628   }else if (event->event_type == PAJE_PushState) {
629     xbt_free (((pushState_t)(event->data))->value);
630   }else if (event->event_type == PAJE_NewEvent){
631     xbt_free (((newEvent_t)(event->data))->value);
632   }else if (event->event_type == PAJE_StartLink){
633     xbt_free (((startLink_t)(event->data))->value);
634     xbt_free (((startLink_t)(event->data))->key);
635   }else if (event->event_type == PAJE_EndLink){
636     xbt_free (((endLink_t)(event->data))->value);
637     xbt_free (((endLink_t)(event->data))->key);
638   }
639   xbt_free (event->data);
640   xbt_free (event);
641 }
642
643 void new_pajeDefineContainerType(type_t type)
644 {
645   paje_event_t event = xbt_new0(s_paje_event_t, 1);
646   event->event_type = PAJE_DefineContainerType;
647   event->timestamp = 0;
648   event->print = print_pajeDefineContainerType;
649   event->free = free_paje_event;
650   event->data = xbt_new0(s_defineContainerType_t, 1);
651   ((defineContainerType_t)(event->data))->type = type;
652
653   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
654
655   //print it
656   event->print (event);
657   event->free (event);
658 }
659
660 void new_pajeDefineVariableType(type_t type)
661 {
662   paje_event_t event = xbt_new0(s_paje_event_t, 1);
663   event->event_type = PAJE_DefineVariableType;
664   event->timestamp = 0;
665   event->print = print_pajeDefineVariableType;
666   event->free = free_paje_event;
667   event->data = xbt_new0(s_defineVariableType_t, 1);
668   ((defineVariableType_t)(event->data))->type = type;
669
670   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
671
672   //print it
673   event->print (event);
674   event->free (event);
675 }
676
677 void new_pajeDefineStateType(type_t type)
678 {
679   paje_event_t event = xbt_new0(s_paje_event_t, 1);
680   event->event_type = PAJE_DefineStateType;
681   event->timestamp = 0;
682   event->print = print_pajeDefineStateType;
683   event->free = free_paje_event;
684   event->data = xbt_new0(s_defineStateType_t, 1);
685   ((defineStateType_t)(event->data))->type = type;
686
687   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
688
689   //print it
690   event->print (event);
691   event->free (event);
692 }
693
694 void new_pajeDefineEventType(type_t type)
695 {
696   paje_event_t event = xbt_new0(s_paje_event_t, 1);
697   event->event_type = PAJE_DefineEventType;
698   event->timestamp = 0;
699   event->print = print_pajeDefineEventType;
700   event->free = free_paje_event;
701   event->data = xbt_new0(s_defineEventType_t, 1);
702   ((defineEventType_t)(event->data))->type = type;
703
704   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
705
706   //print it
707   event->print (event);
708   event->free (event);
709 }
710
711 void new_pajeDefineLinkType(type_t type, type_t source, type_t dest)
712 {
713   paje_event_t event = xbt_new0(s_paje_event_t, 1);
714   event->event_type = PAJE_DefineLinkType;
715   event->timestamp = 0;
716   event->print = print_pajeDefineLinkType;
717   event->free = free_paje_event;
718   event->data = xbt_new0(s_defineLinkType_t, 1);
719   ((defineLinkType_t)(event->data))->type = type;
720   ((defineLinkType_t)(event->data))->source = source;
721   ((defineLinkType_t)(event->data))->dest = dest;
722
723   DEBUG2("%s: event_type=%d", __FUNCTION__, event->event_type);
724
725   //print it
726   event->print (event);
727   event->free (event);
728 }
729
730 void new_pajeCreateContainer (container_t container)
731 {
732   paje_event_t event = xbt_new0(s_paje_event_t, 1);
733   event->event_type = PAJE_CreateContainer;
734   event->timestamp = SIMIX_get_clock();
735   event->print = print_pajeCreateContainer;
736   event->free = free_paje_event;
737   event->data = xbt_new0(s_createContainer_t, 1);
738   ((createContainer_t)(event->data))->container = container;
739
740   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
741
742   //print it
743   event->print (event);
744   event->free (event);
745 }
746
747 void new_pajeDestroyContainer (container_t container)
748 {
749   paje_event_t event = xbt_new0(s_paje_event_t, 1);
750   event->event_type = PAJE_DestroyContainer;
751   event->timestamp = SIMIX_get_clock();
752   event->print = print_pajeDestroyContainer;
753   event->free = free_paje_event;
754   event->data = xbt_new0(s_destroyContainer_t, 1);
755   ((destroyContainer_t)(event->data))->container = container;
756
757   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
758
759   //print it
760   event->print (event);
761   event->free (event);
762 }
763
764 void new_pajeSetVariable (double timestamp, container_t container, type_t type, double value)
765 {
766   paje_event_t event = xbt_new0(s_paje_event_t, 1);
767   event->event_type = PAJE_SetVariable;
768   event->timestamp = timestamp;
769   event->print = print_pajeSetVariable;
770   event->free = free_paje_event;
771   event->data = xbt_new0(s_setVariable_t, 1);
772   ((setVariable_t)(event->data))->type = type;
773   ((setVariable_t)(event->data))->container = container;
774   ((setVariable_t)(event->data))->value = value;
775
776   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
777
778   insert_into_buffer (event);
779 }
780
781
782 void new_pajeAddVariable (double timestamp, container_t container, type_t type, double value)
783 {
784   paje_event_t event = xbt_new0(s_paje_event_t, 1);
785   event->event_type = PAJE_AddVariable;
786   event->timestamp = timestamp;
787   event->print = print_pajeAddVariable;
788   event->free = free_paje_event;
789   event->data = xbt_new0(s_addVariable_t, 1);
790   ((addVariable_t)(event->data))->type = type;
791   ((addVariable_t)(event->data))->container = container;
792   ((addVariable_t)(event->data))->value = value;
793
794   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
795
796   insert_into_buffer (event);
797 }
798
799 void new_pajeSubVariable (double timestamp, container_t container, type_t type, double value)
800 {
801   paje_event_t event = xbt_new0(s_paje_event_t, 1);
802   event->event_type = PAJE_SubVariable;
803   event->timestamp = timestamp;
804   event->print = print_pajeSubVariable;
805   event->free = free_paje_event;
806   event->data = xbt_new0(s_subVariable_t, 1);
807   ((subVariable_t)(event->data))->type = type;
808   ((subVariable_t)(event->data))->container = container;
809   ((subVariable_t)(event->data))->value = value;
810
811   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
812
813   insert_into_buffer (event);
814 }
815
816 void new_pajeSetState (double timestamp, container_t container, type_t type, const char *value)
817 {
818   paje_event_t event = xbt_new0(s_paje_event_t, 1);
819   event->event_type = PAJE_SetState;
820   event->timestamp = timestamp;
821   event->print = print_pajeSetState;
822   event->free = free_paje_event;
823   event->data = xbt_new0(s_setState_t, 1);
824   ((setState_t)(event->data))->type = type;
825   ((setState_t)(event->data))->container = container;
826   ((setState_t)(event->data))->value = xbt_strdup(value);
827
828   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
829
830   insert_into_buffer (event);
831 }
832
833
834 void new_pajePushState (double timestamp, container_t container, type_t type, const char *value)
835 {
836   paje_event_t event = xbt_new0(s_paje_event_t, 1);
837   event->event_type = PAJE_PushState;
838   event->timestamp = timestamp;
839   event->print = print_pajePushState;
840   event->free = free_paje_event;
841   event->data = xbt_new0(s_pushState_t, 1);
842   ((pushState_t)(event->data))->type = type;
843   ((pushState_t)(event->data))->container = container;
844   ((pushState_t)(event->data))->value = xbt_strdup(value);
845
846   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
847
848   insert_into_buffer (event);
849 }
850
851
852 void new_pajePopState (double timestamp, container_t container, type_t type)
853 {
854   paje_event_t event = xbt_new0(s_paje_event_t, 1);
855   event->event_type = PAJE_PopState;
856   event->timestamp = timestamp;
857   event->print = print_pajePopState;
858   event->free = free_paje_event;
859   event->data = xbt_new0(s_popState_t, 1);
860   ((popState_t)(event->data))->type = type;
861   ((popState_t)(event->data))->container = container;
862
863   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
864
865   insert_into_buffer (event);
866 }
867
868 void new_pajeStartLink (double timestamp, container_t container, type_t type, container_t sourceContainer, const char *value, const char *key)
869 {
870   paje_event_t event = xbt_new0(s_paje_event_t, 1);
871   event->event_type = PAJE_StartLink;
872   event->timestamp = timestamp;
873   event->print = print_pajeStartLink;
874   event->free = free_paje_event;
875   event->data = xbt_new0(s_startLink_t, 1);
876   ((startLink_t)(event->data))->type = type;
877   ((startLink_t)(event->data))->container = container;
878   ((startLink_t)(event->data))->sourceContainer = sourceContainer;
879   ((startLink_t)(event->data))->value = xbt_strdup(value);
880   ((startLink_t)(event->data))->key = xbt_strdup(key);
881
882   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
883
884   insert_into_buffer (event);
885 }
886
887 void new_pajeEndLink (double timestamp, container_t container, type_t type, container_t destContainer, const char *value, const char *key)
888 {
889   paje_event_t event = xbt_new0(s_paje_event_t, 1);
890   event->event_type = PAJE_EndLink;
891   event->timestamp = timestamp;
892   event->print = print_pajeEndLink;
893   event->free = free_paje_event;
894   event->data = xbt_new0(s_endLink_t, 1);
895   ((endLink_t)(event->data))->type = type;
896   ((endLink_t)(event->data))->container = container;
897   ((endLink_t)(event->data))->destContainer = destContainer;
898   ((endLink_t)(event->data))->value = xbt_strdup(value);
899   ((endLink_t)(event->data))->key = xbt_strdup(key);
900
901   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
902
903   insert_into_buffer (event);
904 }
905
906 void new_pajeNewEvent (double timestamp, container_t container, type_t type, const char *value)
907 {
908   paje_event_t event = xbt_new0(s_paje_event_t, 1);
909   event->event_type = PAJE_NewEvent;
910   event->timestamp = timestamp;
911   event->print = print_pajeNewEvent;
912   event->free = free_paje_event;
913   event->data = xbt_new0(s_newEvent_t, 1);
914   ((newEvent_t)(event->data))->type = type;
915   ((newEvent_t)(event->data))->container = container;
916   ((newEvent_t)(event->data))->value = xbt_strdup(value);
917
918   DEBUG3("%s: event_type=%d, timestamp=%f", __FUNCTION__, event->event_type, event->timestamp);
919
920   insert_into_buffer (event);
921 }
922
923 #endif /* HAVE_TRACING */