| Index: tools/telemetry/telemetry/tracing_backend.py
|
| diff --git a/tools/telemetry/telemetry/tracing_backend.py b/tools/telemetry/telemetry/tracing_backend.py
|
| deleted file mode 100644
|
| index 68014ce06b6a8a1b80b767acab958fdca7e7459e..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/tracing_backend.py
|
| +++ /dev/null
|
| @@ -1,133 +0,0 @@
|
| -# Copyright (c) 2012 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 cStringIO
|
| -import json
|
| -import logging
|
| -import socket
|
| -import threading
|
| -
|
| -
|
| -from telemetry import trace_event_importer
|
| -from telemetry import trace_result
|
| -from telemetry import util
|
| -from telemetry import websocket
|
| -
|
| -
|
| -class TracingUnsupportedException(Exception):
|
| - pass
|
| -
|
| -class TraceResultImpl(object):
|
| - def __init__(self, tracing_data):
|
| - self._tracing_data = tracing_data
|
| -
|
| - def Serialize(self, f):
|
| - f.write('{"traceEvents": [')
|
| - d = self._tracing_data
|
| - # Note: we're not using ','.join here because the strings that are in the
|
| - # tracing data are typically many megabytes in size. In the fast case, f is
|
| - # just a file, so by skipping the in memory step we keep our memory
|
| - # footprint low and avoid additional processing.
|
| - if len(d) == 0:
|
| - pass
|
| - elif len(d) == 1:
|
| - f.write(d[0])
|
| - else:
|
| - f.write(d[0])
|
| - for i in range(1, len(d)):
|
| - f.write(',')
|
| - f.write(d[i])
|
| - f.write(']}')
|
| -
|
| - def AsTimelineModel(self):
|
| - f = cStringIO.StringIO()
|
| - self.Serialize(f)
|
| - return trace_event_importer.Import(
|
| - f.getvalue())
|
| -
|
| -class TracingBackend(object):
|
| - def __init__(self, devtools_port):
|
| - debugger_url = 'ws://localhost:%i/devtools/browser' % devtools_port
|
| - self._socket = websocket.create_connection(debugger_url)
|
| - self._next_request_id = 0
|
| - self._cur_socket_timeout = 0
|
| - self._thread = None
|
| - self._tracing_data = []
|
| -
|
| - def BeginTracing(self):
|
| - self._CheckNotificationSupported()
|
| - req = {'method': 'Tracing.start'}
|
| - self._SyncRequest(req)
|
| - # Tracing.start will send asynchronous notifications containing trace
|
| - # data, until Tracing.end is called.
|
| - self._thread = threading.Thread(target=self._TracingReader)
|
| - self._thread.start()
|
| -
|
| - def EndTracing(self):
|
| - req = {'method': 'Tracing.end'}
|
| - self._SyncRequest(req)
|
| - self._thread.join()
|
| - self._thread = None
|
| -
|
| - def GetTraceResultAndReset(self):
|
| - assert not self._thread
|
| - ret = trace_result.TraceResult(
|
| - TraceResultImpl(self._tracing_data))
|
| - self._tracing_data = []
|
| - return ret
|
| -
|
| - def Close(self):
|
| - if self._socket:
|
| - self._socket.close()
|
| - self._socket = None
|
| -
|
| - def _TracingReader(self):
|
| - while self._socket:
|
| - try:
|
| - data = self._socket.recv()
|
| - if not data:
|
| - break
|
| - res = json.loads(data)
|
| - logging.debug('got [%s]', data)
|
| - if 'Tracing.dataCollected' == res.get('method'):
|
| - value = res.get('params', {}).get('value')
|
| - self._tracing_data.append(value)
|
| - elif 'Tracing.tracingComplete' == res.get('method'):
|
| - break
|
| - except (socket.error, websocket.WebSocketException):
|
| - logging.warning('Timeout waiting for tracing response, unusual.')
|
| -
|
| - def _SyncRequest(self, req, timeout=10):
|
| - self._SetTimeout(timeout)
|
| - req['id'] = self._next_request_id
|
| - self._next_request_id += 1
|
| - data = json.dumps(req)
|
| - logging.debug('will send [%s]', data)
|
| - self._socket.send(data)
|
| -
|
| - def _SetTimeout(self, timeout):
|
| - if self._cur_socket_timeout != timeout:
|
| - self._socket.settimeout(timeout)
|
| - self._cur_socket_timeout = timeout
|
| -
|
| - def _CheckNotificationSupported(self):
|
| - """Ensures we're running against a compatible version of chrome."""
|
| - req = {'method': 'Tracing.hasCompleted'}
|
| - self._SyncRequest(req)
|
| - while True:
|
| - try:
|
| - data = self._socket.recv()
|
| - except (socket.error, websocket.WebSocketException):
|
| - raise util.TimeoutException(
|
| - 'Timed out waiting for reply. This is unusual.')
|
| - logging.debug('got [%s]', data)
|
| - res = json.loads(data)
|
| - if res['id'] != req['id']:
|
| - logging.debug('Dropped reply: %s', json.dumps(res))
|
| - continue
|
| - if res.get('response'):
|
| - raise TracingUnsupportedException(
|
| - 'Tracing not supported for this browser')
|
| - elif 'error' in res:
|
| - return
|
|
|