Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Change perl script for valgrind path.
[simgrid.git] / src / instr / msg_process_instr.c
1 /* Copyright (c) 2010. The SimGrid Team.
2  * All rights reserved.                                                     */
3
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. */
6
7 #include "instr/private.h"
8
9 #ifdef HAVE_TRACING
10
11 static xbt_dict_t process_containers = NULL;
12
13 void __TRACE_msg_process_init (void)
14 {
15   process_containers = xbt_dict_new();
16 }
17
18 void __TRACE_msg_process_location (m_process_t process)
19 {
20   if (!(IS_TRACING_PROCESSES || IS_TRACING_VOLUME)) return;
21
22   char name[200], alias[200];
23   m_host_t host = MSG_process_get_host (process);
24   TRACE_process_container (process, name, 200);
25   TRACE_process_alias_container (process, host, alias, 200);
26
27   //check if process_alias container is already created
28   if (!xbt_dict_get_or_null (process_containers, alias)){
29     pajeCreateContainer (MSG_get_clock(), alias, "PROCESS", MSG_host_get_name(host), name);
30     if (IS_TRACING_PROCESSES) pajeSetState (MSG_get_clock(), "category", alias, process->category);
31     xbt_dict_set (process_containers, xbt_strdup(alias), xbt_strdup("1"), xbt_free);
32   }
33 }
34
35 void __TRACE_msg_process_present (m_process_t process)
36 {
37   if (!IS_TRACING_PROCESSES) return;
38
39   //updating presence state of this process location
40   char alias[200];
41   m_host_t host = MSG_process_get_host (process);
42   TRACE_process_alias_container (process, host, alias, 200);
43   pajePushState (MSG_get_clock(), "presence", alias, "presence");
44 }
45
46 /*
47  * TRACE_msg_set_process_category: tracing interface function
48  */
49 void TRACE_msg_set_process_category (m_process_t process, const char *category)
50 {
51   if (!IS_TRACING) return;
52
53   //set process category
54   process->category = xbt_strdup(category);
55
56   //create container of type "PROCESS" to indicate location
57   __TRACE_msg_process_location (process);
58   __TRACE_msg_process_present (process);
59
60   //create container of type "process" to indicate behavior
61   char name[200];
62   TRACE_process_container (process, name, 200);
63   if (IS_TRACING_PROCESSES) pajeCreateContainer (MSG_get_clock(), name, "process", category, name);
64   if (IS_TRACING_PROCESSES) pajeSetState (MSG_get_clock(), "process-state", name, "executing");
65 }
66
67 /*
68  * Instrumentation functions to trace MSG processes (m_process_t)
69  */
70 void TRACE_msg_process_change_host (m_process_t process, m_host_t old_host, m_host_t new_host)
71 {
72   if (!(IS_TRACING_PROCESSES || IS_TRACING_VOLUME) || !IS_TRACED(process)) return;
73
74   //disabling presence in old_host (__TRACE_msg_process_not_present)
75   char alias[200];
76   TRACE_process_alias_container (process, old_host, alias, 200);
77   if (IS_TRACING_PROCESSES) pajePopState (MSG_get_clock(), "presence", alias);
78
79   __TRACE_msg_process_location (process);
80   __TRACE_msg_process_present (process);
81 }
82
83 void TRACE_msg_process_kill (m_process_t process)
84 {
85   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
86
87   char name[200];
88   TRACE_process_container (process, name, 200);
89   pajeDestroyContainer (MSG_get_clock(), "process", name);
90 }
91
92 void TRACE_msg_process_suspend (m_process_t process)
93 {
94   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
95
96   char name[200];
97   TRACE_process_container (process, name, 200);
98   pajeSetState (MSG_get_clock(), "process-state", name, "suspend");
99 }
100
101 void TRACE_msg_process_resume (m_process_t process)
102 {
103   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
104
105   char name[200];
106   TRACE_process_container (process, name, 200);
107   pajeSetState (MSG_get_clock(), "process-state", name, "executing");
108 }
109
110 void TRACE_msg_process_sleep_in (m_process_t process)
111 {
112   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
113
114   char name[200];
115   TRACE_process_container (process, name, 200);
116   pajeSetState (MSG_get_clock(), "process-state", name, "sleep");
117 }
118
119 void TRACE_msg_process_sleep_out (m_process_t process)
120 {
121   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
122
123   char name[200];
124   TRACE_process_container (process, name, 200);
125   pajeSetState (MSG_get_clock(), "process-state", name, "executing");
126 }
127
128 void TRACE_msg_process_end (m_process_t process)
129 {
130   if (!IS_TRACED(process)) return;
131
132   char name[200], alias[200];
133   m_host_t host = MSG_process_get_host (process);
134   TRACE_process_container (process, name, 200);
135   TRACE_process_alias_container (process, host, alias, 200);
136   if (IS_TRACING_PROCESSES) pajeDestroyContainer (MSG_get_clock(), "process", name);
137   if (IS_TRACING_PROCESSES) pajeDestroyContainer (MSG_get_clock(), "PROCESS", alias);
138 }
139
140 #endif