1 /* Copyright (c) 2010-2013. The SimGrid Team.
2 * All rights reserved. */
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. */
7 #include "instr/instr_private.h"
8 #include "xbt/virtu.h" /* sg_cmdline */
10 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr_trace, "tracing event system");
12 extern FILE * tracing_file;
13 extern s_instr_trace_writer_t active_writer;
14 extern xbt_dynar_t buffer;
17 void TRACE_paje_init(void)
19 active_writer.print_DefineContainerType=print_pajeDefineContainerType;
20 active_writer.print_DefineVariableType=print_pajeDefineVariableType;
21 active_writer.print_DefineStateType=print_pajeDefineStateType;
22 active_writer.print_DefineEventType=print_pajeDefineEventType;
23 active_writer.print_DefineLinkType=print_pajeDefineLinkType;
24 active_writer.print_DefineEntityValue=print_pajeDefineEntityValue;
25 active_writer.print_CreateContainer=print_pajeCreateContainer;
26 active_writer.print_DestroyContainer=print_pajeDestroyContainer;
27 active_writer.print_SetVariable=print_pajeSetVariable;
28 active_writer.print_AddVariable=print_pajeAddVariable;
29 active_writer.print_SubVariable=print_pajeSubVariable;
30 active_writer.print_SetState=print_pajeSetState;
31 active_writer.print_PushState=print_pajePushState;
32 active_writer.print_PopState=print_pajePopState;
33 active_writer.print_ResetState=print_pajeResetState;
34 active_writer.print_StartLink=print_pajeStartLink;
35 active_writer.print_EndLink=print_pajeEndLink;
36 active_writer.print_NewEvent=print_pajeNewEvent;
39 void TRACE_paje_start(void)
41 char *filename = TRACE_get_filename();
42 tracing_file = fopen(filename, "w");
43 if (tracing_file == NULL){
44 THROWF (system_error, 1, "Tracefile %s could not be opened for writing.", filename);
47 XBT_DEBUG("Filename %s is open for writing", filename);
49 /* output generator version */
50 fprintf (tracing_file, "#This file was generated using SimGrid-%d.%d.%d\n", SIMGRID_VERSION_MAJOR, SIMGRID_VERSION_MINOR, SIMGRID_VERSION_PATCH);
51 fprintf (tracing_file, "#[");
54 xbt_dynar_foreach (xbt_cmdline, cpt, str){
55 fprintf(tracing_file, "%s ",str);
57 fprintf (tracing_file, "]\n");
59 /* output one line comment */
60 dump_comment (TRACE_get_comment());
62 /* output comment file */
63 dump_comment_file (TRACE_get_comment_file());
66 TRACE_header(TRACE_basic(),TRACE_display_sizes());
68 buffer = xbt_dynar_new (sizeof(paje_event_t), NULL);
71 void TRACE_paje_end(void)
74 char *filename = TRACE_get_filename();
75 xbt_dynar_free (&buffer);
76 XBT_DEBUG("Filename %s is closed", filename);
80 void print_pajeDefineContainerType(paje_event_t event)
82 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
83 fprintf(tracing_file, "%d %s %s %s\n",
84 (int)event->event_type,
85 ((defineContainerType_t)event->data)->type->id,
86 ((defineContainerType_t)event->data)->type->father->id,
87 ((defineContainerType_t)event->data)->type->name);
90 void print_pajeDefineVariableType(paje_event_t event)
92 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
93 fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
94 (int)event->event_type,
95 ((defineVariableType_t)event->data)->type->id,
96 ((defineVariableType_t)event->data)->type->father->id,
97 ((defineVariableType_t)event->data)->type->name,
98 ((defineVariableType_t)event->data)->type->color);
101 void print_pajeDefineStateType(paje_event_t event)
103 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
104 fprintf(tracing_file, "%d %s %s %s\n",
105 (int)event->event_type,
106 ((defineStateType_t)event->data)->type->id,
107 ((defineStateType_t)event->data)->type->father->id,
108 ((defineStateType_t)event->data)->type->name);
111 void print_pajeDefineEventType(paje_event_t event)
113 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
114 fprintf(tracing_file, "%d %s %s %s\n",
115 (int)event->event_type,
116 ((defineEventType_t)event->data)->type->id,
117 ((defineEventType_t)event->data)->type->father->id,
118 ((defineEventType_t)event->data)->type->name);
121 void print_pajeDefineLinkType(paje_event_t event)
123 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
124 fprintf(tracing_file, "%d %s %s %s %s %s\n",
125 (int)event->event_type,
126 ((defineLinkType_t)event->data)->type->id,
127 ((defineLinkType_t)event->data)->type->father->id,
128 ((defineLinkType_t)event->data)->source->id,
129 ((defineLinkType_t)event->data)->dest->id,
130 ((defineLinkType_t)event->data)->type->name);
133 void print_pajeDefineEntityValue (paje_event_t event)
135 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
136 fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
137 (int)event->event_type,
138 ((defineEntityValue_t)event->data)->value->id,
139 ((defineEntityValue_t)event->data)->value->father->id,
140 ((defineEntityValue_t)event->data)->value->name,
141 ((defineEntityValue_t)event->data)->value->color);
144 void print_pajeCreateContainer(paje_event_t event)
146 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
147 if (event->timestamp == 0){
148 fprintf(tracing_file, "%d 0 %s %s %s \"%s\"\n",
149 (int)event->event_type,
150 ((createContainer_t)event->data)->container->id,
151 ((createContainer_t)event->data)->container->type->id,
152 ((createContainer_t)event->data)->container->father->id,
153 ((createContainer_t)event->data)->container->name);
155 fprintf(tracing_file, "%d %f %s %s %s \"%s\"\n",
156 (int)event->event_type,
158 ((createContainer_t)event->data)->container->id,
159 ((createContainer_t)event->data)->container->type->id,
160 ((createContainer_t)event->data)->container->father->id,
161 ((createContainer_t)event->data)->container->name);
165 void print_pajeDestroyContainer(paje_event_t event)
167 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
168 if (event->timestamp == 0){
169 fprintf(tracing_file, "%d 0 %s %s\n",
170 (int)event->event_type,
171 ((destroyContainer_t)event->data)->container->type->id,
172 ((destroyContainer_t)event->data)->container->id);
174 fprintf(tracing_file, "%d %f %s %s\n",
175 (int)event->event_type,
177 ((destroyContainer_t)event->data)->container->type->id,
178 ((destroyContainer_t)event->data)->container->id);
182 void print_pajeSetVariable(paje_event_t event)
184 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
185 if (event->timestamp == 0){
186 fprintf(tracing_file, "%d 0 %s %s %f\n",
187 (int)event->event_type,
188 ((setVariable_t)event->data)->type->id,
189 ((setVariable_t)event->data)->container->id,
190 ((setVariable_t)event->data)->value);
192 fprintf(tracing_file, "%d %f %s %s %f\n",
193 (int)event->event_type,
195 ((setVariable_t)event->data)->type->id,
196 ((setVariable_t)event->data)->container->id,
197 ((setVariable_t)event->data)->value);
201 void print_pajeAddVariable(paje_event_t event)
203 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
204 if (event->timestamp == 0){
205 fprintf(tracing_file, "%d 0 %s %s %f\n",
206 (int)event->event_type,
207 ((addVariable_t)event->data)->type->id,
208 ((addVariable_t)event->data)->container->id,
209 ((addVariable_t)event->data)->value);
211 fprintf(tracing_file, "%d %f %s %s %f\n",
212 (int)event->event_type,
214 ((addVariable_t)event->data)->type->id,
215 ((addVariable_t)event->data)->container->id,
216 ((addVariable_t)event->data)->value);
220 void print_pajeSubVariable(paje_event_t event)
222 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
223 if (event->timestamp == 0){
224 fprintf(tracing_file, "%d 0 %s %s %f\n",
225 (int)event->event_type,
226 ((subVariable_t)event->data)->type->id,
227 ((subVariable_t)event->data)->container->id,
228 ((subVariable_t)event->data)->value);
230 fprintf(tracing_file, "%d %f %s %s %f\n",
231 (int)event->event_type,
233 ((subVariable_t)event->data)->type->id,
234 ((subVariable_t)event->data)->container->id,
235 ((subVariable_t)event->data)->value);
239 void print_pajeSetState(paje_event_t event)
241 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
242 if (event->timestamp == 0){
243 fprintf(tracing_file, "%d 0 %s %s %s\n",
244 (int)event->event_type,
245 ((setState_t)event->data)->type->id,
246 ((setState_t)event->data)->container->id,
247 ((setState_t)event->data)->value->id);
249 fprintf(tracing_file, "%d %f %s %s %s\n",
250 (int)event->event_type,
252 ((setState_t)event->data)->type->id,
253 ((setState_t)event->data)->container->id,
254 ((setState_t)event->data)->value->id);
258 void print_pajePushState(paje_event_t event)
260 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
261 if (!TRACE_display_sizes()){
262 if (event->timestamp == 0){
263 fprintf(tracing_file, "%d 0 %s %s %s\n",
264 (int)event->event_type,
265 ((pushState_t)event->data)->type->id,
266 ((pushState_t)event->data)->container->id,
267 ((pushState_t)event->data)->value->id);
269 fprintf(tracing_file, "%d %f %s %s %s\n",
270 (int)event->event_type,
272 ((pushState_t)event->data)->type->id,
273 ((pushState_t)event->data)->container->id,
274 ((pushState_t)event->data)->value->id);
277 if (event->timestamp == 0){
278 fprintf(tracing_file, "%d 0 %s %s %s ",
279 (int)event->event_type,
280 ((pushState_t)event->data)->type->id,
281 ((pushState_t)event->data)->container->id,
282 ((pushState_t)event->data)->value->id);
283 if(((pushState_t)event->data)->extra !=NULL){
284 fprintf(tracing_file, "%d ", ((instr_extra_data)((pushState_t)event->data)->extra)->send_size);
286 fprintf(tracing_file, "0 ");
288 fprintf(tracing_file, "\n");
291 fprintf(tracing_file, "%d %f %s %s %s ",
292 (int)event->event_type,
294 ((pushState_t)event->data)->type->id,
295 ((pushState_t)event->data)->container->id,
296 ((pushState_t)event->data)->value->id);
297 if(((pushState_t)event->data)->extra !=NULL){
298 fprintf(tracing_file, "%d ", ((instr_extra_data)((pushState_t)event->data)->extra)->send_size);
300 fprintf(tracing_file, "0 ");
302 fprintf(tracing_file, "\n");
306 if(((pushState_t)event->data)->extra!=NULL){
307 if(((instr_extra_data)((pushState_t)event->data)->extra)->sendcounts!=NULL)
308 xbt_free(((instr_extra_data)((pushState_t)event->data)->extra)->sendcounts);
309 if(((instr_extra_data)((pushState_t)event->data)->extra)->recvcounts!=NULL)
310 xbt_free(((instr_extra_data)((pushState_t)event->data)->extra)->recvcounts);
311 xbt_free(((pushState_t)event->data)->extra);
315 void print_pajePopState(paje_event_t event)
317 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
318 if (event->timestamp == 0){
319 fprintf(tracing_file, "%d 0 %s %s\n",
320 (int)event->event_type,
321 ((popState_t)event->data)->type->id,
322 ((popState_t)event->data)->container->id);
324 fprintf(tracing_file, "%d %f %s %s\n",
325 (int)event->event_type,
327 ((popState_t)event->data)->type->id,
328 ((popState_t)event->data)->container->id);
332 void print_pajeResetState(paje_event_t event)
334 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
335 if (event->timestamp == 0){
336 fprintf(tracing_file, "%d 0 %s %s\n",
337 (int)event->event_type,
338 ((resetState_t)event->data)->type->id,
339 ((resetState_t)event->data)->container->id);
341 fprintf(tracing_file, "%d %f %s %s\n",
342 (int)event->event_type,
344 ((resetState_t)event->data)->type->id,
345 ((resetState_t)event->data)->container->id);
349 void print_pajeStartLink(paje_event_t event)
351 if (!TRACE_display_sizes()){
352 if (event->timestamp == 0){
353 fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
354 (int)event->event_type,
355 ((startLink_t)event->data)->type->id,
356 ((startLink_t)event->data)->container->id,
357 ((startLink_t)event->data)->value,
358 ((startLink_t)event->data)->sourceContainer->id,
359 ((startLink_t)event->data)->key);
361 fprintf(tracing_file, "%d %f %s %s %s %s %s\n",
362 (int)event->event_type,
364 ((startLink_t)event->data)->type->id,
365 ((startLink_t)event->data)->container->id,
366 ((startLink_t)event->data)->value,
367 ((startLink_t)event->data)->sourceContainer->id,
368 ((startLink_t)event->data)->key);
371 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
372 if (event->timestamp == 0){
373 fprintf(tracing_file, "%d 0 %s %s %s %s %s %d\n",
374 (int)event->event_type,
375 ((startLink_t)event->data)->type->id,
376 ((startLink_t)event->data)->container->id,
377 ((startLink_t)event->data)->value,
378 ((startLink_t)event->data)->sourceContainer->id,
379 ((startLink_t)event->data)->key,
380 ((startLink_t)event->data)->size);
382 fprintf(tracing_file, "%d %f %s %s %s %s %s %d\n",
383 (int)event->event_type,
385 ((startLink_t)event->data)->type->id,
386 ((startLink_t)event->data)->container->id,
387 ((startLink_t)event->data)->value,
388 ((startLink_t)event->data)->sourceContainer->id,
389 ((startLink_t)event->data)->key,
390 ((startLink_t)event->data)->size);
395 void print_pajeEndLink(paje_event_t event)
397 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
398 if (event->timestamp == 0){
399 fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
400 (int)event->event_type,
401 ((endLink_t)event->data)->type->id,
402 ((endLink_t)event->data)->container->id,
403 ((endLink_t)event->data)->value,
404 ((endLink_t)event->data)->destContainer->id,
405 ((endLink_t)event->data)->key);
407 fprintf(tracing_file, "%d %f %s %s %s %s %s\n",
408 (int)event->event_type,
410 ((endLink_t)event->data)->type->id,
411 ((endLink_t)event->data)->container->id,
412 ((endLink_t)event->data)->value,
413 ((endLink_t)event->data)->destContainer->id,
414 ((endLink_t)event->data)->key);
418 void print_pajeNewEvent (paje_event_t event)
420 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
421 if (event->timestamp == 0){
422 fprintf(tracing_file, "%d 0 %s %s %s\n",
423 (int)event->event_type,
424 ((newEvent_t)event->data)->type->id,
425 ((newEvent_t)event->data)->container->id,
426 ((newEvent_t)event->data)->value->id);
428 fprintf(tracing_file, "%d %f %s %s %s\n",
429 (int)event->event_type,
431 ((newEvent_t)event->data)->type->id,
432 ((newEvent_t)event->data)->container->id,
433 ((newEvent_t)event->data)->value->id);