1 /* Copyright (c) 2010. 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"
11 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje, instr, "Paje tracing event system");
13 static FILE *tracing_file = NULL;
15 static int pajeDefineContainerTypeId = 0;
16 static int pajeDefineStateTypeId = 1;
17 static int pajeDefineEntityValueId = 2;
18 static int pajeDefineEventTypeId = 3;
19 static int pajeDefineLinkTypeId = 4;
20 static int pajeCreateContainerId = 5;
21 static int pajeSetStateId = 6;
23 static int pajePopStateId = 8;
24 static int pajeDestroyContainerId = 9;
27 static int pajeStartLinkId = 12;
28 static int pajeEndLinkId = 13;
34 static int pajePushStateId = 19;
35 static int pajeDefineEventTypeWithColorId = 20;
36 static int pajeDefineVariableTypeWithColorId = 21;
37 static int pajeSetVariableId = 22;
38 static int pajeAddVariableId = 23;
39 static int pajeSubVariableId = 24;
40 static int pajeDefineVariableTypeId = 25;
41 static int pajeStartLinkWithVolumeId = 26;
42 static int pajeNewEventId = 27;
44 #define TRACE_LINE_SIZE 1000
46 void TRACE_paje_start(void)
48 char *filename = TRACE_get_filename();
49 tracing_file = fopen(filename, "w");
50 xbt_assert1 (tracing_file != NULL, "Tracefile %s could not be opened for writing.", filename);
52 DEBUG1("Filename %s is open for writing", filename);
55 TRACE_paje_create_header();
58 void TRACE_paje_end(void)
61 char *filename = TRACE_get_filename();
62 DEBUG1("Filename %s is closed", filename);
65 void TRACE_paje_create_header(void)
67 DEBUG0 ("Define paje header");
68 fprintf(tracing_file, "\
69 %%EventDef PajeDefineContainerType %d \n\
71 %% ContainerType string \n\
74 %%EventDef PajeDefineStateType %d \n\
76 %% ContainerType string \n\
79 %%EventDef PajeDefineEntityValue %d \n\
81 %% EntityType string \n\
84 %%EventDef PajeDefineEventType %d \n\
86 %% EntityType string \n\
90 %%EventDef PajeDefineEventType %d \n\
92 %% EntityType string \n\
95 %%EventDef PajeDefineLinkType %d \n\
97 %% ContainerType string \n\
98 %% SourceContainerType string \n\
99 %% DestContainerType string \n\
102 %%EventDef PajeCreateContainer %d \n\
106 %% Container string \n\
109 %%EventDef PajeDestroyContainer %d \n\
112 %% Container string \n\
114 %%EventDef PajeSetState %d \n\
116 %% EntityType string \n\
117 %% Container string \n\
120 %%EventDef PajePopState %d \n\
122 %% EntityType string \n\
123 %% Container string \n\
125 %%EventDef PajeStartLink %d \n\
127 %% EntityType string \n\
128 %% Container string \n\
130 %% SourceContainer string \n\
133 %%EventDef PajeEndLink %d \n\
135 %% EntityType string \n\
136 %% Container string \n\
138 %% DestContainer string \n\
141 %%EventDef PajePushState %d \n\
143 %% EntityType string \n\
144 %% Container string \n\
147 %%EventDef PajeSetVariable %d \n\
149 %% EntityType string \n\
150 %% Container string \n\
153 %%EventDef PajeAddVariable %d \n\
155 %% EntityType string \n\
156 %% Container string \n\
159 %%EventDef PajeSubVariable %d \n\
161 %% EntityType string \n\
162 %% Container string \n\
165 %%EventDef PajeDefineVariableType %d \n\
167 %% ContainerType string \n\
170 %%EventDef PajeDefineVariableType %d \n\
172 %% ContainerType string \n\
176 %%EventDef PajeStartLink %d \n\
178 %% EntityType string \n\
179 %% Container string \n\
181 %% SourceContainer string \n\
185 %%EventDef PajeNewEvent %d \n\
187 %% EntityType string \n\
188 %% Container string \n\
190 %%EndEventDef\n", pajeDefineContainerTypeId, pajeDefineStateTypeId, pajeDefineEntityValueId, pajeDefineEventTypeWithColorId, pajeDefineEventTypeId, pajeDefineLinkTypeId, pajeCreateContainerId, pajeDestroyContainerId, pajeSetStateId, pajePopStateId, pajeStartLinkId, pajeEndLinkId, pajePushStateId, pajeSetVariableId, pajeAddVariableId, pajeSubVariableId, pajeDefineVariableTypeId, pajeDefineVariableTypeWithColorId, pajeStartLinkWithVolumeId, pajeNewEventId);
193 /* internal to this file */
194 static void __pajeCreateContainer(char *output, int len, int eventid,
195 double time, const char *alias,
196 const char *type, const char *container,
200 snprintf(output, len, "%d 0 %s %s %s %s", eventid,
201 alias, type, container, name);
203 snprintf(output, len, "%d %lf %s %s %s %s", eventid, time,
204 alias, type, container, name);
208 static void __pajeSetState(char *output, int len, int eventid, double time,
209 const char *entityType, const char *container,
213 snprintf(output, len, "%d 0 %s %s %s", eventid, entityType,
216 snprintf(output, len, "%d %lf %s %s %s", eventid, time, entityType,
221 static void __pajeSetVariable(char *output, int len, int eventid,
222 double time, const char *entityType,
223 const char *container, const char *value)
226 snprintf(output, len, "%d 0 %s %s %s", eventid, entityType,
229 snprintf(output, len, "%d %lf %s %s %s", eventid, time, entityType,
234 static void __pajeStartLink(char *output, int len, int eventid,
235 double time, const char *entityType,
236 const char *container, const char *value,
237 const char *sourceContainer, const char *key)
240 snprintf(output, len, "%d 0 %s %s %s %s %s", eventid, entityType,
241 container, value, sourceContainer, key);
243 snprintf(output, len, "%d %lf %s %s %s %s %s", eventid, time, entityType,
244 container, value, sourceContainer, key);
248 /* internal do the instrumentation module */
249 void pajeDefineContainerType(const char *alias, const char *containerType,
252 fprintf(tracing_file, "%d %s %s %s\n", pajeDefineContainerTypeId, alias,
253 containerType, name);
256 void pajeDefineStateType(const char *alias, const char *containerType,
259 fprintf(tracing_file, "%d %s %s %s\n", pajeDefineStateTypeId, alias,
260 containerType, name);
263 void pajeDefineEventTypeWithColor(const char *alias, const char *containerType,
264 const char *name, const char *color)
266 fprintf(tracing_file, "%d %s %s %s %s\n", pajeDefineEventTypeWithColorId, alias,
267 containerType, name, color);
270 void pajeDefineEventType(const char *alias, const char *containerType,
273 fprintf(tracing_file, "%d %s %s %s\n", pajeDefineEventTypeId, alias,
274 containerType, name);
277 void pajeDefineLinkType(const char *alias, const char *containerType,
278 const char *sourceContainerType,
279 const char *destContainerType, const char *name)
281 fprintf(tracing_file, "%d %s %s %s %s %s\n", pajeDefineLinkTypeId, alias,
282 containerType, sourceContainerType, destContainerType, name);
285 void pajeCreateContainer(double time, const char *alias, const char *type,
286 const char *container, const char *name)
288 char line[TRACE_LINE_SIZE];
289 __pajeCreateContainer(line, TRACE_LINE_SIZE, pajeCreateContainerId, time,
290 alias, type, container, name);
291 fprintf(tracing_file, "%s\n", line);
294 void pajeDestroyContainer(double time, const char *type,
295 const char *container)
298 fprintf(tracing_file, "%d 0 %s %s\n", pajeDestroyContainerId,
301 fprintf(tracing_file, "%d %lf %s %s\n", pajeDestroyContainerId, time,
306 void pajeSetState(double time, const char *entityType,
307 const char *container, const char *value)
309 char line[TRACE_LINE_SIZE];
310 __pajeSetState(line, TRACE_LINE_SIZE, pajeSetStateId, time, entityType,
312 fprintf(tracing_file, "%s\n", line);
315 void pajePushState(double time, const char *entityType,
316 const char *container, const char *value)
318 char line[TRACE_LINE_SIZE];
319 __pajeSetState(line, TRACE_LINE_SIZE, pajePushStateId, time, entityType,
321 fprintf(tracing_file, "%s\n", line);
324 void pajePopState(double time, const char *entityType,
325 const char *container)
327 fprintf(tracing_file, "%d %lf %s %s\n", pajePopStateId, time, entityType,
331 void pajeStartLink(double time, const char *entityType,
332 const char *container, const char *value,
333 const char *sourceContainer, const char *key)
335 char line[TRACE_LINE_SIZE];
336 __pajeStartLink(line, TRACE_LINE_SIZE, pajeStartLinkId, time, entityType,
337 container, value, sourceContainer, key);
338 fprintf(tracing_file, "%s\n", line);
341 void pajeStartLinkWithVolume(double time, const char *entityType,
342 const char *container, const char *value,
343 const char *sourceContainer, const char *key,
346 char line[TRACE_LINE_SIZE];
347 __pajeStartLink(line, TRACE_LINE_SIZE, pajeStartLinkWithVolumeId, time,
348 entityType, container, value, sourceContainer, key);
349 fprintf(tracing_file, "%s %f\n", line, volume);
352 void pajeEndLink(double time, const char *entityType,
353 const char *container, const char *value,
354 const char *destContainer, const char *key)
357 fprintf(tracing_file, "%d 0 %s %s %s %s %s\n", pajeEndLinkId,
358 entityType, container, value, destContainer, key);
360 fprintf(tracing_file, "%d %lf %s %s %s %s %s\n", pajeEndLinkId, time,
361 entityType, container, value, destContainer, key);
365 void pajeDefineVariableType(const char *alias, const char *containerType,
368 fprintf(tracing_file, "%d %s %s %s\n", pajeDefineVariableTypeId, alias,
369 containerType, name);
372 void pajeDefineVariableTypeWithColor(const char *alias, const char *containerType,
373 const char *name, const char *color)
375 fprintf(tracing_file, "%d %s %s %s \"%s\"\n", pajeDefineVariableTypeWithColorId, alias,
376 containerType, name, color);
379 void pajeSetVariable(double time, const char *entityType,
380 const char *container, const char *value)
382 char line[TRACE_LINE_SIZE];
383 __pajeSetVariable(line, TRACE_LINE_SIZE, pajeSetVariableId, time,
384 entityType, container, value);
385 fprintf(tracing_file, "%s\n", line);
388 void pajeAddVariable(double time, const char *entityType,
389 const char *container, const char *value)
391 char line[TRACE_LINE_SIZE];
392 __pajeSetVariable(line, TRACE_LINE_SIZE, pajeAddVariableId, time,
393 entityType, container, value);
394 fprintf(tracing_file, "%s\n", line);
397 void pajeSubVariable(double time, const char *entityType,
398 const char *container, const char *value)
400 char line[TRACE_LINE_SIZE];
401 __pajeSetVariable(line, TRACE_LINE_SIZE, pajeSubVariableId, time,
402 entityType, container, value);
403 fprintf(tracing_file, "%s\n", line);
406 void pajeNewEvent(double time, const char *entityType,
407 const char *container, const char *value)
410 fprintf(tracing_file, "%d 0 %s %s %s\n", pajeNewEventId,
411 entityType, container, value);
413 fprintf(tracing_file, "%d %lf %s %s %s\n", pajeNewEventId, time,
414 entityType, container, value);
418 #endif /* HAVE_TRACING */