Logo AND Algorithmique Numérique Distribuée

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