Logo AND Algorithmique Numérique Distribuée

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