| Index: tools/telemetry/telemetry/page_runner.py
|
| diff --git a/tools/telemetry/telemetry/page_runner.py b/tools/telemetry/telemetry/page_runner.py
|
| index ffe2251e646814328e68f592bcbc5e6753d37708..c19d74a503f8d2a1b5c14483af7341bdd36ab680 100644
|
| --- a/tools/telemetry/telemetry/page_runner.py
|
| +++ b/tools/telemetry/telemetry/page_runner.py
|
| @@ -23,13 +23,9 @@ class _RunState(object):
|
| self.first_browser = True
|
| self.browser = None
|
| self.tab = None
|
| - self.trace_tab = None
|
| + self.is_tracing = False
|
|
|
| def Close(self):
|
| - if self.trace_tab:
|
| - self.trace_tab.Disconnect()
|
| - self.trace_tab = None
|
| -
|
| if self.tab:
|
| self.tab.Disconnect()
|
| self.tab = None
|
| @@ -136,7 +132,7 @@ http://goto/read-src-internal, or create a new archive using record_wpr.
|
| logging.warning('Tab crashed: %s%s', page.url, stdout)
|
| state.Close()
|
|
|
| - if options.trace_dir and state.trace_tab:
|
| + if options.trace_dir:
|
| self._EndTracing(state, options, page)
|
| break
|
| except browser_gone_exception.BrowserGoneException:
|
| @@ -228,56 +224,33 @@ http://goto/read-src-internal, or create a new archive using record_wpr.
|
| state.browser.SetReplayArchivePath(archive_path)
|
|
|
| def _SetupTracingTab(self, state):
|
| - if not state.trace_tab:
|
| - # Swap the two tabs because new tabs open to about:blank, and we
|
| - # can't navigate across protocols to chrome://tracing. The initial
|
| - # tab starts at chrome://newtab, so it works for that tab.
|
| - # TODO(dtu): If the trace_tab crashes, we're hosed.
|
| - state.trace_tab = state.tab
|
| - state.tab = state.browser.tabs.New()
|
| + if state.browser.supports_tracing:
|
| + state.is_tracing = True
|
| + state.browser.StartTracing()
|
|
|
| - state.trace_tab.page.Navigate('chrome://tracing')
|
| - state.trace_tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
|
| + def _EndTracing(self, state, options, page):
|
| + if state.is_tracing:
|
| + state.is_tracing = False
|
| + state.browser.StopTracing()
|
| + trace = state.browser.GetTrace()
|
| + logging.info('Processing trace...')
|
|
|
| - # Start tracing.
|
| - state.trace_tab.runtime.Execute('tracingController.beginTracing('
|
| - 'tracingController.supportsSystemTracing);')
|
| + trace_file_base = os.path.join(
|
| + options.trace_dir, page.url_as_file_safe_name)
|
|
|
| - def _EndTracing(self, state, options, page):
|
| - def IsTracingRunning():
|
| - return state.trace_tab.runtime.Evaluate(
|
| - 'tracingController.isTracingEnabled')
|
| - # Tracing might have ended already if the buffer filled up.
|
| - if IsTracingRunning():
|
| - state.trace_tab.runtime.Execute('tracingController.endTracing()')
|
| - util.WaitFor(lambda: not IsTracingRunning(), 10)
|
| -
|
| - logging.info('Processing trace...')
|
| -
|
| - trace_file_base = os.path.join(
|
| - options.trace_dir, page.url_as_file_safe_name)
|
| -
|
| - if options.page_repeat != 1 or options.pageset_repeat != 1:
|
| - trace_file_index = 0
|
| -
|
| - while True:
|
| - trace_file = '%s_%03d.json' % (trace_file_base, trace_file_index)
|
| - if not os.path.exists(trace_file):
|
| - break
|
| - trace_file_index = trace_file_index + 1
|
| - else:
|
| - trace_file = '%s.json' % trace_file_base
|
| -
|
| - with open(trace_file, 'w') as trace_file:
|
| - trace_file.write(state.trace_tab.runtime.Evaluate("""
|
| - JSON.stringify({
|
| - traceEvents: tracingController.traceEvents,
|
| - systemTraceEvents: tracingController.systemTraceEvents,
|
| - clientInfo: tracingController.clientInfo_,
|
| - gpuInfo: tracingController.gpuInfo_
|
| - });
|
| - """))
|
| - logging.info('Trace saved.')
|
| + if options.page_repeat != 1 or options.pageset_repeat != 1:
|
| + trace_file_index = 0
|
| +
|
| + while True:
|
| + trace_file = '%s_%03d.json' % (trace_file_base, trace_file_index)
|
| + if not os.path.exists(trace_file):
|
| + break
|
| + trace_file_index = trace_file_index + 1
|
| + else:
|
| + trace_file = '%s.json' % trace_file_base
|
| + with open(trace_file, 'w') as trace_file:
|
| + trace_file.write(trace)
|
| + logging.info('Trace saved.')
|
|
|
| def _PreparePage(self, page, tab, page_state, results):
|
| parsed_url = urlparse.urlparse(page.url)
|
|
|