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 static xbt_dict_t process_containers = NULL;
13 char *TRACE_process_alias_container(m_process_t process, m_host_t host,
14 char *output, int len)
17 snprintf(output, len, "%p-%p", process, host);
24 char *TRACE_process_container(m_process_t process, char *output, int len)
27 snprintf(output, len, "%s-%p", MSG_process_get_name(process), process);
34 void TRACE_msg_process_alloc(void)
36 process_containers = xbt_dict_new();
39 void TRACE_msg_process_release(void)
41 xbt_dict_free(&process_containers);
44 static void TRACE_msg_process_location(m_process_t process)
46 char name[200], alias[200];
48 if (!(TRACE_msg_process_is_enabled() || TRACE_msg_volume_is_enabled()))
51 host = MSG_process_get_host(process);
52 TRACE_process_container(process, name, 200);
53 TRACE_process_alias_container(process, host, alias, 200);
55 //check if process_alias container is already created
56 if (!xbt_dict_get_or_null(process_containers, alias)) {
57 pajeCreateContainer(MSG_get_clock(), alias, "PROCESS",
58 MSG_host_get_name(host), name);
59 if (TRACE_msg_process_is_enabled())
60 pajeSetState(MSG_get_clock(), "category", alias, process->category);
61 xbt_dict_set(process_containers, xbt_strdup(alias), xbt_strdup("1"),
66 static void TRACE_msg_process_present(m_process_t process)
70 if (!TRACE_msg_process_is_enabled())
73 //updating presence state of this process location
74 host = MSG_process_get_host(process);
75 TRACE_process_alias_container(process, host, alias, 200);
76 pajePushState(MSG_get_clock(), "presence", alias, "presence");
80 * TRACE_msg_set_process_category: tracing interface function
82 void TRACE_msg_set_process_category(m_process_t process,
86 if (!TRACE_is_active())
89 //set process category
90 process->category = xbt_strdup(category);
92 //create container of type "PROCESS" to indicate location
93 TRACE_msg_process_location(process);
94 TRACE_msg_process_present(process);
96 //create container of type "process" to indicate behavior
97 TRACE_process_container(process, name, 200);
98 if (TRACE_msg_process_is_enabled())
99 pajeCreateContainer(MSG_get_clock(), name, "process", category, name);
100 if (TRACE_msg_process_is_enabled())
101 pajeSetState(MSG_get_clock(), "process-state", name, "executing");
105 * Instrumentation functions to trace MSG processes (m_process_t)
107 void TRACE_msg_process_change_host(m_process_t process, m_host_t old_host,
111 if (!(TRACE_msg_process_is_enabled() || TRACE_msg_volume_is_enabled()) || !process->category)
114 //disabling presence in old_host (__TRACE_msg_process_not_present)
115 TRACE_process_alias_container(process, old_host, alias, 200);
116 if (TRACE_msg_process_is_enabled())
117 pajePopState(MSG_get_clock(), "presence", alias);
119 TRACE_msg_process_location(process);
120 TRACE_msg_process_present(process);
123 void TRACE_msg_process_kill(m_process_t process)
126 if (!TRACE_msg_process_is_enabled() || !process->category)
129 TRACE_process_container(process, name, 200);
130 pajeDestroyContainer(MSG_get_clock(), "process", name);
133 void TRACE_msg_process_suspend(m_process_t process)
136 if (!TRACE_msg_process_is_enabled() || !process->category)
139 TRACE_process_container(process, name, 200);
140 pajeSetState(MSG_get_clock(), "process-state", name, "suspend");
143 void TRACE_msg_process_resume(m_process_t process)
146 if (!TRACE_msg_process_is_enabled() || !process->category)
149 TRACE_process_container(process, name, 200);
150 pajeSetState(MSG_get_clock(), "process-state", name, "executing");
153 void TRACE_msg_process_sleep_in(m_process_t process)
156 if (!TRACE_msg_process_is_enabled() || !process->category)
159 TRACE_process_container(process, name, 200);
160 pajeSetState(MSG_get_clock(), "process-state", name, "sleep");
163 void TRACE_msg_process_sleep_out(m_process_t process)
166 if (!TRACE_msg_process_is_enabled() || !process->category)
169 TRACE_process_container(process, name, 200);
170 pajeSetState(MSG_get_clock(), "process-state", name, "executing");
173 void TRACE_msg_process_end(m_process_t process)
175 char name[200], alias[200];
176 m_host_t host = NULL;
177 if (!!process->category)
180 host = MSG_process_get_host(process);
181 TRACE_process_container(process, name, 200);
182 TRACE_process_alias_container(process, host, alias, 200);
183 if (TRACE_msg_process_is_enabled())
184 pajeDestroyContainer(MSG_get_clock(), "process", name);
185 if (TRACE_msg_process_is_enabled())
186 pajeDestroyContainer(MSG_get_clock(), "PROCESS", alias);
189 #endif /* HAVE_TRACING */