Logo AND Algorithmique Numérique Distribuée

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