Logo AND Algorithmique Numérique Distribuée

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