summaryrefslogtreecommitdiffstats
path: root/tools/telemetry
diff options
context:
space:
mode:
authorchrisgao@chromium.org <chrisgao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-02 19:12:34 +0000
committerchrisgao@chromium.org <chrisgao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-02 19:12:34 +0000
commit66aa3815d8e7745580d928c7c39eed68a6eb8222 (patch)
tree700afbe3318ac488c950095d4d71764de536886f /tools/telemetry
parent75147f5e8bba70b224050852d23a22d26edcb57e (diff)
downloadchromium_src-66aa3815d8e7745580d928c7c39eed68a6eb8222.zip
chromium_src-66aa3815d8e7745580d928c7c39eed68a6eb8222.tar.gz
chromium_src-66aa3815d8e7745580d928c7c39eed68a6eb8222.tar.bz2
[telemetry] Refactoring of telemetry for the webdriver backend to land in.
1. Create telemetry.core.backends.browser_backend that can be shared by both chrome and webdriver. 2. Move telemetry.core.chrome.browser_backend to telemetry.core.backends.chrome.chrome_browser_backend. 3. Move DoNothingForwarder to telemetry.core.backends.browser_backend. 4. Add CreatePlatformBackendForCurrentOS to telemetry/core/platform/__init__.py 5. Add a hook browser_backend.AddReplayServerOptions. 6. Override webpagereplay.ReplayServer._AddDefaultReplayOptions because '--no-dns_forwarding' is added by default in webpagereplay.ReplayServer while webdriver-based backends need dns forwarding. BUG=267219 Review URL: https://chromiumcodereview.appspot.com/21406004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@215340 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/telemetry')
-rw-r--r--tools/telemetry/telemetry/core/backends/__init__.py3
-rw-r--r--tools/telemetry/telemetry/core/backends/browser_backend.py96
-rw-r--r--tools/telemetry/telemetry/core/backends/chrome/__init__.py3
-rw-r--r--tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend.py (renamed from tools/telemetry/telemetry/core/chrome/browser_backend.py)84
-rw-r--r--tools/telemetry/telemetry/core/browser.py2
-rw-r--r--tools/telemetry/telemetry/core/chrome/android_browser_backend.py5
-rw-r--r--tools/telemetry/telemetry/core/chrome/cros_browser_backend.py5
-rw-r--r--tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py5
-rw-r--r--tools/telemetry/telemetry/core/chrome/desktop_browser_finder.py16
-rw-r--r--tools/telemetry/telemetry/core/platform/__init__.py17
-rw-r--r--tools/telemetry/telemetry/core/wpr_server.py14
11 files changed, 161 insertions, 89 deletions
diff --git a/tools/telemetry/telemetry/core/backends/__init__.py b/tools/telemetry/telemetry/core/backends/__init__.py
new file mode 100644
index 0000000..9228df8
--- /dev/null
+++ b/tools/telemetry/telemetry/core/backends/__init__.py
@@ -0,0 +1,3 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
diff --git a/tools/telemetry/telemetry/core/backends/browser_backend.py b/tools/telemetry/telemetry/core/backends/browser_backend.py
new file mode 100644
index 0000000..bb120bd
--- /dev/null
+++ b/tools/telemetry/telemetry/core/backends/browser_backend.py
@@ -0,0 +1,96 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from telemetry.core import util
+from telemetry.core import web_contents
+
+
+class ExtensionsNotSupportedException(Exception):
+ pass
+
+class BrowserBackend(object):
+ """A base class for browser backends."""
+
+ WEBPAGEREPLAY_HOST = '127.0.0.1'
+
+ def __init__(self, is_content_shell, supports_extensions, options,
+ tab_list_backend):
+ self.browser_type = options.browser_type
+ self.is_content_shell = is_content_shell
+ self._supports_extensions = supports_extensions
+ self.options = options
+ self._browser = None
+ self._tab_list_backend = tab_list_backend(self)
+
+ def AddReplayServerOptions(self, options):
+ pass
+
+ def SetBrowser(self, browser):
+ self._browser = browser
+ self._tab_list_backend.Init()
+
+ @property
+ def browser(self):
+ return self._browser
+
+ @property
+ def supports_extensions(self):
+ """True if this browser backend supports extensions."""
+ return self._supports_extensions
+
+ @property
+ def wpr_mode(self):
+ return self.options.wpr_mode
+
+ @property
+ def supports_tab_control(self):
+ raise NotImplementedError()
+
+ @property
+ def tab_list_backend(self):
+ return self._tab_list_backend
+
+ @property
+ def supports_tracing(self):
+ raise NotImplementedError()
+
+ def StartTracing(self, custom_categories=None,
+ timeout=web_contents.DEFAULT_WEB_CONTENTS_TIMEOUT):
+ raise NotImplementedError()
+
+ def StopTracing(self):
+ raise NotImplementedError()
+
+ def GetTraceResultAndReset(self):
+ raise NotImplementedError()
+
+ def GetRemotePort(self, _):
+ return util.GetAvailableLocalPort()
+
+ def Start(self):
+ raise NotImplementedError()
+
+ def CreateForwarder(self, *port_pairs):
+ raise NotImplementedError()
+
+ def IsBrowserRunning(self):
+ raise NotImplementedError()
+
+ def GetStandardOutput(self):
+ raise NotImplementedError()
+
+ def GetStackTrace(self):
+ raise NotImplementedError()
+
+class DoNothingForwarder(object):
+ def __init__(self, *port_pairs):
+ self._host_port = port_pairs[0].local_port
+
+ @property
+ def url(self):
+ assert self._host_port
+ return 'http://127.0.0.1:%i' % self._host_port
+
+ def Close(self):
+ self._host_port = None
diff --git a/tools/telemetry/telemetry/core/backends/chrome/__init__.py b/tools/telemetry/telemetry/core/backends/chrome/__init__.py
new file mode 100644
index 0000000..9228df8
--- /dev/null
+++ b/tools/telemetry/telemetry/core/backends/chrome/__init__.py
@@ -0,0 +1,3 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
diff --git a/tools/telemetry/telemetry/core/chrome/browser_backend.py b/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend.py
index c875f2a..13bb286 100644
--- a/tools/telemetry/telemetry/core/chrome/browser_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend.py
@@ -1,41 +1,38 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import urllib2
import httplib
-import socket
import json
import re
+import socket
import sys
+import urllib2
-from telemetry.core import util
from telemetry.core import exceptions
from telemetry.core import user_agent
+from telemetry.core import util
from telemetry.core import web_contents
from telemetry.core import wpr_modes
from telemetry.core import wpr_server
+from telemetry.core.backends import browser_backend
from telemetry.core.chrome import extension_dict_backend
+from telemetry.core.chrome import misc_web_contents_backend
from telemetry.core.chrome import tab_list_backend
from telemetry.core.chrome import tracing_backend
-from telemetry.core.chrome import misc_web_contents_backend
from telemetry.unittest import options_for_unittests
-class ExtensionsNotSupportedException(Exception):
- pass
-
-class BrowserBackend(object):
- """A base class for browser backends. Provides basic functionality
+class ChromeBrowserBackend(browser_backend.BrowserBackend):
+ """An abstract class for chrome browser backends. Provides basic functionality
once a remote-debugger port has been established."""
-
- WEBPAGEREPLAY_HOST = '127.0.0.1'
+ # It is OK to have abstract methods. pylint: disable=W0223
def __init__(self, is_content_shell, supports_extensions, options):
- self.browser_type = options.browser_type
- self.is_content_shell = is_content_shell
- self._supports_extensions = supports_extensions
- self.options = options
- self._browser = None
+ super(ChromeBrowserBackend, self).__init__(
+ is_content_shell=is_content_shell,
+ supports_extensions=supports_extensions,
+ options=options,
+ tab_list_backend=tab_list_backend.TabListBackend)
self._port = None
self._inspector_protocol_version = 0
@@ -54,24 +51,13 @@ class BrowserBackend(object):
'extensions.\n')
self._misc_web_contents_backend = (
misc_web_contents_backend.MiscWebContentsBackend(self))
- self._tab_list_backend = tab_list_backend.TabListBackend(self)
self._extension_dict_backend = None
if supports_extensions:
self._extension_dict_backend = (
extension_dict_backend.ExtensionDictBackend(self))
- def SetBrowser(self, browser):
- self._browser = browser
- self._tab_list_backend.Init()
-
- @property
- def browser(self):
- return self._browser
-
- @property
- def supports_extensions(self):
- """True if this browser backend supports extensions."""
- return self._supports_extensions
+ def AddReplayServerOptions(self, options):
+ options.append('--no-dns_forwarding')
@property
def misc_web_contents_backend(self):
@@ -80,10 +66,6 @@ class BrowserBackend(object):
return self._misc_web_contents_backend
@property
- def tab_list_backend(self):
- return self._tab_list_backend
-
- @property
def extension_dict_backend(self):
return self._extension_dict_backend
@@ -118,10 +100,6 @@ class BrowserBackend(object):
return args
- @property
- def wpr_mode(self):
- return self.options.wpr_mode
-
def _WaitForBrowserToComeUp(self, timeout=None):
def IsBrowserUp():
try:
@@ -239,37 +217,7 @@ class BrowserBackend(object):
return 'browser'
return m.group(1)
- def GetRemotePort(self, _):
- return util.GetAvailableLocalPort()
-
- def Start(self):
- raise NotImplementedError()
-
def Close(self):
if self._tracing_backend:
self._tracing_backend.Close()
self._tracing_backend = None
-
- def CreateForwarder(self, *port_pairs):
- raise NotImplementedError()
-
- def IsBrowserRunning(self):
- raise NotImplementedError()
-
- def GetStandardOutput(self):
- raise NotImplementedError()
-
- def GetStackTrace(self):
- raise NotImplementedError()
-
-class DoNothingForwarder(object):
- def __init__(self, *port_pairs):
- self._host_port = port_pairs[0].local_port
-
- @property
- def url(self):
- assert self._host_port
- return 'http://127.0.0.1:%i' % self._host_port
-
- def Close(self):
- self._host_port = None
diff --git a/tools/telemetry/telemetry/core/browser.py b/tools/telemetry/telemetry/core/browser.py
index a069976..f8dbb39 100644
--- a/tools/telemetry/telemetry/core/browser.py
+++ b/tools/telemetry/telemetry/core/browser.py
@@ -11,7 +11,7 @@ from telemetry.core import tab_list
from telemetry.core import temporary_http_server
from telemetry.core import wpr_modes
from telemetry.core import wpr_server
-from telemetry.core.chrome import browser_backend
+from telemetry.core.backends import browser_backend
from telemetry.core.platform.profiler import profiler_finder
class Browser(object):
diff --git a/tools/telemetry/telemetry/core/chrome/android_browser_backend.py b/tools/telemetry/telemetry/core/chrome/android_browser_backend.py
index 4b72d99..839bbc2 100644
--- a/tools/telemetry/telemetry/core/chrome/android_browser_backend.py
+++ b/tools/telemetry/telemetry/core/chrome/android_browser_backend.py
@@ -10,8 +10,9 @@ import time
from telemetry.core import exceptions
from telemetry.core import util
+from telemetry.core.backends import browser_backend
+from telemetry.core.backends.chrome import chrome_browser_backend
from telemetry.core.chrome import adb_commands
-from telemetry.core.chrome import browser_backend
class AndroidBrowserBackendSettings(object):
@@ -142,7 +143,7 @@ class WebviewBackendSettings(AndroidBrowserBackendSettings):
return '/data/data/%s/app_webview/' % self.package
-class AndroidBrowserBackend(browser_backend.BrowserBackend):
+class AndroidBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
"""The backend for controlling a browser instance running on Android.
"""
def __init__(self, options, backend_settings):
diff --git a/tools/telemetry/telemetry/core/chrome/cros_browser_backend.py b/tools/telemetry/telemetry/core/chrome/cros_browser_backend.py
index ca27e49..a3daeee 100644
--- a/tools/telemetry/telemetry/core/chrome/cros_browser_backend.py
+++ b/tools/telemetry/telemetry/core/chrome/cros_browser_backend.py
@@ -7,9 +7,10 @@ import subprocess
from telemetry.core import exceptions
from telemetry.core import util
-from telemetry.core.chrome import browser_backend
+from telemetry.core.backends import browser_backend
+from telemetry.core.backends.chrome import chrome_browser_backend
-class CrOSBrowserBackend(browser_backend.BrowserBackend):
+class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
# Some developers' workflow includes running the Chrome process from
# /usr/local/... instead of the default location. We have to check for both
# paths in order to support this workflow.
diff --git a/tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py b/tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py
index ea2b6c1..0e90658 100644
--- a/tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py
+++ b/tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py
@@ -9,9 +9,10 @@ import sys
import tempfile
from telemetry.core import util
-from telemetry.core.chrome import browser_backend
+from telemetry.core.backends import browser_backend
+from telemetry.core.backends.chrome import chrome_browser_backend
-class DesktopBrowserBackend(browser_backend.BrowserBackend):
+class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
"""The backend for controlling a locally-executed browser instance, on Linux,
Mac or Windows.
"""
diff --git a/tools/telemetry/telemetry/core/chrome/desktop_browser_finder.py b/tools/telemetry/telemetry/core/chrome/desktop_browser_finder.py
index 3dfc8b5..c2f625e 100644
--- a/tools/telemetry/telemetry/core/chrome/desktop_browser_finder.py
+++ b/tools/telemetry/telemetry/core/chrome/desktop_browser_finder.py
@@ -11,14 +11,12 @@ import subprocess
import sys
from telemetry.core import browser
+from telemetry.core import platform as core_platform
from telemetry.core import possible_browser
from telemetry.core import profile_types
from telemetry.core import util
from telemetry.core.chrome import cros_interface
from telemetry.core.chrome import desktop_browser_backend
-from telemetry.core.platform import linux_platform_backend
-from telemetry.core.platform import mac_platform_backend
-from telemetry.core.platform import win_platform_backend
ALL_BROWSER_TYPES = ','.join([
'exact',
@@ -52,16 +50,8 @@ class PossibleDesktopBrowser(possible_browser.PossibleBrowser):
self._options, self._local_executable, self._flash_path,
self._is_content_shell,
delete_profile_dir_after_run=delete_profile_dir_after_run)
- if sys.platform.startswith('linux'):
- p = linux_platform_backend.LinuxPlatformBackend()
- elif sys.platform == 'darwin':
- p = mac_platform_backend.MacPlatformBackend()
- elif sys.platform == 'win32':
- p = win_platform_backend.WinPlatformBackend()
- else:
- raise NotImplementedError()
-
- b = browser.Browser(backend, p)
+ b = browser.Browser(backend,
+ core_platform.CreatePlatformBackendForCurrentOS())
return b
def Create(self):
diff --git a/tools/telemetry/telemetry/core/platform/__init__.py b/tools/telemetry/telemetry/core/platform/__init__.py
index 5b88286..3729159 100644
--- a/tools/telemetry/telemetry/core/platform/__init__.py
+++ b/tools/telemetry/telemetry/core/platform/__init__.py
@@ -2,6 +2,12 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import sys
+
+from telemetry.core.platform import linux_platform_backend
+from telemetry.core.platform import mac_platform_backend
+from telemetry.core.platform import win_platform_backend
+
class Platform(object):
"""The platform that the target browser is running on.
@@ -104,3 +110,14 @@ class Platform(object):
This function does not require root or administrator access."""
return self._platform_backend.FlushSystemCacheForDirectory(
directory, ignoring=ignoring)
+
+
+def CreatePlatformBackendForCurrentOS():
+ if sys.platform.startswith('linux'):
+ return linux_platform_backend.LinuxPlatformBackend()
+ elif sys.platform == 'darwin':
+ return mac_platform_backend.MacPlatformBackend()
+ elif sys.platform == 'win32':
+ return win_platform_backend.WinPlatformBackend()
+ else:
+ raise NotImplementedError()
diff --git a/tools/telemetry/telemetry/core/wpr_server.py b/tools/telemetry/telemetry/core/wpr_server.py
index 6904d98..88abc5b 100644
--- a/tools/telemetry/telemetry/core/wpr_server.py
+++ b/tools/telemetry/telemetry/core/wpr_server.py
@@ -17,6 +17,17 @@ import webpagereplay # pylint: disable=F0401
def GetChromeFlags(replay_host, http_port, https_port):
return webpagereplay.GetChromeFlags(replay_host, http_port, https_port)
+class _WebPageReplayServer(webpagereplay.ReplayServer): # pylint: disable=W0232
+ def _AddDefaultReplayOptions(self):
+ """Override. Because '--no-dns_forwarding' is added by default in parent
+ while webdriver-based backends need dns forwarding."""
+ self.replay_options += [
+ '--port', str(self._http_port),
+ '--ssl_port', str(self._https_port),
+ '--use_closest_match',
+ '--log_level', 'warning'
+ ]
+
class ReplayServer(object):
def __init__(self, browser_backend, path, is_record_mode, is_append_mode,
make_javascript_deterministic, webpagereplay_host,
@@ -47,7 +58,8 @@ class ReplayServer(object):
options.append('--record')
if not make_javascript_deterministic:
options.append('--inject_scripts=')
- self._web_page_replay = webpagereplay.ReplayServer(
+ browser_backend.AddReplayServerOptions(options)
+ self._web_page_replay = _WebPageReplayServer(
path,
self._webpagereplay_host,
self._webpagereplay_local_http_port,