Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
proper use of the HAVE_TRACING variable defined by Cmake through -Dtracing=on
[simgrid.git] / src / instr / msg_process_instr.c
1 /*
2  * msg_process_instr.c
3  *
4  *  Created on: Feb 24, 2010
5  *      Author: Lucas Schnorr
6  *     License: This program is free software; you can redistribute
7  *              it and/or modify it under the terms of the license
8  *              (GNU LGPL) which comes with this package.
9  *
10  *     Copyright (c) 2009 The SimGrid team.
11  */
12
13 #include "instr/private.h"
14
15 #ifdef HAVE_TRACING
16
17 static xbt_dict_t process_containers = NULL;
18
19 void __TRACE_msg_process_init (void)
20 {
21   process_containers = xbt_dict_new();
22 }
23
24 void __TRACE_msg_process_location (m_process_t process)
25 {
26   char name[200], alias[200];
27   m_host_t host = MSG_process_get_host (process);
28   TRACE_process_container (process, name, 200);
29   TRACE_process_alias_container (process, host, alias, 200);
30
31   //check if process_alias container is already created
32   if (!xbt_dict_get_or_null (process_containers, alias)){
33     if (IS_TRACING_PROCESSES) pajeCreateContainer (MSG_get_clock(), alias, "PROCESS", MSG_host_get_name(host), name);
34     if (IS_TRACING_PROCESSES) pajePushState (MSG_get_clock(), "presence", alias, "1");
35     xbt_dict_set (process_containers, xbt_strdup(alias), xbt_strdup("1"), xbt_free);
36   }
37 }
38
39 /*
40  * TRACE_msg_set_process_category: tracing interface function
41  */
42 void TRACE_msg_set_process_category (m_process_t process, const char *category)
43 {
44   if (!IS_TRACING) return;
45
46   //set process category
47   process->category = xbt_new (char, strlen (category)+1);
48   strncpy (process->category, category, strlen(category)+1);
49
50   //create container of type "PROCESS" to indicate location
51   __TRACE_msg_process_location (process);
52
53   //create container of type "process" to indicate behavior
54   char name[200];
55   TRACE_process_container (process, name, 200);
56   if (IS_TRACING_PROCESSES) pajeCreateContainer (MSG_get_clock(), name, "process", category, name);
57   if (IS_TRACING_PROCESSES) pajeSetState (MSG_get_clock(), "process-state", name, "executing");
58 }
59
60 /*
61  * Instrumentation functions to trace MSG processes (m_process_t)
62  */
63 void TRACE_msg_process_change_host (m_process_t process, m_host_t old_host, m_host_t new_host)
64 {
65   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
66
67   char alias[200];
68   TRACE_process_alias_container (process, old_host, alias, 200);
69   if (IS_TRACING_PROCESSES) pajePopState (MSG_get_clock(), "presence", alias);
70
71   __TRACE_msg_process_location (process);
72   TRACE_process_alias_container (process, new_host, alias, 200);
73   if (IS_TRACING_PROCESSES) pajePushState (MSG_get_clock(), "presence", alias, "1");
74 }
75
76 void TRACE_msg_process_kill (m_process_t process)
77 {
78   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
79
80   char name[200];
81   TRACE_process_container (process, name, 200);
82   pajeDestroyContainer (MSG_get_clock(), "process", name);
83 }
84
85 void TRACE_msg_process_suspend (m_process_t process)
86 {
87   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
88
89   char name[200];
90   TRACE_process_container (process, name, 200);
91   pajeSetState (MSG_get_clock(), "process-state", name, "suspend");
92 }
93
94 void TRACE_msg_process_resume (m_process_t process)
95 {
96   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
97
98   char name[200];
99   TRACE_process_container (process, name, 200);
100   pajeSetState (MSG_get_clock(), "process-state", name, "executing");
101 }
102
103 void TRACE_msg_process_sleep_in (m_process_t process)
104 {
105   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
106
107   char name[200];
108   TRACE_process_container (process, name, 200);
109   pajeSetState (MSG_get_clock(), "process-state", name, "sleep");
110 }
111
112 void TRACE_msg_process_sleep_out (m_process_t process)
113 {
114   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
115
116   char name[200];
117   TRACE_process_container (process, name, 200);
118   pajeSetState (MSG_get_clock(), "process-state", name, "executing");
119 }
120
121 void TRACE_msg_process_end (m_process_t process)
122 {
123   if (!IS_TRACED(process)) return;
124
125   char name[200], alias[200];
126   m_host_t host = MSG_process_get_host (process);
127   TRACE_process_container (process, name, 200);
128   TRACE_process_alias_container (process, host, alias, 200);
129   if (IS_TRACING_PROCESSES) pajeDestroyContainer (MSG_get_clock(), "process", name);
130   if (IS_TRACING_PROCESSES) pajeDestroyContainer (MSG_get_clock(), "PROCESS", alias);
131 }
132
133 #endif