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 |