Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
86875a41b77a37c4ad3443cfbb8d57cc61458161
[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_new (char, strlen (category)+1);
55   strncpy (process->category, category, strlen(category)+1);
56
57   //create container of type "PROCESS" to indicate location
58   __TRACE_msg_process_location (process);
59   __TRACE_msg_process_present (process);
60
61   //create container of type "process" to indicate behavior
62   char name[200];
63   TRACE_process_container (process, name, 200);
64   if (IS_TRACING_PROCESSES) pajeCreateContainer (MSG_get_clock(), name, "process", category, name);
65   if (IS_TRACING_PROCESSES) pajeSetState (MSG_get_clock(), "process-state", name, "executing");
66 }
67
68 /*
69  * Instrumentation functions to trace MSG processes (m_process_t)
70  */
71 void TRACE_msg_process_change_host (m_process_t process, m_host_t old_host, m_host_t new_host)
72 {
73   if (!(IS_TRACING_PROCESSES || IS_TRACING_VOLUME) || !IS_TRACED(process)) return;
74
75   //disabling presence in old_host (__TRACE_msg_process_not_present)
76   char alias[200];
77   TRACE_process_alias_container (process, old_host, alias, 200);
78   if (IS_TRACING_PROCESSES) pajePopState (MSG_get_clock(), "presence", alias);
79
80   __TRACE_msg_process_location (process);
81   __TRACE_msg_process_present (process);
82 }
83
84 void TRACE_msg_process_kill (m_process_t process)
85 {
86   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
87
88   char name[200];
89   TRACE_process_container (process, name, 200);
90   pajeDestroyContainer (MSG_get_clock(), "process", name);
91 }
92
93 void TRACE_msg_process_suspend (m_process_t process)
94 {
95   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
96
97   char name[200];
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   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
105
106   char name[200];
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   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
114
115   char name[200];
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   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
123
124   char name[200];
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   if (!IS_TRACED(process)) return;
132
133   char name[200], alias[200];
134   m_host_t host = MSG_process_get_host (process);
135   TRACE_process_container (process, name, 200);
136   TRACE_process_alias_container (process, host, alias, 200);
137   if (IS_TRACING_PROCESSES) pajeDestroyContainer (MSG_get_clock(), "process", name);
138   if (IS_TRACING_PROCESSES) pajeDestroyContainer (MSG_get_clock(), "PROCESS", alias);
139 }
140
141 #endif