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;
16 void TRACE_paje_init(void)
18 active_writer.print_DefineContainerType=print_pajeDefineContainerType;
19 active_writer.print_DefineVariableType=print_pajeDefineVariableType;
20 active_writer.print_DefineStateType=print_pajeDefineStateType;
21 active_writer.print_DefineEventType=print_pajeDefineEventType;
22 active_writer.print_DefineLinkType=print_pajeDefineLinkType;
23 active_writer.print_DefineEntityValue=print_pajeDefineEntityValue;
24 active_writer.print_CreateContainer=print_pajeCreateContainer;
25 active_writer.print_DestroyContainer=print_pajeDestroyContainer;
26 active_writer.print_SetVariable=print_pajeSetVariable;
27 active_writer.print_AddVariable=print_pajeAddVariable;
28 active_writer.print_SubVariable=print_pajeSubVariable;
29 active_writer.print_SetState=print_pajeSetState;
30 active_writer.print_PushState=print_pajePushState;
31 active_writer.print_PopState=print_pajePopState;
32 active_writer.print_ResetState=print_pajeResetState;
33 active_writer.print_StartLink=print_pajeStartLink;
34 active_writer.print_EndLink=print_pajeEndLink;
35 active_writer.print_NewEvent=print_pajeNewEvent;
38 void TRACE_paje_start(void)
40 char *filename = TRACE_get_filename();
41 tracing_file = fopen(filename, "w");
42 if (tracing_file == NULL){
43 THROWF (system_error, 1, "Tracefile %s could not be opened for writing.", filename);
46 XBT_DEBUG("Filename %s is open for writing", filename);
48 /* output generator version */
49 fprintf (tracing_file, "#This file was generated using SimGrid-%d.%d.%d\n", SIMGRID_VERSION_MAJOR, SIMGRID_VERSION_MINOR, SIMGRID_VERSION_PATCH);
50 fprintf (tracing_file, "#[");
53 xbt_dynar_foreach (xbt_cmdline, cpt, str){
54 fprintf(tracing_file, "%s ",str);
56 fprintf (tracing_file, "]\n");
58 /* output one line comment */
59 dump_comment (TRACE_get_comment());
61 /* output comment file */
62 dump_comment_file (TRACE_get_comment_file());
65 TRACE_header(TRACE_basic(),TRACE_display_sizes());
69 void TRACE_paje_end(void)
72 char *filename = TRACE_get_filename();
73 XBT_DEBUG("Filename %s is closed", filename);
77 void print_pajeDefineContainerType(paje_event_t event)
79 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
80 fprintf(tracing_file, "%d %s %s %s\n",
81 (int)event->event_type,
82 ((defineContainerType_t)event->data)->type->id,
83 ((defineContainerType_t)event->data)->type->father->id,
84 ((defineContainerType_t)event->data)->type->name);
87 void print_pajeDefineVariableType(paje_event_t event)
89 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
90 fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
91 (int)event->event_type,
92 ((defineVariableType_t)event->data)->type->id,
93 ((defineVariableType_t)event->data)->type->father->id,
94 ((defineVariableType_t)event->data)->type->name,
95 ((defineVariableType_t)event->data)->type->color);
98 void print_pajeDefineStateType(paje_event_t event)
100 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
101 fprintf(tracing_file, "%d %s %s %s\n",
102 (int)event->event_type,
103 ((defineStateType_t)event->data)->type->id,
104 ((defineStateType_t)event->data)->type->father->id,
105 ((defineStateType_t)event->data)->type->name);
108 void print_pajeDefineEventType(paje_event_t event)
110 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
111 fprintf(tracing_file, "%d %s %s %s\n",
112 (int)event->event_type,
113 ((defineEventType_t)event->data)->type->id,
114 ((defineEventType_t)event->data)->type->father->id,
115 ((defineEventType_t)event->data)->type->name);
118 void print_pajeDefineLinkType(paje_event_t event)
120 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
121 fprintf(tracing_file, "%d %s %s %s %s %s\n",
122 (int)event->event_type,
123 ((defineLinkType_t)event->data)->type->id,
124 ((defineLinkType_t)event->data)->type->father->id,
125 ((defineLinkType_t)event->data)->source->id,
126 ((defineLinkType_t)event->data)->dest->id,
127 ((defineLinkType_t)event->data)->type->name);
130 void print_pajeDefineEntityValue (paje_event_t event)
132 XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event->event_type);
133 fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
134 (int)event->event_type,
135 ((defineEntityValue_t)event->data)->value->id,
136 ((defineEntityValue_t)event->data)->value->father->id,
137 ((defineEntityValue_t)event->data)->value->name,
138 ((defineEntityValue_t)event->data)->value->color);
141 void print_pajeCreateContainer(paje_event_t event)
143 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
144 if (event->timestamp == 0){
145 fprintf(tracing_file, "%d 0 %s %s %s \"%s\"\n",
146 (int)event->event_type,
147 ((createContainer_t)event->data)->container->id,
148 ((createContainer_t)event->data)->container->type->id,
149 ((createContainer_t)event->data)->container->father->id,
150 ((createContainer_t)event->data)->container->name);
152 fprintf(tracing_file, "%d %f %s %s %s \"%s\"\n",
153 (int)event->event_type,
155 ((createContainer_t)event->data)->container->id,
156 ((createContainer_t)event->data)->container->type->id,
157 ((createContainer_t)event->data)->container->father->id,
158 ((createContainer_t)event->data)->container->name);
162 void print_pajeDestroyContainer(paje_event_t event)
164 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
165 if (event->timestamp == 0){
166 fprintf(tracing_file, "%d 0 %s %s\n",
167 (int)event->event_type,
168 ((destroyContainer_t)event->data)->container->type->id,
169 ((destroyContainer_t)event->data)->container->id);
171 fprintf(tracing_file, "%d %f %s %s\n",
172 (int)event->event_type,
174 ((destroyContainer_t)event->data)->container->type->id,
175 ((destroyContainer_t)event->data)->container->id);
179 void print_pajeSetVariable(paje_event_t event)
181 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
182 if (event->timestamp == 0){
183 fprintf(tracing_file, "%d 0 %s %s %f\n",
184 (int)event->event_type,
185 ((setVariable_t)event->data)->type->id,
186 ((setVariable_t)event->data)->container->id,
187 ((setVariable_t)event->data)->value);
189 fprintf(tracing_file, "%d %f %s %s %f\n",
190 (int)event->event_type,
192 ((setVariable_t)event->data)->type->id,
193 ((setVariable_t)event->data)->container->id,
194 ((setVariable_t)event->data)->value);
198 void print_pajeAddVariable(paje_event_t event)
200 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
201 if (event->timestamp == 0){
202 fprintf(tracing_file, "%d 0 %s %s %f\n",
203 (int)event->event_type,
204 ((addVariable_t)event->data)->type->id,
205 ((addVariable_t)event->data)->container->id,
206 ((addVariable_t)event->data)->value);
208 fprintf(tracing_file, "%d %f %s %s %f\n",
209 (int)event->event_type,
211 ((addVariable_t)event->data)->type->id,
212 ((addVariable_t)event->data)->container->id,
213 ((addVariable_t)event->data)->value);
217 void print_pajeSubVariable(paje_event_t event)
219 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
220 if (event->timestamp == 0){
221 fprintf(tracing_file, "%d 0 %s %s %f\n",
222 (int)event->event_type,
223 ((subVariable_t)event->data)->type->id,
224 ((subVariable_t)event->data)->container->id,
225 ((subVariable_t)event->data)->value);
227 fprintf(tracing_file, "%d %f %s %s %f\n",
228 (int)event->event_type,
230 ((subVariable_t)event->data)->type->id,
231 ((subVariable_t)event->data)->container->id,
232 ((subVariable_t)event->data)->value);
236 void print_pajeSetState(paje_event_t event)
238 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
239 if (event->timestamp == 0){
240 fprintf(tracing_file, "%d 0 %s %s %s\n",
241 (int)event->event_type,
242 ((setState_t)event->data)->type->id,
243 ((setState_t)event->data)->container->id,
244 ((setState_t)event->data)->value->id);
246 fprintf(tracing_file, "%d %f %s %s %s\n",
247 (int)event->event_type,
249 ((setState_t)event->data)->type->id,
250 ((setState_t)event->data)->container->id,
251 ((setState_t)event->data)->value->id);
255 void print_pajePushState(paje_event_t event)
257 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
258 if (!TRACE_display_sizes()){
259 if (event->timestamp == 0){
260 fprintf(tracing_file, "%d 0 %s %s %s\n",
261 (int)event->event_type,
262 ((pushState_t)event->data)->type->id,
263 ((pushState_t)event->data)->container->id,
264 ((pushState_t)event->data)->value->id);
266 fprintf(tracing_file, "%d %f %s %s %s\n",
267 (int)event->event_type,
269 ((pushState_t)event->data)->type->id,
270 ((pushState_t)event->data)->container->id,
271 ((pushState_t)event->data)->value->id);
274 if (event->timestamp == 0){
275 fprintf(tracing_file, "%d 0 %s %s %s ",
276 (int)event->event_type,
277 ((pushState_t)event->data)->type->id,
278 ((pushState_t)event->data)->container->id,
279 ((pushState_t)event->data)->value->id);
280 if(((pushState_t)event->data)->extra !=NULL){
281 fprintf(tracing_file, "%d ", ((instr_extra_data)((pushState_t)event->data)->extra)->send_size);
283 fprintf(tracing_file, "0 ");
285 fprintf(tracing_file, "\n");
288 fprintf(tracing_file, "%d %f %s %s %s ",
289 (int)event->event_type,
291 ((pushState_t)event->data)->type->id,
292 ((pushState_t)event->data)->container->id,
293 ((pushState_t)event->data)->value->id);
294 if(((pushState_t)event->data)->extra !=NULL){
295 fprintf(tracing_file, "%d ", ((instr_extra_data)((pushState_t)event->data)->extra)->send_size);
297 fprintf(tracing_file, "0 ");
299 fprintf(tracing_file, "\n");
303 if(((pushState_t)event->data)->extra!=NULL){
304 if(((instr_extra_data)((pushState_t)event->data)->extra)->sendcounts!=NULL)
305 xbt_free(((instr_extra_data)((pushState_t)event->data)->extra)->sendcounts);
306 if(((instr_extra_data)((pushState_t)event->data)->extra)->recvcounts!=NULL)
307 xbt_free(((instr_extra_data)((pushState_t)event->data)->extra)->recvcounts);
308 xbt_free(((pushState_t)event->data)->extra);
312 void print_pajePopState(paje_event_t event)
314 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
315 if (event->timestamp == 0){
316 fprintf(tracing_file, "%d 0 %s %s\n",
317 (int)event->event_type,
318 ((popState_t)event->data)->type->id,
319 ((popState_t)event->data)->container->id);
321 fprintf(tracing_file, "%d %f %s %s\n",
322 (int)event->event_type,
324 ((popState_t)event->data)->type->id,
325 ((popState_t)event->data)->container->id);
329 void print_pajeResetState(paje_event_t event)
331 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
332 if (event->timestamp == 0){
333 fprintf(tracing_file, "%d 0 %s %s\n",
334 (int)event->event_type,
335 ((resetState_t)event->data)->type->id,
336 ((resetState_t)event->data)->container->id);
338 fprintf(tracing_file, "%d %f %s %s\n",
339 (int)event->event_type,
341 ((resetState_t)event->data)->type->id,
342 ((resetState_t)event->data)->container->id);
346 void print_pajeStartLink(paje_event_t event)
348 if (!TRACE_display_sizes()){
349 if (event->timestamp == 0){
350 fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
351 (int)event->event_type,
352 ((startLink_t)event->data)->type->id,
353 ((startLink_t)event->data)->container->id,
354 ((startLink_t)event->data)->value,
355 ((startLink_t)event->data)->sourceContainer->id,
356 ((startLink_t)event->data)->key);
358 fprintf(tracing_file, "%d %f %s %s %s %s %s\n",
359 (int)event->event_type,
361 ((startLink_t)event->data)->type->id,
362 ((startLink_t)event->data)->container->id,
363 ((startLink_t)event->data)->value,
364 ((startLink_t)event->data)->sourceContainer->id,
365 ((startLink_t)event->data)->key);
368 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
369 if (event->timestamp == 0){
370 fprintf(tracing_file, "%d 0 %s %s %s %s %s %d\n",
371 (int)event->event_type,
372 ((startLink_t)event->data)->type->id,
373 ((startLink_t)event->data)->container->id,
374 ((startLink_t)event->data)->value,
375 ((startLink_t)event->data)->sourceContainer->id,
376 ((startLink_t)event->data)->key,
377 ((startLink_t)event->data)->size);
379 fprintf(tracing_file, "%d %f %s %s %s %s %s %d\n",
380 (int)event->event_type,
382 ((startLink_t)event->data)->type->id,
383 ((startLink_t)event->data)->container->id,
384 ((startLink_t)event->data)->value,
385 ((startLink_t)event->data)->sourceContainer->id,
386 ((startLink_t)event->data)->key,
387 ((startLink_t)event->data)->size);
392 void print_pajeEndLink(paje_event_t event)
394 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
395 if (event->timestamp == 0){
396 fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
397 (int)event->event_type,
398 ((endLink_t)event->data)->type->id,
399 ((endLink_t)event->data)->container->id,
400 ((endLink_t)event->data)->value,
401 ((endLink_t)event->data)->destContainer->id,
402 ((endLink_t)event->data)->key);
404 fprintf(tracing_file, "%d %f %s %s %s %s %s\n",
405 (int)event->event_type,
407 ((endLink_t)event->data)->type->id,
408 ((endLink_t)event->data)->container->id,
409 ((endLink_t)event->data)->value,
410 ((endLink_t)event->data)->destContainer->id,
411 ((endLink_t)event->data)->key);
415 void print_pajeNewEvent (paje_event_t event)
417 XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event->event_type, event->timestamp);
418 if (event->timestamp == 0){
419 fprintf(tracing_file, "%d 0 %s %s %s\n",
420 (int)event->event_type,
421 ((newEvent_t)event->data)->type->id,
422 ((newEvent_t)event->data)->container->id,
423 ((newEvent_t)event->data)->value->id);
425 fprintf(tracing_file, "%d %f %s %s %s\n",
426 (int)event->event_type,
428 ((newEvent_t)event->data)->type->id,
429 ((newEvent_t)event->data)->container->id,
430 ((newEvent_t)event->data)->value->id);