1 /* Copyright (c) 2010-2015. 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 "src/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;
15 void TRACE_paje_init(void)
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;
37 void TRACE_paje_start(void)
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);
45 XBT_DEBUG("Filename %s is open for writing", filename);
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, "#[");
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());
68 void TRACE_paje_end(void)
71 char *filename = TRACE_get_filename();
72 XBT_DEBUG("Filename %s is closed", filename);
75 void print_pajeDefineContainerType(paje_event_t event)
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);
82 void print_pajeDefineVariableType(paje_event_t event)
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);
90 void print_pajeDefineStateType(paje_event_t event)
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);
97 void print_pajeDefineEventType(paje_event_t event)
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);
104 void print_pajeDefineLinkType(paje_event_t event)
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);
112 void print_pajeDefineEntityValue (paje_event_t event)
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);
120 void print_pajeCreateContainer(paje_event_t event)
122 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
135 void print_pajeDestroyContainer(paje_event_t event)
137 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
148 void print_pajeSetVariable(paje_event_t event)
150 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
162 void print_pajeAddVariable(paje_event_t event)
164 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
176 void print_pajeSubVariable(paje_event_t event)
178 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
190 void print_pajeSetState(paje_event_t event)
192 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
204 void print_pajePushState(paje_event_t event)
206 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
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);
224 fprintf(tracing_file, "0 ");
226 fprintf(tracing_file, "\n");
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);
235 fprintf(tracing_file, "0 ");
237 fprintf(tracing_file, "\n");
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);
249 void print_pajePopState(paje_event_t event)
251 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
262 void print_pajeResetState(paje_event_t event)
264 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
275 void print_pajeStartLink(paje_event_t event)
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);
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);
289 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
305 void print_pajeEndLink(paje_event_t event)
307 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);
320 void print_pajeNewEvent (paje_event_t event)
322 XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
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);
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);