Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Move code in simgrid::mc
[simgrid.git] / src / instr / instr_paje_trace.cpp
1 /* Copyright (c) 2010-2015. 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 "src/instr/instr_private.h"
8 #include "xbt/virtu.h" /* sg_cmdline */
9
10 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr_trace, "tracing event system");
11
12 extern FILE * tracing_file;
13 extern s_instr_trace_writer_t active_writer;
14
15 void TRACE_paje_init(void)
16 {
17   active_writer.print_DefineContainerType=print_pajeDefineContainerType;
18   active_writer.print_DefineVariableType=print_pajeDefineVariableType;
19   active_writer.print_DefineStateType=print_pajeDefineStateType;
20   active_writer.print_DefineEventType=print_pajeDefineEventType;
21   active_writer.print_DefineLinkType=print_pajeDefineLinkType;
22   active_writer.print_DefineEntityValue=print_pajeDefineEntityValue;
23   active_writer.print_CreateContainer=print_pajeCreateContainer;
24   active_writer.print_DestroyContainer=print_pajeDestroyContainer;
25   active_writer.print_SetVariable=print_pajeSetVariable;
26   active_writer.print_AddVariable=print_pajeAddVariable;
27   active_writer.print_SubVariable=print_pajeSubVariable;
28   active_writer.print_SetState=print_pajeSetState;
29   active_writer.print_PushState=print_pajePushState;
30   active_writer.print_PopState=print_pajePopState;
31   active_writer.print_ResetState=print_pajeResetState;
32   active_writer.print_StartLink=print_pajeStartLink;
33   active_writer.print_EndLink=print_pajeEndLink;
34   active_writer.print_NewEvent=print_pajeNewEvent;
35 }
36
37 void TRACE_paje_start(void)
38 {
39   char *filename = TRACE_get_filename();
40   tracing_file = fopen(filename, "w");
41   if (tracing_file == NULL){
42     THROWF (system_error, 1, "Tracefile %s could not be opened for writing.", filename);
43   }
44
45   XBT_DEBUG("Filename %s is open for writing", filename);
46
47   /* output generator version */
48   fprintf (tracing_file, "#This file was generated using SimGrid-%d.%d.%d\n",
49            SIMGRID_VERSION_MAJOR, SIMGRID_VERSION_MINOR, SIMGRID_VERSION_PATCH);
50   fprintf (tracing_file, "#[");
51   unsigned int cpt;
52   char *str;
53   xbt_dynar_foreach (xbt_cmdline, cpt, str){
54     fprintf(tracing_file, "%s ",str);
55   }
56   fprintf (tracing_file, "]\n");
57
58   /* output one line comment */
59   dump_comment (TRACE_get_comment());
60
61   /* output comment file */
62   dump_comment_file (TRACE_get_comment_file());
63
64   /* output header */
65   TRACE_header(TRACE_basic(),TRACE_display_sizes());
66 }
67
68 void TRACE_paje_end(void)
69 {
70   fclose(tracing_file);
71   char *filename = TRACE_get_filename();
72   XBT_DEBUG("Filename %s is closed", filename);
73 }
74
75 void print_pajeDefineContainerType(paje_event_t event)
76 {
77   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
78   fprintf(tracing_file, "%d %s %s %s\n", (int)event->event_type, ((defineContainerType_t)event->data)->type->id,
79       ((defineContainerType_t)event->data)->type->father->id, ((defineContainerType_t)event->data)->type->name);
80 }
81
82 void print_pajeDefineVariableType(paje_event_t event)
83 {
84   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
85   fprintf(tracing_file, "%d %s %s %s \"%s\"\n", (int)event->event_type,
86       ((defineVariableType_t)event->data)->type->id, ((defineVariableType_t)event->data)->type->father->id,
87       ((defineVariableType_t)event->data)->type->name, ((defineVariableType_t)event->data)->type->color);
88 }
89
90 void print_pajeDefineStateType(paje_event_t event)
91 {
92   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
93   fprintf(tracing_file, "%d %s %s %s\n", (int)event->event_type, ((defineStateType_t)event->data)->type->id,
94           ((defineStateType_t)event->data)->type->father->id, ((defineStateType_t)event->data)->type->name);
95 }
96
97 void print_pajeDefineEventType(paje_event_t event)
98 {
99   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
100   fprintf(tracing_file, "%d %s %s %s\n", (int)event->event_type, ((defineEventType_t)event->data)->type->id,
101       ((defineEventType_t)event->data)->type->father->id, ((defineEventType_t)event->data)->type->name);
102 }
103
104 void print_pajeDefineLinkType(paje_event_t event)
105 {
106   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
107   fprintf(tracing_file, "%d %s %s %s %s %s\n", (int)event->event_type, ((defineLinkType_t)event->data)->type->id,
108       ((defineLinkType_t)event->data)->type->father->id, ((defineLinkType_t)event->data)->source->id,
109       ((defineLinkType_t)event->data)->dest->id, ((defineLinkType_t)event->data)->type->name);
110 }
111
112 void print_pajeDefineEntityValue (paje_event_t event)
113 {
114   XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
115   fprintf(tracing_file, "%d %s %s %s \"%s\"\n", (int)event->event_type, ((defineEntityValue_t)event->data)->value->id,
116       ((defineEntityValue_t)event->data)->value->father->id, ((defineEntityValue_t)event->data)->value->name,
117       ((defineEntityValue_t)event->data)->value->color);
118 }
119
120 void print_pajeCreateContainer(paje_event_t event)
121 {
122   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
123             event->timestamp);
124   if (event->timestamp == 0){
125     fprintf(tracing_file, "%d 0 %s %s %s \"%s\"\n", (int)event->event_type,
126         ((createContainer_t)event->data)->container->id, ((createContainer_t)event->data)->container->type->id,
127         ((createContainer_t)event->data)->container->father->id, ((createContainer_t)event->data)->container->name);
128   }else{
129     fprintf(tracing_file, "%d %.*f %s %s %s \"%s\"\n", (int)event->event_type, TRACE_precision(), event->timestamp,
130         ((createContainer_t)event->data)->container->id, ((createContainer_t)event->data)->container->type->id,
131         ((createContainer_t)event->data)->container->father->id, ((createContainer_t)event->data)->container->name);
132   }
133 }
134
135 void print_pajeDestroyContainer(paje_event_t event)
136 {
137   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
138             event->timestamp);
139   if (event->timestamp == 0){
140     fprintf(tracing_file, "%d 0 %s %s\n", (int)event->event_type,
141         ((destroyContainer_t)event->data)->container->type->id, ((destroyContainer_t)event->data)->container->id);
142   }else{
143     fprintf(tracing_file, "%d %.*f %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
144         ((destroyContainer_t)event->data)->container->type->id, ((destroyContainer_t)event->data)->container->id);
145   }
146 }
147
148 void print_pajeSetVariable(paje_event_t event)
149 {
150   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
151             event->timestamp);
152   if (event->timestamp == 0){
153     fprintf(tracing_file, "%d 0 %s %s %f\n", (int)event->event_type, ((setVariable_t)event->data)->type->id,
154         ((setVariable_t)event->data)->container->id, ((setVariable_t)event->data)->value);
155   }else{
156     fprintf(tracing_file, "%d %.*f %s %s %f\n", (int)event->event_type, TRACE_precision(), event->timestamp,
157         ((setVariable_t)event->data)->type->id, ((setVariable_t)event->data)->container->id,
158         ((setVariable_t)event->data)->value);
159   }
160 }
161
162 void print_pajeAddVariable(paje_event_t event)
163 {
164   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
165             event->timestamp);
166   if (event->timestamp == 0){
167     fprintf(tracing_file, "%d 0 %s %s %f\n", (int)event->event_type, ((addVariable_t)event->data)->type->id,
168         ((addVariable_t)event->data)->container->id, ((addVariable_t)event->data)->value);
169   }else{
170     fprintf(tracing_file, "%d %.*f %s %s %f\n", (int)event->event_type, TRACE_precision(), event->timestamp,
171         ((addVariable_t)event->data)->type->id, ((addVariable_t)event->data)->container->id,
172         ((addVariable_t)event->data)->value);
173   }
174 }
175
176 void print_pajeSubVariable(paje_event_t event)
177 {
178   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
179             event->timestamp);
180   if (event->timestamp == 0){
181     fprintf(tracing_file, "%d 0 %s %s %f\n", (int)event->event_type, ((subVariable_t)event->data)->type->id,
182         ((subVariable_t)event->data)->container->id, ((subVariable_t)event->data)->value);
183   }else{
184     fprintf(tracing_file, "%d %.*f %s %s %f\n", (int)event->event_type, TRACE_precision(), event->timestamp,
185         ((subVariable_t)event->data)->type->id, ((subVariable_t)event->data)->container->id,
186         ((subVariable_t)event->data)->value);
187   }
188 }
189
190 void print_pajeSetState(paje_event_t event)
191 {
192   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
193             event->timestamp);
194   if (event->timestamp == 0){
195     fprintf(tracing_file, "%d 0 %s %s %s\n", (int)event->event_type, ((setState_t)event->data)->type->id,
196         ((setState_t)event->data)->container->id, ((setState_t)event->data)->value->id);
197   }else{
198     fprintf(tracing_file, "%d %.*f %s %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
199         ((setState_t)event->data)->type->id, ((setState_t)event->data)->container->id,
200         ((setState_t)event->data)->value->id);
201   }
202 }
203
204 void print_pajePushState(paje_event_t event)
205 {
206   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
207             event->timestamp);
208   if (!TRACE_display_sizes()){
209     if (event->timestamp == 0){
210       fprintf(tracing_file, "%d 0 %s %s %s\n", (int)event->event_type, ((pushState_t)event->data)->type->id,
211           ((pushState_t)event->data)->container->id, ((pushState_t)event->data)->value->id);
212     }else{
213       fprintf(tracing_file, "%d %.*f %s %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
214           ((pushState_t)event->data)->type->id, ((pushState_t)event->data)->container->id,
215           ((pushState_t)event->data)->value->id);
216     }
217   }else{
218     if (event->timestamp == 0){
219       fprintf(tracing_file, "%d 0 %s %s %s ", (int)event->event_type, ((pushState_t)event->data)->type->id,
220           ((pushState_t)event->data)->container->id, ((pushState_t)event->data)->value->id);
221       if(((pushState_t)event->data)->extra !=NULL){
222         fprintf(tracing_file, "%d ", ((instr_extra_data)((pushState_t)event->data)->extra)->send_size);
223       }else{
224         fprintf(tracing_file, "0 ");
225       }
226       fprintf(tracing_file, "\n");
227
228     }else{
229       fprintf(tracing_file, "%d %.*f %s %s %s ", (int)event->event_type, TRACE_precision(), event->timestamp,
230           ((pushState_t)event->data)->type->id, ((pushState_t)event->data)->container->id,
231           ((pushState_t)event->data)->value->id);
232       if(((pushState_t)event->data)->extra !=NULL){
233         fprintf(tracing_file, "%d ", ((instr_extra_data)((pushState_t)event->data)->extra)->send_size);
234       }else{
235         fprintf(tracing_file, "0 ");
236       }
237       fprintf(tracing_file, "\n");
238     }
239   }
240    if(((pushState_t)event->data)->extra!=NULL){
241      if(((instr_extra_data)((pushState_t)event->data)->extra)->sendcounts!=NULL)
242        xbt_free(((instr_extra_data)((pushState_t)event->data)->extra)->sendcounts);
243      if(((instr_extra_data)((pushState_t)event->data)->extra)->recvcounts!=NULL)
244        xbt_free(((instr_extra_data)((pushState_t)event->data)->extra)->recvcounts);
245      xbt_free(((pushState_t)event->data)->extra);
246    }
247 }
248
249 void print_pajePopState(paje_event_t event)
250 {
251   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
252             event->timestamp);
253   if (event->timestamp == 0){
254     fprintf(tracing_file, "%d 0 %s %s\n", (int)event->event_type, ((popState_t)event->data)->type->id,
255         ((popState_t)event->data)->container->id);
256   }else{
257     fprintf(tracing_file, "%d %.*f %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
258         ((popState_t)event->data)->type->id, ((popState_t)event->data)->container->id);
259   }
260 }
261
262 void print_pajeResetState(paje_event_t event)
263 {
264   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
265             event->timestamp);
266   if (event->timestamp == 0){
267     fprintf(tracing_file, "%d 0 %s %s\n", (int)event->event_type, ((resetState_t)event->data)->type->id,
268         ((resetState_t)event->data)->container->id);
269   }else{
270     fprintf(tracing_file, "%d %.*f %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
271         ((resetState_t)event->data)->type->id, ((resetState_t)event->data)->container->id);
272   }
273 }
274
275 void print_pajeStartLink(paje_event_t event)
276 {
277   if (!TRACE_display_sizes()){
278     if (event->timestamp == 0){
279       fprintf(tracing_file, "%d 0 %s %s %s %s %s\n", (int)event->event_type, ((startLink_t)event->data)->type->id,
280           ((startLink_t)event->data)->container->id, ((startLink_t)event->data)->value,
281           ((startLink_t)event->data)->sourceContainer->id, ((startLink_t)event->data)->key);
282     }else {
283       fprintf(tracing_file, "%d %.*f %s %s %s %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
284           ((startLink_t)event->data)->type->id, ((startLink_t)event->data)->container->id,
285           ((startLink_t)event->data)->value, ((startLink_t)event->data)->sourceContainer->id,
286           ((startLink_t)event->data)->key);
287     }
288   }else{
289   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
290             event->timestamp);
291     if (event->timestamp == 0){
292       fprintf(tracing_file, "%d 0 %s %s %s %s %s %d\n", (int)event->event_type, ((startLink_t)event->data)->type->id,
293           ((startLink_t)event->data)->container->id, ((startLink_t)event->data)->value,
294           ((startLink_t)event->data)->sourceContainer->id, ((startLink_t)event->data)->key,
295           ((startLink_t)event->data)->size);
296     }else {
297       fprintf(tracing_file, "%d %.*f %s %s %s %s %s %d\n", (int)event->event_type, TRACE_precision(), event->timestamp,
298           ((startLink_t)event->data)->type->id, ((startLink_t)event->data)->container->id,
299           ((startLink_t)event->data)->value, ((startLink_t)event->data)->sourceContainer->id,
300           ((startLink_t)event->data)->key, ((startLink_t)event->data)->size);
301     }
302   }
303 }
304
305 void print_pajeEndLink(paje_event_t event)
306 {
307   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
308             event->timestamp);
309   if (event->timestamp == 0){
310     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n", (int)event->event_type, ((endLink_t)event->data)->type->id,
311         ((endLink_t)event->data)->container->id, ((endLink_t)event->data)->value,
312         ((endLink_t)event->data)->destContainer->id, ((endLink_t)event->data)->key);
313   }else {
314     fprintf(tracing_file, "%d %.*f %s %s %s %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
315         ((endLink_t)event->data)->type->id, ((endLink_t)event->data)->container->id, ((endLink_t)event->data)->value,
316         ((endLink_t)event->data)->destContainer->id, ((endLink_t)event->data)->key);
317   }
318 }
319
320 void print_pajeNewEvent (paje_event_t event)
321 {
322   XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
323             event->timestamp);
324   if (event->timestamp == 0){
325     fprintf(tracing_file, "%d 0 %s %s %s\n", (int)event->event_type, ((newEvent_t)event->data)->type->id,
326         ((newEvent_t)event->data)->container->id, ((newEvent_t)event->data)->value->id);
327   }else{
328     fprintf(tracing_file, "%d %.*f %s %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
329         ((newEvent_t)event->data)->type->id, ((newEvent_t)event->data)->container->id,
330         ((newEvent_t)event->data)->value->id);
331   }
332 }