Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Unified Diff: tools/telemetry/telemetry/tracing_backend.py

Issue 11548032: Telemetry / Devtools TraceHandler: exposes tracing via dev tools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Error handling and comments Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/tracing_backend.py
diff --git a/tools/telemetry/telemetry/tracing_backend.py b/tools/telemetry/telemetry/tracing_backend.py
new file mode 100644
index 0000000000000000000000000000000000000000..54f905782fa4812bbc9680782d8ec842cc71abc0
--- /dev/null
+++ b/tools/telemetry/telemetry/tracing_backend.py
@@ -0,0 +1,63 @@
+# 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 json
+import logging
+import socket
+
+from telemetry import util
+from telemetry import websocket
+
+
+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
+
+ def BeginTracing(self):
+ req = {'method': 'Tracing.start'}
+ self._SyncRequest(req)
+
+ def EndTracingAsync(self):
+ req = {'method': 'Tracing.end'}
+ self._SyncRequest(req)
+
+ def HasCompleted(self):
+ req = {'method': 'Tracing.hasCompleted'}
+ r = self._SyncRequest(req)
+ return r['response']['result']
+
+ def GetTraceAndReset(self):
+ req = {'method': 'Tracing.getTraceAndReset'}
+ r = self._SyncRequest(req)
+ return '{"traceEvents":[' + r['response']['result'] + ']}'
+
+ 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)
+
+ 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
+ return res
+
+ def _SetTimeout(self, timeout):
+ if self._cur_socket_timeout != timeout:
+ self._socket.settimeout(timeout)
+ self._cur_socket_timeout = timeout

Powered by Google App Engine
This is Rietveld 408576698