aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/core/tracing_controller.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/telemetry/core/tracing_controller.py')
-rw-r--r--catapult/telemetry/telemetry/core/tracing_controller.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/core/tracing_controller.py b/catapult/telemetry/telemetry/core/tracing_controller.py
new file mode 100644
index 00000000..1e26f7e8
--- /dev/null
+++ b/catapult/telemetry/telemetry/core/tracing_controller.py
@@ -0,0 +1,89 @@
+# 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
+
+ @property
+ def telemetry_info(self):
+ return self._tracing_controller_backend.telemetry_info
+
+ @telemetry_info.setter
+ def telemetry_info(self, ii):
+ self._tracing_controller_backend.telemetry_info = ii
+
+ 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):
+ """ Stops agent tracing for tracing controller. """
+ return self._tracing_controller_backend.StopAgentTracing()
+
+ def CollectAgentTraceData(self, trace_data_builder, timeout=None):
+ """ Collect tracing data. """
+ return self._tracing_controller_backend.CollectTraceData(trace_data_builder,
+ timeout=timeout)
+
+ 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()