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

Unified Diff: tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py

Issue 382833004: Remove StartAsyncDispatchNotifications from inspector_websocket (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update default timeout value for StopTracing call to 30s Created 6 years, 5 months 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/core/backends/chrome/inspector_websocket.py
diff --git a/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py b/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py
index 26dac9ba79510607d386cbf75cab61b3352f940c..00c18a49646ac776d7cf000e2b159d76d98be74f 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py
@@ -5,12 +5,21 @@
import json
import logging
import socket
-import threading
import time
from telemetry.core.backends.chrome import websocket
+class DispatchNotificationsUntilDoneTimeoutException(Exception):
+ """Exception that can be thrown from DispatchNotificationsUntilDone to
+ indicate timeout exception of the function.
+ """
+
+ def __init__(self, elapsed_time):
+ super(DispatchNotificationsUntilDoneTimeoutException, self).__init__()
+ self.elapsed_time = elapsed_time
+
+
class InspectorWebsocket(object):
def __init__(self, notification_handler=None, error_handler=None):
@@ -18,24 +27,20 @@ class InspectorWebsocket(object):
Args:
notification_handler: A callback for notifications received as a result of
- calling DispatchNotifications() or StartAsyncDispatchNotifications().
+ calling DispatchNotifications() or DispatchNotificationsUntilDone().
Must accept a single JSON object containing the Inspector's
- notification. May return True to indicate the stop async dispatching.
+ notification. May return True to indicate the dispatching is done for
+ DispatchNotificationsUntilDone.
error_handler: A callback for errors in communicating with the Inspector.
Must accept a single numeric parameter indicated the time elapsed before
the error.
"""
self._socket = None
- self._thread = None
self._cur_socket_timeout = 0
self._next_request_id = 0
self._notification_handler = notification_handler
self._error_handler = error_handler
- @property
- def is_dispatching_async_notifications(self):
- return self._thread != None
-
def Connect(self, url, timeout=10):
assert not self._socket
self._socket = websocket.create_connection(url, timeout=timeout)
@@ -55,7 +60,6 @@ class InspectorWebsocket(object):
logging.debug('sent [%s]', data)
def SyncRequest(self, req, timeout=10):
- assert not self._thread, 'Cannot be used during async dispatching.'
self.SendAndIgnoreResponse(req)
while self._socket:
@@ -64,28 +68,28 @@ class InspectorWebsocket(object):
return res
def DispatchNotifications(self, timeout=10):
- assert not self._thread, 'Cannot be used during async dispatching.'
self._Receive(timeout)
- def StartAsyncDispatchNotifications(self):
- assert not self._thread, 'Cannot be started twice.'
- self._thread = threading.Thread(target=self._AsyncDispatcher)
- self._thread.daemon = True
- self._thread.start()
+ def DispatchNotificationsUntilDone(self, timeout):
+ """Dispatch notifications until notification_handler return True.
- def StopAsyncDispatchNotifications(self):
- self._thread.join(timeout=30)
- if self._thread.is_alive():
- raise RuntimeError('Timed out waiting for async dispatch notifications.')
- self._thread = None
+ Args:
+ timeout: the total timeout value for dispatching multiple notifications
+ until done.
+ """
- def _AsyncDispatcher(self):
+ if timeout < self._cur_socket_timeout:
+ self._SetTimeout(timeout)
+ start_time = time.time()
while self._socket:
try:
- if not self._Receive():
+ if not self._Receive(timeout):
break
except websocket.WebSocketTimeoutException:
pass
+ elapsed_time = time.time() - start_time
+ if elapsed_time > timeout:
+ raise DispatchNotificationsUntilDoneTimeoutException(elapsed_time)
def _SetTimeout(self, timeout):
if self._cur_socket_timeout != timeout:

Powered by Google App Engine
This is Rietveld 408576698