| Index: tools/telemetry/telemetry/core/backends/chrome/tracing_backend.py
|
| diff --git a/tools/telemetry/telemetry/core/backends/chrome/tracing_backend.py b/tools/telemetry/telemetry/core/backends/chrome/tracing_backend.py
|
| deleted file mode 100644
|
| index 62426419bdc07504e10264d4b74b915761da93a8..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/core/backends/chrome/tracing_backend.py
|
| +++ /dev/null
|
| @@ -1,130 +0,0 @@
|
| -# Copyright 2013 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.
|
| -
|
| -import logging
|
| -
|
| -from telemetry.core.backends.chrome_inspector import inspector_websocket
|
| -from telemetry.core.platform import tracing_options
|
| -
|
| -
|
| -class TracingUnsupportedException(Exception):
|
| - pass
|
| -
|
| -
|
| -class TracingTimeoutException(Exception):
|
| - pass
|
| -
|
| -class TracingHasNotRunException(Exception):
|
| - pass
|
| -
|
| -
|
| -class TracingBackend(object):
|
| - def __init__(self, devtools_port, chrome_browser_backend):
|
| - self._inspector_websocket = inspector_websocket.InspectorWebsocket(
|
| - self._ErrorHandler)
|
| - self._inspector_websocket.RegisterDomain(
|
| - 'Tracing', self._NotificationHandler)
|
| -
|
| - self._inspector_websocket.Connect(
|
| - 'ws://127.0.0.1:%i/devtools/browser' % devtools_port)
|
| - self._tracing_data = []
|
| - self._is_tracing_running = False
|
| - self._chrome_browser_backend = chrome_browser_backend
|
| -
|
| - @property
|
| - def is_tracing_running(self):
|
| - return self._is_tracing_running
|
| -
|
| - @property
|
| - def _devtools_client(self):
|
| - return self._chrome_browser_backend.devtools_client
|
| -
|
| - def StartTracing(self, trace_options, custom_categories=None, timeout=10):
|
| - """ Starts tracing on the first call and returns True. Returns False
|
| - and does nothing on subsequent nested calls.
|
| - """
|
| - if self.is_tracing_running:
|
| - return False
|
| - # Reset collected tracing data from previous tracing calls.
|
| - self._tracing_data = []
|
| - self._CheckNotificationSupported()
|
| - #TODO(nednguyen): remove this when the stable branch pass 2118.
|
| - if (trace_options.record_mode == tracing_options.RECORD_AS_MUCH_AS_POSSIBLE
|
| - and self._devtools_client.GetChromeBranchNumber()
|
| - and self._devtools_client.GetChromeBranchNumber() < 2118):
|
| - logging.warning(
|
| - 'Cannot use %s tracing mode on chrome browser with branch version %i,'
|
| - ' (<2118) fallback to use %s tracing mode' % (
|
| - trace_options.record_mode,
|
| - self._devtools_client.GetChromeBranchNumber(),
|
| - tracing_options.RECORD_UNTIL_FULL))
|
| - trace_options.record_mode = tracing_options.RECORD_UNTIL_FULL
|
| - req = {'method': 'Tracing.start'}
|
| - req['params'] = {}
|
| - m = {tracing_options.RECORD_UNTIL_FULL: 'record-until-full',
|
| - tracing_options.RECORD_AS_MUCH_AS_POSSIBLE:
|
| - 'record-as-much-as-possible'}
|
| - req['params']['options'] = m[trace_options.record_mode]
|
| - if custom_categories:
|
| - req['params']['categories'] = custom_categories
|
| - self._inspector_websocket.SyncRequest(req, timeout)
|
| - self._is_tracing_running = True
|
| - return True
|
| -
|
| - def StopTracing(self, timeout=30):
|
| - """ Stops tracing and returns the raw json trace result. It this is called
|
| - after tracing has been stopped, trace data from the last tracing run is
|
| - returned.
|
| - """
|
| - if not self.is_tracing_running:
|
| - if not self._tracing_data:
|
| - raise TracingHasNotRunException()
|
| - else:
|
| - return self._tracing_data
|
| - req = {'method': 'Tracing.end'}
|
| - self._inspector_websocket.SendAndIgnoreResponse(req)
|
| - # After Tracing.end, chrome browser will send asynchronous notifications
|
| - # containing trace data. This is until Tracing.tracingComplete is sent,
|
| - # which means there is no trace buffers pending flush.
|
| - try:
|
| - self._inspector_websocket.DispatchNotificationsUntilDone(timeout)
|
| - except \
|
| - inspector_websocket.DispatchNotificationsUntilDoneTimeoutException \
|
| - as err:
|
| - raise TracingTimeoutException(
|
| - 'Trace data was not fully received due to timeout after %s '
|
| - 'seconds. If the trace data is big, you may want to increase the '
|
| - 'time out amount.' % err.elapsed_time)
|
| - self._is_tracing_running = False
|
| - return self._tracing_data
|
| -
|
| - def _ErrorHandler(self, elapsed):
|
| - logging.error('Unrecoverable error after %ds reading tracing response.',
|
| - elapsed)
|
| - raise
|
| -
|
| - def _NotificationHandler(self, res):
|
| - if 'Tracing.dataCollected' == res.get('method'):
|
| - value = res.get('params', {}).get('value')
|
| - if type(value) in [str, unicode]:
|
| - self._tracing_data.append(value)
|
| - elif type(value) is list:
|
| - self._tracing_data.extend(value)
|
| - else:
|
| - logging.warning('Unexpected type in tracing data')
|
| - elif 'Tracing.tracingComplete' == res.get('method'):
|
| - return True
|
| -
|
| - def Close(self):
|
| - self._inspector_websocket.Disconnect()
|
| -
|
| - def _CheckNotificationSupported(self):
|
| - """Ensures we're running against a compatible version of chrome."""
|
| - req = {'method': 'Tracing.hasCompleted'}
|
| - res = self._inspector_websocket.SyncRequest(req)
|
| - if res.get('response'):
|
| - raise TracingUnsupportedException(
|
| - 'Tracing not supported for this browser')
|
| - elif 'error' in res:
|
| - return
|
|
|