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

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: Updating static methods and fixing test fakes. 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 '''
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 110
111 Args: 111 Args:
112 agents_with_config: List of tracing agents for this controller with the 112 agents_with_config: List of tracing agents for this controller with the
113 corresponding tracing configuration objects. 113 corresponding tracing configuration objects.
114 controller_config: Configuration options for the tracing controller. 114 controller_config: Configuration options for the tracing controller.
115 """ 115 """
116 self._child_agents = None 116 self._child_agents = None
117 self._child_agents_with_config = agents_with_config 117 self._child_agents_with_config = agents_with_config
118 self._controller_agent = TracingControllerAgent() 118 self._controller_agent = TracingControllerAgent()
119 self._controller_config = controller_config 119 self._controller_config = controller_config
120 self._connection_owner = None
120 self._trace_in_progress = False 121 self._trace_in_progress = False
121 self.all_results = None 122 self.all_results = None
122 123
124 # If we have a connection owner in the group, make an explicit reference to
125 # it. We need to collect data from it before any other collectors as it may
126 # re-enable USB for the subsequent collectors to collect their data.
127 # In addition, move this agent to the end of the list so it is the last
128 # to start (it could disable USB).
129 connection_owner_with_config = None
130 sorted_agents_with_config = []
131
132 for agent_with_config in self._child_agents_with_config:
133 if agent_with_config.agent.IsConnectionOwner():
134 if connection_owner_with_config is not None:
135 raise Exception("Multiple connection owners found.")
136 connection_owner_with_config = agent_with_config
137 else:
138 sorted_agents_with_config.append(agent_with_config)
139
140 if connection_owner_with_config:
141 sorted_agents_with_config.append(connection_owner_with_config)
142 self._connection_owner = connection_owner_with_config.agent
143 self._child_agents_with_config = sorted_agents_with_config
144
123 @property 145 @property
124 def get_child_agents(self): 146 def get_child_agents(self):
125 return self._child_agents 147 return self._child_agents
126 148
127 def StartTracing(self): 149 def StartTracing(self):
128 """Start tracing for all tracing agents. 150 """Start tracing for all tracing agents.
129 151
130 This function starts tracing for both the controller tracing agent 152 This function starts tracing for both the controller tracing agent
131 and the child tracing agents. 153 and the child tracing agents.
132 154
(...skipping 23 matching lines...) Expand all
156 succ_agents.append(agent) 178 succ_agents.append(agent)
157 else: 179 else:
158 print 'Agent %s not started.' % str(agent) 180 print 'Agent %s not started.' % str(agent)
159 181
160 # Print warning if all agents not started. 182 # Print warning if all agents not started.
161 na = len(self._child_agents_with_config) 183 na = len(self._child_agents_with_config)
162 ns = len(succ_agents) 184 ns = len(succ_agents)
163 if ns < na: 185 if ns < na:
164 print 'Warning: Only %d of %d tracing agents started.' % (ns, na) 186 print 'Warning: Only %d of %d tracing agents started.' % (ns, na)
165 self._child_agents = succ_agents 187 self._child_agents = succ_agents
188
166 return True 189 return True
167 190
168 def StopTracing(self): 191 def StopTracing(self):
169 """Issue clock sync marker and stop tracing for all tracing agents. 192 """Issue clock sync marker and stop tracing for all tracing agents.
170 193
171 This function stops both the controller tracing agent 194 This function stops both the controller tracing agent
172 and the child tracing agents. It issues a clock sync marker prior 195 and the child tracing agents. It issues a clock sync marker prior
173 to stopping tracing. 196 to stopping tracing.
174 197
175 Returns: 198 Returns:
176 Boolean indicating whether or not the stop tracing succeeded 199 Boolean indicating whether or not the stop tracing succeeded
177 for all agents. 200 for all agents.
178 """ 201 """
179 assert self._trace_in_progress, 'No trace in progress.' 202 assert self._trace_in_progress, 'No trace in progress.'
180 self._trace_in_progress = False 203 self._trace_in_progress = False
181 204
205 # Explicity stop the connection owner (if any) tracing first, as it may
206 # re-enable USB.
207 if self._connection_owner:
208 sync_id = GetUniqueSyncID()
209 if not self._connection_owner.StopCollectionWithClockSync(sync_id,
Zhen Wang 2017/09/28 01:58:48 Do we still need this |StopCollectionWithClockSync
210 ControllerAgentClockSync):
211 print 'Connection owner failed to stop collection.'
212
182 # Issue the clock sync marker and stop the child tracing agents. 213 # Issue the clock sync marker and stop the child tracing agents.
183 self._IssueClockSyncMarker() 214 self._IssueClockSyncMarker()
184 succ_agents = [] 215 succ_agents = []
185 for agent in self._child_agents: 216 for agent in self._child_agents:
186 if agent.StopAgentTracing(timeout=self._controller_config.timeout): 217 if agent.StopAgentTracing(timeout=self._controller_config.timeout):
187 succ_agents.append(agent) 218 succ_agents.append(agent)
188 else: 219 else:
189 print 'Agent %s not stopped.' % str(agent) 220 print 'Agent %s not stopped.' % str(agent)
190 221
191 # Stop the controller tracing agent. Controller tracing agent 222 # 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, 328 return TracingControllerConfig(options.output_file, options.trace_time,
298 options.write_json, 329 options.write_json,
299 options.link_assets, options.asset_dir, 330 options.link_assets, options.asset_dir,
300 options.timeout, options.collection_timeout, 331 options.timeout, options.collection_timeout,
301 options.device_serial_number, options.target) 332 options.device_serial_number, options.target)
302 333
303 def GetChromeStartupControllerConfig(options): 334 def GetChromeStartupControllerConfig(options):
304 return TracingControllerConfig(None, options.trace_time, 335 return TracingControllerConfig(None, options.trace_time,
305 options.write_json, None, None, None, None, 336 options.write_json, None, None, None, None,
306 None, None) 337 None, None)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698