Chromium Code Reviews| Index: systrace/systrace/tracing_controller.py |
| diff --git a/systrace/systrace/tracing_controller.py b/systrace/systrace/tracing_controller.py |
| index d0d2d7c3735988f4b4904a0a980ae87baeee86c7..368f9cd68acad60c7dc82661577c921114c63889 100644 |
| --- a/systrace/systrace/tracing_controller.py |
| +++ b/systrace/systrace/tracing_controller.py |
| @@ -117,9 +117,31 @@ class TracingController(object): |
| self._child_agents_with_config = agents_with_config |
| self._controller_agent = TracingControllerAgent() |
| self._controller_config = controller_config |
| + self._connection_owner = None |
| self._trace_in_progress = False |
| self.all_results = None |
| + # If we have a connection owner in the group, make an explicit reference to |
| + # it. We need to collect data from it before any other collectors as it may |
| + # re-enable USB for the subsequent collectors to collect their data. |
| + # In addition, move this agent to the end of the list so it is the last |
| + # to start (it could disable USB). |
| + connection_owner_with_config = None |
| + sorted_agents_with_config = [] |
| + |
| + for agent_with_config in self._child_agents_with_config: |
| + if agent_with_config.agent.IsConnectionOwner(): |
| + if connection_owner_with_config is not None: |
| + raise Exception("Multiple connection owners found.") |
| + connection_owner_with_config = agent_with_config |
| + else: |
| + sorted_agents_with_config.append(agent_with_config) |
| + |
| + if connection_owner_with_config: |
| + sorted_agents_with_config.append(connection_owner_with_config) |
| + self._connection_owner = connection_owner_with_config.agent |
| + self._child_agents_with_config = sorted_agents_with_config |
| + |
| @property |
| def get_child_agents(self): |
| return self._child_agents |
| @@ -163,6 +185,7 @@ class TracingController(object): |
| if ns < na: |
| print 'Warning: Only %d of %d tracing agents started.' % (ns, na) |
| self._child_agents = succ_agents |
| + |
| return True |
| def StopTracing(self): |
| @@ -179,6 +202,14 @@ class TracingController(object): |
| assert self._trace_in_progress, 'No trace in progress.' |
| self._trace_in_progress = False |
| + # Explicity stop the connection owner (if any) tracing first, as it may |
| + # re-enable USB. |
| + if self._connection_owner: |
| + sync_id = GetUniqueSyncID() |
| + if not self._connection_owner.StopCollectionWithClockSync(sync_id, |
|
Zhen Wang
2017/09/28 01:58:48
Do we still need this |StopCollectionWithClockSync
|
| + ControllerAgentClockSync): |
| + print 'Connection owner failed to stop collection.' |
| + |
| # Issue the clock sync marker and stop the child tracing agents. |
| self._IssueClockSyncMarker() |
| succ_agents = [] |