| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 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 import json | 5 import json |
| 6 import logging | 6 import logging |
| 7 import socket | 7 import socket |
| 8 import time | 8 import time |
| 9 import traceback | 9 import traceback |
| 10 | 10 |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 raise TracingTimeoutException( | 264 raise TracingTimeoutException( |
| 265 'Only received partial trace data due to timeout after %s ' | 265 'Only received partial trace data due to timeout after %s ' |
| 266 'seconds. If the trace data is big, you may want to increase ' | 266 'seconds. If the trace data is big, you may want to increase ' |
| 267 'the timeout amount.' % elapsed_time) | 267 'the timeout amount.' % elapsed_time) |
| 268 finally: | 268 finally: |
| 269 self._trace_data_builder = None | 269 self._trace_data_builder = None |
| 270 | 270 |
| 271 def _NotificationHandler(self, res): | 271 def _NotificationHandler(self, res): |
| 272 if 'Tracing.dataCollected' == res.get('method'): | 272 if 'Tracing.dataCollected' == res.get('method'): |
| 273 value = res.get('params', {}).get('value') | 273 value = res.get('params', {}).get('value') |
| 274 self._trace_data_builder.AddEventsTo( | 274 self._trace_data_builder.AddTraceFor( |
| 275 trace_data_module.CHROME_TRACE_PART, value) | 275 trace_data_module.CHROME_TRACE_PART, value) |
| 276 elif 'Tracing.tracingComplete' == res.get('method'): | 276 elif 'Tracing.tracingComplete' == res.get('method'): |
| 277 stream_handle = res.get('params', {}).get('stream') | 277 stream_handle = res.get('params', {}).get('stream') |
| 278 if not stream_handle: | 278 if not stream_handle: |
| 279 self._has_received_all_tracing_data = True | 279 self._has_received_all_tracing_data = True |
| 280 return | 280 return |
| 281 reader = _DevToolsStreamReader(self._inspector_websocket, stream_handle) | 281 reader = _DevToolsStreamReader(self._inspector_websocket, stream_handle) |
| 282 reader.Read(self._ReceivedAllTraceDataFromStream) | 282 reader.Read(self._ReceivedAllTraceDataFromStream) |
| 283 | 283 |
| 284 def _ReceivedAllTraceDataFromStream(self, data): | 284 def _ReceivedAllTraceDataFromStream(self, data): |
| 285 # For now we still unpack trace data to dictionary form. |
| 285 trace = json.loads(data) | 286 trace = json.loads(data) |
| 286 if type(trace) == dict: | 287 self._trace_data_builder.AddTraceFor( |
| 287 for part in trace_data_module.ALL_TRACE_PARTS: | |
| 288 field_name = part.raw_field_name | |
| 289 if field_name in trace: | |
| 290 self._trace_data_builder.AddEventsTo(part, trace[field_name]) | |
| 291 | |
| 292 if 'metadata' in trace: | |
| 293 self._trace_data_builder.SetMetadataFor( | |
| 294 trace_data_module.CHROME_TRACE_PART, trace['metadata']) | |
| 295 | |
| 296 elif type(trace) == list: | |
| 297 self._trace_data_builder.AddEventsTo( | |
| 298 trace_data_module.CHROME_TRACE_PART, trace) | 288 trace_data_module.CHROME_TRACE_PART, trace) |
| 299 else: | |
| 300 raise TracingUnexpectedResponseException('Unexpected trace type') | |
| 301 self._has_received_all_tracing_data = True | 289 self._has_received_all_tracing_data = True |
| 302 | 290 |
| 303 def Close(self): | 291 def Close(self): |
| 304 self._inspector_websocket.UnregisterDomain(self._TRACING_DOMAIN) | 292 self._inspector_websocket.UnregisterDomain(self._TRACING_DOMAIN) |
| 305 self._inspector_websocket = None | 293 self._inspector_websocket = None |
| 306 | 294 |
| 307 @decorators.Cache | 295 @decorators.Cache |
| 308 def IsTracingSupported(self): | 296 def IsTracingSupported(self): |
| 309 req = {'method': 'Tracing.hasCompleted'} | 297 req = {'method': 'Tracing.hasCompleted'} |
| 310 res = self._inspector_websocket.SyncRequest(req, timeout=10) | 298 res = self._inspector_websocket.SyncRequest(req, timeout=10) |
| 311 return not res.get('response') | 299 return not res.get('response') |
| OLD | NEW |