1# Copyright 2014 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
5class TracingController(object):
6  def __init__(self, tracing_controller_backend):
7    """Provides control of the tracing systems supported by telemetry."""
8    self._tracing_controller_backend = tracing_controller_backend
9
10  def Start(self, trace_options, category_filter, timeout=10):
11    """Starts tracing.
12
13    trace_options specifies which tracing systems to activate. Category filter
14    allows fine-tuning of the data that are collected by the selected tracing
15    systems.
16
17    Some tracers are process-specific, e.g. chrome tracing, but are not
18    guaranteed to be supported. In order to support tracing of these kinds of
19    tracers, Start will succeed *always*, even if the tracing systems you have
20    requested are not supported.
21
22    If you absolutely require a particular tracer to exist, then check
23    for its support after you have started the process in question. Or, have
24    your code fail gracefully when the data you require is not present in the
25    resulting trace.
26    """
27    self._tracing_controller_backend.Start(
28        trace_options, category_filter, timeout)
29
30  def Stop(self):
31    """Stops tracing and returns a TraceValue."""
32    return self._tracing_controller_backend.Stop()
33
34  @property
35  def is_tracing_running(self):
36    return self._tracing_controller_backend.is_tracing_running
37
38  def IsChromeTracingSupported(self, browser):
39    """Returns whether chrome tracing is supported on the given browser."""
40    return self._tracing_controller_backend.IsChromeTracingSupported(browser)
41