Logo AND Algorithmique Numérique Distribuée

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