| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from telemetry.internal.platform import tracing_agent |
| |
| |
| class TracingController(tracing_agent.TracingAgent): |
| |
| def __init__(self, tracing_controller_backend): |
| """Provides control of the tracing systems supported by telemetry.""" |
| super(TracingController, self).__init__( |
| tracing_controller_backend._platform_backend) |
| self._tracing_controller_backend = tracing_controller_backend |
| |
| def StartTracing(self, tracing_config, timeout=10): |
| """Starts tracing. |
| |
| tracing config contains both tracing options and category filters. |
| |
| trace_options specifies which tracing systems to activate. Category filter |
| allows fine-tuning of the data that are collected by the selected tracing |
| systems. |
| |
| Some tracers are process-specific, e.g. chrome tracing, but are not |
| guaranteed to be supported. In order to support tracing of these kinds of |
| tracers, Start will succeed *always*, even if the tracing systems you have |
| requested are not supported. |
| |
| If you absolutely require a particular tracer to exist, then check |
| for its support after you have started the process in question. Or, have |
| your code fail gracefully when the data you require is not present in the |
| resulting trace. |
| """ |
| self._tracing_controller_backend.StartTracing(tracing_config, timeout) |
| |
| def StopTracing(self): |
| """Stops tracing and returns a TraceValue.""" |
| return self._tracing_controller_backend.StopTracing() |
| |
| def FlushTracing(self): |
| """Flush tracing buffer and continue tracing. |
| |
| Warning: This method is a temporary hack to enable multi-tab benchmarks |
| (see https://goo.gl/8Gjstr). Please contact Telemetry owners before using |
| it. |
| """ |
| self._tracing_controller_backend.FlushTracing() |
| |
| @property |
| def is_tracing_running(self): |
| return self._tracing_controller_backend.is_tracing_running |
| |
| def IsChromeTracingSupported(self): |
| """Returns whether chrome tracing is supported.""" |
| return self._tracing_controller_backend.IsChromeTracingSupported() |
| |
| def StartAgentTracing(self, config, timeout=10): |
| """ Starts agent tracing for tracing controller""" |
| return self._tracing_controller_backend.StartAgentTracing(config, timeout) |
| |
| def StopAgentTracing(self, trace_data_builder): |
| """ Stops agent tracing for tracing controller. """ |
| return self._tracing_controller_backend.StopAgentTracing(trace_data_builder) |
| |
| def SupportsExplicitClockSync(self): |
| return self._tracing_controller_backend.SupportsExplicitClockSync() |
| |
| def RecordClockSyncMarker(self, sync_id, |
| record_controller_clocksync_marker_callback): |
| return self._tracing_controller_backend.RecordClockSyncMarker( |
| sync_id, record_controller_clocksync_marker_callback) |
| |
| def ClearStateIfNeeded(self): |
| """Clear tracing state if needed.""" |
| self._tracing_controller_backend.ClearStateIfNeeded() |