Index: tools/telemetry/telemetry/internal/backends/mandoline/android_mandoline_finder.py |
diff --git a/tools/telemetry/telemetry/internal/backends/mandoline/desktop_mandoline_finder.py b/tools/telemetry/telemetry/internal/backends/mandoline/android_mandoline_finder.py |
similarity index 29% |
copy from tools/telemetry/telemetry/internal/backends/mandoline/desktop_mandoline_finder.py |
copy to tools/telemetry/telemetry/internal/backends/mandoline/android_mandoline_finder.py |
index ea1e4f782a269ef05783f8df521df99ed2d5da4f..35e5859a5c7f84373cf6192609d2269db36cfd4c 100644 |
--- a/tools/telemetry/telemetry/internal/backends/mandoline/desktop_mandoline_finder.py |
+++ b/tools/telemetry/telemetry/internal/backends/mandoline/android_mandoline_finder.py |
@@ -1,53 +1,52 @@ |
# Copyright 2015 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. |
-"""Finds desktop mandoline browsers that can be controlled by telemetry.""" |
+ |
+"""Finds android mandoline browsers that can be controlled by telemetry.""" |
import os |
-import sys |
-from telemetry.core import exceptions |
-from telemetry.core import platform as platform_module |
-from telemetry.internal.backends.mandoline import desktop_mandoline_backend |
+from telemetry.core import platform |
+from telemetry.core import util |
+from telemetry.internal.backends.mandoline import android_mandoline_backend |
from telemetry.internal.browser import browser |
from telemetry.internal.browser import possible_browser |
-from telemetry.internal.platform import desktop_device |
+from telemetry.internal.platform import android_device |
from telemetry.internal.util import path |
+util.AddDirToPythonPath(util.GetChromiumSrcDir(), 'build', 'android') |
+from pylib.utils import apk_helper |
+ |
-class PossibleDesktopMandolineBrowser(possible_browser.PossibleBrowser): |
- """A desktop mandoline browser that can be controlled.""" |
+class PossibleAndroidMandolineBrowser(possible_browser.PossibleBrowser): |
+ """A launchable android mandoline browser instance.""" |
- def __init__(self, browser_type, finder_options, executable, |
- browser_directory): |
- target_os = sys.platform.lower() |
- super(PossibleDesktopMandolineBrowser, self).__init__( |
- browser_type, target_os, supports_tab_control=False) |
+ def __init__(self, browser_type, finder_options, android_platform, build_path, |
+ local_apk): |
+ super(PossibleAndroidMandolineBrowser, self).__init__( |
+ browser_type, 'android', supports_tab_control=False) |
assert browser_type in FindAllBrowserTypes(finder_options), ( |
- 'Please add %s to desktop_mandoline_finder.FindAllBrowserTypes' % |
- browser_type) |
- self._local_executable = executable |
- self._browser_directory = browser_directory |
+ 'Please add %s to android_mandoline_finder.FindAllBrowserTypes' % |
+ browser_type) |
+ self._platform = android_platform |
+ self._platform_backend = ( |
+ android_platform._platform_backend) # pylint: disable=W0212 |
+ self._build_path = build_path |
+ self._local_apk = local_apk |
def __repr__(self): |
- return 'PossibleDesktopMandolineBrowser(type=%s, executable=%s)' % ( |
- self.browser_type, self._local_executable) |
+ return ('PossibleAndroidMandolineBrowser(browser_type=%s)' % |
+ self.browser_type) |
def _InitPlatformIfNeeded(self): |
- if self._platform: |
- return |
- |
- self._platform = platform_module.GetHostPlatform() |
- |
- # pylint: disable=W0212 |
- self._platform_backend = self._platform._platform_backend |
+ pass |
def Create(self, finder_options): |
self._InitPlatformIfNeeded() |
- |
- mandoline_backend = desktop_mandoline_backend.DesktopMandolineBackend( |
+ mandoline_backend = android_mandoline_backend.AndroidMandolineBackend( |
self._platform_backend, finder_options.browser_options, |
- self._local_executable, self._browser_directory) |
+ finder_options.target_arch, self.browser_type, self._build_path, |
+ apk_helper.GetPackageName(self._local_apk)) |
return browser.Browser( |
mandoline_backend, self._platform_backend, self._credentials_path) |
@@ -56,88 +55,65 @@ class PossibleDesktopMandolineBrowser(possible_browser.PossibleBrowser): |
return False |
return True |
+ def HaveLocalAPK(self): |
+ return self._local_apk and os.path.exists(self._local_apk) |
+ |
def UpdateExecutableIfNeeded(self): |
pass |
def last_modification_time(self): |
- if os.path.exists(self._local_executable): |
- return os.path.getmtime(self._local_executable) |
+ if self.HaveLocalAPK(): |
+ return os.path.getmtime(self._local_apk) |
return -1 |
+ |
def SelectDefaultBrowser(possible_browsers): |
+ """Returns the newest possible browser.""" |
if not possible_browsers: |
return None |
return max(possible_browsers, key=lambda b: b.last_modification_time()) |
+ |
def CanFindAvailableBrowsers(): |
- os_name = platform_module.GetHostPlatform().GetOSName() |
- return os_name == 'win' or os_name == 'linux' |
- |
-def CanPossiblyHandlePath(target_path): |
- _, extension = os.path.splitext(target_path.lower()) |
- if sys.platform.startswith('linux'): |
- return not extension |
- elif sys.platform.startswith('win'): |
- return extension == '.exe' |
- return False |
- |
-def FindAllBrowserTypes(_): |
- return [ |
- 'mandoline-debug', |
- 'mandoline-debug_x64', |
- 'mandoline-release', |
- 'mandoline-release_x64',] |
+ return android_device.CanDiscoverDevices() |
-def FindAllAvailableBrowsers(finder_options, device): |
- """Finds all the desktop mandoline browsers available on this machine.""" |
- if not isinstance(device, desktop_device.DesktopDevice): |
- return [] |
- browsers = [] |
+def FindAllBrowserTypes(_options): |
+ return [ |
+ 'android-mandoline-debug', |
+ 'android-mandoline-release',] |
+ |
- if not CanFindAvailableBrowsers(): |
+def _FindAllPossibleBrowsers(finder_options, android_platform): |
+ if not android_platform or not CanFindAvailableBrowsers(): |
return [] |
- # Look for a browser in the standard chrome build locations. |
+ possible_browsers = [] |
+ |
if finder_options.chrome_root: |
chrome_root = finder_options.chrome_root |
else: |
chrome_root = path.GetChromiumSrcDir() |
- if sys.platform.startswith('linux'): |
- mandoline_app_name = 'mandoline' |
- elif sys.platform.startswith('win'): |
- mandoline_app_name = 'mandoline.exe' |
- else: |
- raise Exception('Platform not recognized') |
- |
- # Add the explicit browser executable if given and we can handle it. |
- if (finder_options.browser_executable and |
- CanPossiblyHandlePath(finder_options.browser_executable)): |
- normalized_executable = os.path.expanduser( |
- finder_options.browser_executable) |
- if path.IsExecutable(normalized_executable): |
- browser_directory = os.path.dirname(finder_options.browser_executable) |
- browsers.append(PossibleDesktopMandolineBrowser('exact', finder_options, |
- normalized_executable, |
- browser_directory)) |
- else: |
- raise exceptions.PathMissingError( |
- '%s specified by --browser-executable does not exist', |
- normalized_executable) |
- |
- def AddIfFound(browser_type, build_dir, type_dir, app_name): |
- browser_directory = os.path.join(chrome_root, build_dir, type_dir) |
- app = os.path.join(browser_directory, app_name) |
- if path.IsExecutable(app): |
- browsers.append(PossibleDesktopMandolineBrowser( |
- browser_type, finder_options, app, browser_directory)) |
- return True |
- return False |
- |
# Add local builds. |
for build_dir, build_type in path.GetBuildDirectories(): |
- AddIfFound('mandoline-' + build_type.lower(), build_dir, build_type, |
- mandoline_app_name) |
+ build_path = os.path.join(chrome_root, build_dir, build_type) |
+ local_apk = os.path.join(build_path, 'apks', 'Mandoline.apk') |
+ if os.path.exists(local_apk): |
+ possible_browsers.append(PossibleAndroidMandolineBrowser( |
+ 'android-mandoline-' + build_type.lower(), finder_options, |
+ android_platform, build_path, local_apk)) |
- return browsers |
+ return possible_browsers |
+ |
+ |
+def FindAllAvailableBrowsers(finder_options, device): |
+ """Finds all the possible browsers to run on the device. |
+ |
+ The device is either the only device on the host platform, |
+ or |finder_options| specifies a particular device. |
+ """ |
+ if not isinstance(device, android_device.AndroidDevice): |
+ return [] |
+ android_platform = platform.GetPlatformForDevice(device, finder_options) |
+ return _FindAllPossibleBrowsers(finder_options, android_platform) |