Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Library handling DevTools websocket interaction. | 5 """Library handling DevTools websocket interaction. |
| 6 """ | 6 """ |
| 7 | 7 |
| 8 import httplib | 8 import httplib |
| 9 import json | 9 import json |
| 10 import logging | 10 import logging |
| 11 import os | 11 import os |
| 12 import sys | 12 import sys |
| 13 | 13 |
| 14 file_dir = os.path.dirname(__file__) | 14 file_dir = os.path.dirname(__file__) |
| 15 sys.path.append(os.path.join(file_dir, '..', '..', 'perf')) | 15 sys.path.append(os.path.join(file_dir, '..', '..', 'perf')) |
| 16 from chrome_telemetry_build import chromium_config | 16 from chrome_telemetry_build import chromium_config |
| 17 sys.path.append(chromium_config.GetTelemetryDir()) | 17 sys.path.append(chromium_config.GetTelemetryDir()) |
| 18 | 18 |
| 19 from telemetry.internal.backends.chrome_inspector import inspector_websocket | 19 from telemetry.internal.backends.chrome_inspector import inspector_websocket |
| 20 from telemetry.internal.backends.chrome_inspector import websocket | 20 from telemetry.internal.backends.chrome_inspector import websocket |
| 21 | 21 |
| 22 | 22 |
| 23 DEFAULT_TIMEOUT = 10 # seconds | |
| 24 | |
| 25 | |
| 23 class DevToolsConnectionException(Exception): | 26 class DevToolsConnectionException(Exception): |
| 24 def __init__(self, message): | 27 def __init__(self, message): |
| 25 super(DevToolsConnectionException, self).__init__(message) | 28 super(DevToolsConnectionException, self).__init__(message) |
| 26 logging.warning("DevToolsConnectionException: " + message) | 29 logging.warning("DevToolsConnectionException: " + message) |
| 27 | 30 |
| 28 | 31 |
| 29 # Taken from telemetry.internal.backends.chrome_inspector.tracing_backend. | 32 # Taken from telemetry.internal.backends.chrome_inspector.tracing_backend. |
| 30 # TODO(mattcary): combine this with the above and export? | 33 # TODO(mattcary): combine this with the above and export? |
| 31 class _StreamReader(object): | 34 class _StreamReader(object): |
| 32 def __init__(self, inspector, stream_handle): | 35 def __init__(self, inspector, stream_handle): |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 def SetUpMonitoring(self): | 185 def SetUpMonitoring(self): |
| 183 for domain in self._domains_to_enable: | 186 for domain in self._domains_to_enable: |
| 184 self._ws.RegisterDomain(domain, self._OnDataReceived) | 187 self._ws.RegisterDomain(domain, self._OnDataReceived) |
| 185 if domain != self.TRACING_DOMAIN: | 188 if domain != self.TRACING_DOMAIN: |
| 186 self.SyncRequestNoResponse('%s.enable' % domain) | 189 self.SyncRequestNoResponse('%s.enable' % domain) |
| 187 # Tracing setup must be done by the tracing track to control filtering | 190 # Tracing setup must be done by the tracing track to control filtering |
| 188 # and output. | 191 # and output. |
| 189 self._tearing_down_tracing = False | 192 self._tearing_down_tracing = False |
| 190 self._set_up = True | 193 self._set_up = True |
| 191 | 194 |
| 192 def StartMonitoring(self): | 195 def StartMonitoring(self, timeout=DEFAULT_TIMEOUT): |
| 193 """Starts monitoring. | 196 """Starts monitoring. |
| 194 | 197 |
| 195 DevToolsConnection.SetUpMonitoring() has to be called first. | 198 DevToolsConnection.SetUpMonitoring() has to be called first. |
| 196 """ | 199 """ |
| 197 assert self._set_up, 'DevToolsConnection.SetUpMonitoring not called.' | 200 assert self._set_up, 'DevToolsConnection.SetUpMonitoring not called.' |
| 198 self._Dispatch() | 201 self._Dispatch(timeout=timeout) |
| 199 self._TearDownMonitoring() | 202 self._TearDownMonitoring() |
| 200 | 203 |
| 201 def StopMonitoring(self): | 204 def StopMonitoring(self): |
| 202 """Stops the monitoring.""" | 205 """Stops the monitoring.""" |
| 203 self._please_stop = True | 206 self._please_stop = True |
| 204 | 207 |
| 205 def _Dispatch(self, kind='Monitoring', timeout=10): | 208 def _Dispatch(self, kind='Monitoring', |
| 209 timeout=DEFAULT_TIMEOUT): | |
|
mattcary
2016/02/19 15:40:17
this timeout should be configured as part of the d
gabadie
2016/02/22 10:05:00
Agreed. But to me only few dispatch calls needed a
| |
| 206 self._please_stop = False | 210 self._please_stop = False |
| 207 while not self._please_stop: | 211 while not self._please_stop: |
| 208 try: | 212 try: |
| 209 self._ws.DispatchNotifications(timeout=timeout) | 213 self._ws.DispatchNotifications(timeout=timeout) |
| 210 except websocket.WebSocketTimeoutException: | 214 except websocket.WebSocketTimeoutException: |
| 211 break | 215 break |
| 212 if not self._please_stop: | 216 if not self._please_stop: |
| 213 logging.warning('%s stopped on a timeout.' % kind) | 217 logging.warning('%s stopped on a timeout.' % kind) |
| 214 | 218 |
| 215 def _TearDownMonitoring(self): | 219 def _TearDownMonitoring(self): |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 325 """Returns a Track instance constructed from data dumped by | 329 """Returns a Track instance constructed from data dumped by |
| 326 Track.ToJsonDict(). | 330 Track.ToJsonDict(). |
| 327 | 331 |
| 328 Args: | 332 Args: |
| 329 json_data: (dict) Parsed from a JSON file using the json module. | 333 json_data: (dict) Parsed from a JSON file using the json module. |
| 330 | 334 |
| 331 Returns: | 335 Returns: |
| 332 a Track instance. | 336 a Track instance. |
| 333 """ | 337 """ |
| 334 pass | 338 pass |
| OLD | NEW |