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

Unified Diff: tools/telemetry/telemetry/internal/platform/tracing_agent/chrome_tracing_agent.py

Issue 1338033002: [Telemetry] Refactor Chrome devtools tracing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review fix Created 5 years, 3 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/internal/platform/tracing_agent/chrome_tracing_agent.py
diff --git a/tools/telemetry/telemetry/internal/platform/tracing_agent/chrome_tracing_agent.py b/tools/telemetry/telemetry/internal/platform/tracing_agent/chrome_tracing_agent.py
index b1ef7f6331348d0b16c26300542a69383a036999..759278b6e8584523a0969423e2087d42139efb9d 100644
--- a/tools/telemetry/telemetry/internal/platform/tracing_agent/chrome_tracing_agent.py
+++ b/tools/telemetry/telemetry/internal/platform/tracing_agent/chrome_tracing_agent.py
@@ -5,11 +5,13 @@
import os
import shutil
import stat
+import sys
import tempfile
+import traceback
from telemetry.internal.platform import tracing_agent
from telemetry.internal.platform.tracing_agent import (
- chrome_devtools_tracing_backend)
+ chrome_tracing_devtools_manager)
_DESKTOP_OS_NAMES = ['linux', 'mac', 'win']
@@ -19,12 +21,17 @@ _CHROME_TRACE_CONFIG_DIR_ANDROID = '/data/local/'
_CHROME_TRACE_CONFIG_FILE_NAME = 'chrome-trace-config.json'
+class ChromeTracingStartedError(Exception):
+ pass
+
+
+class ChromeTracingStoppedError(Exception):
+ pass
+
+
class ChromeTracingAgent(tracing_agent.TracingAgent):
def __init__(self, platform_backend):
super(ChromeTracingAgent, self).__init__(platform_backend)
- self._chrome_devtools_tracing_backend = (
- chrome_devtools_tracing_backend.ChromeDevtoolsTracingBackend(
- platform_backend))
self._trace_config_file = None
@property
@@ -32,21 +39,45 @@ class ChromeTracingAgent(tracing_agent.TracingAgent):
return self._trace_config_file
@classmethod
- def RegisterDevToolsClient(cls, devtools_client_backend, platform_backend):
- (chrome_devtools_tracing_backend.ChromeDevtoolsTracingBackend
- .RegisterDevToolsClient(devtools_client_backend, platform_backend))
-
- @classmethod
def IsSupported(cls, platform_backend):
- return (chrome_devtools_tracing_backend.ChromeDevtoolsTracingBackend
- .IsSupported(platform_backend))
+ return chrome_tracing_devtools_manager.IsSupported(platform_backend)
def Start(self, trace_options, category_filter, timeout):
- return self._chrome_devtools_tracing_backend.Start(
- trace_options, category_filter, timeout)
+ if not trace_options.enable_chrome_trace:
+ return False
+ devtools_clients = (chrome_tracing_devtools_manager
+ .GetActiveDevToolsClients(self._platform_backend))
+ if not devtools_clients:
+ return False
+ for client in devtools_clients:
+ if client.is_tracing_running:
+ raise ChromeTracingStartedError(
+ 'Tracing is already running on devtools at port %s on platform'
+ 'backend %s.' % (client.remote_port, self._platform_backend))
+ client.StartChromeTracing(
+ trace_options, category_filter.filter_string, timeout)
+ return True
def Stop(self, trace_data_builder):
- self._chrome_devtools_tracing_backend.Stop(trace_data_builder)
+ # We get all DevTools clients including the stale ones, so that we get an
+ # exception if there is a stale client. This is because we will potentially
+ # lose data if there is a stale client.
+ devtools_clients = (chrome_tracing_devtools_manager
+ .GetDevToolsClients(self._platform_backend))
+ raised_execption_messages = []
+ for client in devtools_clients:
+ try:
+ client.StopChromeTracing(trace_data_builder)
+ except Exception:
+ raised_execption_messages.append(
+ 'Error when trying to stop tracing on devtools at port %s:\n%s'
+ % (client.remote_port,
+ ''.join(traceback.format_exception(*sys.exc_info()))))
+
+ if raised_execption_messages:
+ raise ChromeTracingStoppedError(
+ 'Exceptions raised when trying to stop devtool tracing\n:' +
+ '\n'.join(raised_execption_messages))
def _CreateTraceConfigFile(self, config):
assert not self._trace_config_file

Powered by Google App Engine
This is Rietveld 408576698