1# Copyright 2016 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5from systrace.tracing_agents import atrace_agent 6from telemetry.internal.platform import tracing_agent 7from tracing.trace_data import trace_data 8 9from devil.android.sdk import version_codes 10 11 12class AtraceTracingAgent(tracing_agent.TracingAgent): 13 def __init__(self, platform_backend): 14 super(AtraceTracingAgent, self).__init__(platform_backend) 15 self._device = platform_backend.device 16 self._categories = None 17 self._atrace_agent = atrace_agent.AtraceAgent( 18 platform_backend.device.build_version_sdk) 19 self._config = None 20 21 @classmethod 22 def IsSupported(cls, platform_backend): 23 return (platform_backend.GetOSName() == 'android' and 24 platform_backend.device.build_version_sdk > 25 version_codes.JELLY_BEAN_MR1) 26 27 def StartAgentTracing(self, config, timeout): 28 if not config.enable_atrace_trace: 29 return False 30 31 app_name = (','.join(config.atrace_config.app_name) if 32 isinstance(config.atrace_config.app_name, list) else 33 config.atrace_config.app_name) 34 self._config = atrace_agent.AtraceConfig( 35 config.atrace_config.categories, 36 trace_buf_size=None, kfuncs=None, app_name=app_name, 37 compress_trace_data=True, from_file=True, 38 device_serial_number=str(self._device), trace_time=None, 39 target='android') 40 return self._atrace_agent.StartAgentTracing(self._config, timeout) 41 42 def StopAgentTracing(self): 43 self._atrace_agent.StopAgentTracing() 44 45 def SupportsExplicitClockSync(self): 46 return self._atrace_agent.SupportsExplicitClockSync() 47 48 def RecordClockSyncMarker(self, sync_id, 49 record_controller_clock_sync_marker_callback): 50 return self._atrace_agent.RecordClockSyncMarker(sync_id, 51 lambda t, sid: record_controller_clock_sync_marker_callback(sid, t)) 52 53 def CollectAgentTraceData(self, trace_data_builder, timeout=None): 54 raw_data = self._atrace_agent.GetResults(timeout).raw_data 55 trace_data_builder.AddTraceFor(trace_data.ATRACE_PART, raw_data) 56