Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
bf67050a1d3483142310a89e3d18673751ac245b
[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   if (!IS_TRACING_PROCESSES) return;
27
28   char name[200], alias[200];
29   m_host_t 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     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 void __TRACE_msg_process_present (m_process_t process)
42 {
43   if (!IS_TRACING_PROCESSES) return;
44
45   //updating presence state of this process location
46   char alias[200];
47   m_host_t host = MSG_process_get_host (process);
48   TRACE_process_alias_container (process, host, alias, 200);
49   pajePushState (MSG_get_clock(), "presence", alias, "presence");
50 }
51
52 /*
53  * TRACE_msg_set_process_category: tracing interface function
54  */
55 void TRACE_msg_set_process_category (m_process_t process, const char *category)
56 {
57   if (!IS_TRACING) return;
58
59   //set process category
60   process->category = xbt_new (char, strlen (category)+1);
61   strncpy (process->category, category, strlen(category)+1);
62
63   //create container of type "PROCESS" to indicate location
64   __TRACE_msg_process_location (process);
65   __TRACE_msg_process_present (process);
66
67   //create container of type "process" to indicate behavior
68   char name[200];
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   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
80
81   //disabling presence in old_host (__TRACE_msg_process_not_present)
82   char alias[200];
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   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
93
94   char name[200];
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 {
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, "suspend");
106 }
107
108 void TRACE_msg_process_resume (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, "executing");
115 }
116
117 void TRACE_msg_process_sleep_in (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, "sleep");
124 }
125
126 void TRACE_msg_process_sleep_out (m_process_t process)
127 {
128   if (!IS_TRACING_PROCESSES || !IS_TRACED(process)) return;
129
130   char name[200];
131   TRACE_process_container (process, name, 200);
132   pajeSetState (MSG_get_clock(), "process-state", name, "executing");
133 }
134
135 void TRACE_msg_process_end (m_process_t process)
136 {
137   if (!IS_TRACED(process)) return;
138
139   char name[200], alias[200];
140   m_host_t 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