Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: systrace/systrace/tracing_controller.py

Issue 3018533002: Implementing a Monsoon power monitor trace agent, utilizing the UI infrastructure that the BattOr a…
Patch Set: Fixing test failures. Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 2
3 # Copyright 2016 The Chromium Authors. All rights reserved. 3 # Copyright 2016 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 '''Tracing controller class. This class manages 7 '''Tracing controller class. This class manages
8 multiple tracing agents and collects data from all of them. It also 8 multiple tracing agents and collects data from all of them. It also
9 manages the clock sync process. 9 manages the clock sync process.
10 ''' 10 '''
11 11
12 import ast 12 import ast
13 import json 13 import json
14 import sys 14 import sys
15 import py_utils 15 import py_utils
16 import tempfile 16 import tempfile
17 import uuid 17 import uuid
18 18
19 from systrace import trace_result 19 from systrace import trace_result
20 from systrace import tracing_agents 20 from systrace import tracing_agents
21 from systrace.tracing_agents import monsoon_agent
21 from py_trace_event import trace_event 22 from py_trace_event import trace_event
22 23
23 24
24 TRACE_DATA_CONTROLLER_NAME = 'systraceController' 25 TRACE_DATA_CONTROLLER_NAME = 'systraceController'
25 26
26 27
27 def ControllerAgentClockSync(issue_ts, name): 28 def ControllerAgentClockSync(issue_ts, name):
28 """Record the clock sync marker for controller tracing agent. 29 """Record the clock sync marker for controller tracing agent.
29 30
30 Unlike with the other tracing agents, the tracing controller should not 31 Unlike with the other tracing agents, the tracing controller should not
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 111
111 Args: 112 Args:
112 agents_with_config: List of tracing agents for this controller with the 113 agents_with_config: List of tracing agents for this controller with the
113 corresponding tracing configuration objects. 114 corresponding tracing configuration objects.
114 controller_config: Configuration options for the tracing controller. 115 controller_config: Configuration options for the tracing controller.
115 """ 116 """
116 self._child_agents = None 117 self._child_agents = None
117 self._child_agents_with_config = agents_with_config 118 self._child_agents_with_config = agents_with_config
118 self._controller_agent = TracingControllerAgent() 119 self._controller_agent = TracingControllerAgent()
119 self._controller_config = controller_config 120 self._controller_config = controller_config
121 self._monsoon_agent = None
120 self._trace_in_progress = False 122 self._trace_in_progress = False
121 self.all_results = None 123 self.all_results = None
122 124
125 # If we have a monsoon power monitor controller in the group, make an
Chris Craik 2017/09/19 18:47:02 I'm not especially happy with this, but I don't ha
Zhen Wang 2017/09/19 23:53:50 I see --usbpassthrough is set to off for monsoon.
126 # explicit reference to it. We need to collect data from it before any
127 # other collectors as it re-enables USB for the subsequent collectors to
128 # collect their data.
129 # In addition, move this agent to the end of the list so it is the last
130 # to start (it disables USB).
131 monsoon_agent_with_config = None
132 sorted_agents_with_config = []
133 for agent_with_config in self._child_agents_with_config:
134 if isinstance(agent_with_config.agent, monsoon_agent.MonsoonTracingAgent):
135 monsoon_agent_with_config = agent_with_config
136 else:
137 sorted_agents_with_config.append(agent_with_config)
138 if monsoon_agent_with_config:
139 sorted_agents_with_config.append(monsoon_agent_with_config)
140 self._monsoon_agent = monsoon_agent_with_config.agent
141 self._child_agents_with_config = sorted_agents_with_config
142
123 @property 143 @property
124 def get_child_agents(self): 144 def get_child_agents(self):
125 return self._child_agents 145 return self._child_agents
126 146
127 def StartTracing(self): 147 def StartTracing(self):
128 """Start tracing for all tracing agents. 148 """Start tracing for all tracing agents.
129 149
130 This function starts tracing for both the controller tracing agent 150 This function starts tracing for both the controller tracing agent
131 and the child tracing agents. 151 and the child tracing agents.
132 152
(...skipping 23 matching lines...) Expand all
156 succ_agents.append(agent) 176 succ_agents.append(agent)
157 else: 177 else:
158 print 'Agent %s not started.' % str(agent) 178 print 'Agent %s not started.' % str(agent)
159 179
160 # Print warning if all agents not started. 180 # Print warning if all agents not started.
161 na = len(self._child_agents_with_config) 181 na = len(self._child_agents_with_config)
162 ns = len(succ_agents) 182 ns = len(succ_agents)
163 if ns < na: 183 if ns < na:
164 print 'Warning: Only %d of %d tracing agents started.' % (ns, na) 184 print 'Warning: Only %d of %d tracing agents started.' % (ns, na)
165 self._child_agents = succ_agents 185 self._child_agents = succ_agents
186
166 return True 187 return True
167 188
168 def StopTracing(self): 189 def StopTracing(self):
169 """Issue clock sync marker and stop tracing for all tracing agents. 190 """Issue clock sync marker and stop tracing for all tracing agents.
170 191
171 This function stops both the controller tracing agent 192 This function stops both the controller tracing agent
172 and the child tracing agents. It issues a clock sync marker prior 193 and the child tracing agents. It issues a clock sync marker prior
173 to stopping tracing. 194 to stopping tracing.
174 195
175 Returns: 196 Returns:
176 Boolean indicating whether or not the stop tracing succeeded 197 Boolean indicating whether or not the stop tracing succeeded
177 for all agents. 198 for all agents.
178 """ 199 """
179 assert self._trace_in_progress, 'No trace in progress.' 200 assert self._trace_in_progress, 'No trace in progress.'
180 self._trace_in_progress = False 201 self._trace_in_progress = False
181 202
203 # Explicity stop Monsoon tracing first, as it re-enables USB.
204 if self._monsoon_agent:
205 sync_id = GetUniqueSyncID()
206 if not self._monsoon_agent.StopCollectionWithClockSync(sync_id,
207 ControllerAgentClockSync):
208 print 'Monsoon agent failed to stop collection.'
209
182 # Issue the clock sync marker and stop the child tracing agents. 210 # Issue the clock sync marker and stop the child tracing agents.
183 self._IssueClockSyncMarker() 211 self._IssueClockSyncMarker()
184 succ_agents = [] 212 succ_agents = []
185 for agent in self._child_agents: 213 for agent in self._child_agents:
186 if agent.StopAgentTracing(timeout=self._controller_config.timeout): 214 if agent.StopAgentTracing(timeout=self._controller_config.timeout):
187 succ_agents.append(agent) 215 succ_agents.append(agent)
188 else: 216 else:
189 print 'Agent %s not stopped.' % str(agent) 217 print 'Agent %s not stopped.' % str(agent)
190 218
191 # Stop the controller tracing agent. Controller tracing agent 219 # Stop the controller tracing agent. Controller tracing agent
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 return TracingControllerConfig(options.output_file, options.trace_time, 325 return TracingControllerConfig(options.output_file, options.trace_time,
298 options.write_json, 326 options.write_json,
299 options.link_assets, options.asset_dir, 327 options.link_assets, options.asset_dir,
300 options.timeout, options.collection_timeout, 328 options.timeout, options.collection_timeout,
301 options.device_serial_number, options.target) 329 options.device_serial_number, options.target)
302 330
303 def GetChromeStartupControllerConfig(options): 331 def GetChromeStartupControllerConfig(options):
304 return TracingControllerConfig(None, options.trace_time, 332 return TracingControllerConfig(None, options.trace_time,
305 options.write_json, None, None, None, None, 333 options.write_json, None, None, None, None,
306 None, None) 334 None, None)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698