Index: tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py |
diff --git a/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py b/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py |
index 9890ea4b0c6d6c3c133abeee9556d8ced83702eb..315e1f35245b57697ef6893f0c17f1e37b71f63c 100644 |
--- a/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py |
+++ b/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py |
@@ -4,7 +4,7 @@ |
"""Finds android browsers that can be controlled by telemetry.""" |
-import logging as real_logging |
+import logging |
import os |
import re |
import subprocess |
@@ -12,13 +12,13 @@ import sys |
from telemetry import decorators |
from telemetry.core import browser |
-from telemetry.core import platform |
+from telemetry.core import exceptions |
from telemetry.core import possible_browser |
+from telemetry.core import platform |
from telemetry.core import util |
from telemetry.core.backends import adb_commands |
+from telemetry.core.platform import android_device |
from telemetry.core.backends.chrome import android_browser_backend |
-from telemetry.core.platform import android_platform_backend |
-from telemetry.core.platform.profiler import monsoon |
try: |
import psutil # pylint: disable=F0401 |
@@ -69,14 +69,16 @@ CHROME_PACKAGE_NAMES = { |
class PossibleAndroidBrowser(possible_browser.PossibleBrowser): |
"""A launchable android browser instance.""" |
def __init__(self, browser_type, finder_options, android_platform, |
- platform_backend, backend_settings, apk_name): |
+ backend_settings, apk_name): |
super(PossibleAndroidBrowser, self).__init__(browser_type, 'android', |
finder_options, backend_settings.supports_tab_control) |
assert browser_type in FindAllBrowserTypes(finder_options), \ |
('Please add %s to android_browser_finder.FindAllBrowserTypes' % |
browser_type) |
self._platform = android_platform |
- self._platform_backend = platform_backend |
+ self._platform_backend = ( |
+ android_platform._platform_backend # pylint: disable=W0212 |
+ ) |
self._backend_settings = backend_settings |
self._local_apk = None |
@@ -112,7 +114,8 @@ class PossibleAndroidBrowser(possible_browser.PossibleBrowser): |
use_rndis_forwarder, |
output_profile_path=self.finder_options.output_profile_path, |
extensions_to_load=self.finder_options.extensions_to_load, |
- target_arch=self.finder_options.target_arch) |
+ target_arch=self.finder_options.target_arch, |
+ android_platform_backend=self._platform_backend) |
b = browser.Browser(backend, self._platform_backend) |
return b |
@@ -127,7 +130,7 @@ class PossibleAndroidBrowser(possible_browser.PossibleBrowser): |
@decorators.Cache |
def UpdateExecutableIfNeeded(self): |
if self.HaveLocalAPK(): |
- real_logging.warn('Installing %s on device if needed.' % self._local_apk) |
+ logging.warn('Installing %s on device if needed.' % self._local_apk) |
self.platform.InstallApplication(self._local_apk) |
def last_modification_time(self): |
@@ -146,8 +149,7 @@ def SelectDefaultBrowser(possible_browsers): |
return None |
-@decorators.Cache |
-def CanFindAvailableBrowsers(logging=real_logging): |
+def CanFindAvailableBrowsers(): |
if not adb_commands.IsAndroidSupported(): |
logging.info('Android build commands unavailable on this machine. Have ' |
'you installed Android build dependencies?') |
@@ -176,63 +178,36 @@ def CanFindAvailableBrowsers(logging=real_logging): |
return False |
-def FindAllBrowserTypes(_): |
+def FindAllBrowserTypes(_options): |
return CHROME_PACKAGE_NAMES.keys() |
-def FindAllAvailableBrowsers(finder_options, logging=real_logging): |
+def FindAllAvailableBrowsers(finder_options): |
"""Finds all the desktop browsers available on this machine.""" |
- if not CanFindAvailableBrowsers(logging=logging): |
+ if not CanFindAvailableBrowsers(): |
logging.info('No adb command found. ' + |
'Will not try searching for Android browsers.') |
return [] |
- |
- def _GetDevices(): |
- if finder_options.android_device: |
- return [finder_options.android_device] |
- else: |
- return adb_commands.GetAttachedDevices() |
- |
- devices = _GetDevices() |
- |
- if not devices: |
- try: |
- m = monsoon.Monsoon(wait=False) |
- m.SetUsbPassthrough(1) |
- m.SetVoltage(3.8) |
- m.SetMaxCurrent(8) |
- logging.warn(""" |
-Monsoon power monitor detected, but no Android devices. |
- |
-The Monsoon's power output has been enabled. Please now ensure that: |
- |
- 1. The Monsoon's front and back USB are connected to the host. |
- 2. The Device is connected to the Monsoon's main and USB channels. |
- 3. The Device is turned on. |
- |
-Waiting for device... |
-""") |
- util.WaitFor(_GetDevices, 600) |
- devices = _GetDevices() |
- if not devices: |
- raise IOError() |
- except IOError: |
- logging.info('No android devices found.') |
- return [] |
- |
- if len(devices) > 1: |
+ if finder_options.android_device: |
+ devices = [android_device.AndroidDevice(finder_options.android_device, |
+ finder_options.no_performance_mode, |
+ logging)] |
+ else: |
+ devices = android_device.AndroidDevice.GetAllConnectedDevices() |
+ |
+ if len(devices) == 0: |
+ logging.info('No android devices found.') |
+ return [] |
+ elif len(devices) > 1: |
logging.warn( |
'Multiple devices attached. Please specify one of the following:\n' + |
- '\n'.join([' --device=%s' % d for d in devices])) |
+ '\n'.join([' --device=%s' % d.device_id for d in devices])) |
return [] |
- device = devices[0] |
- adb = adb_commands.AdbCommands(device=device) |
- |
- # Trying to root the device, if possible. |
- if not adb.IsRootEnabled(): |
- # Ignore result. |
- adb.EnableAdbRoot() |
+ try: |
+ android_platform = platform.GetPlatformForDevice(devices[0]) |
+ except exceptions.PlatformError: |
+ return [] |
# Host side workaround for crbug.com/268450 (adb instability). |
# The adb server has a race which is mitigated by binding to a single core. |
@@ -251,29 +226,14 @@ Waiting for device... |
except (psutil.NoSuchProcess, psutil.AccessDenied): |
logging.warn('Failed to set adb process CPU affinity') |
- platform_backend = android_platform_backend.AndroidPlatformBackend( |
- adb.device(), finder_options.no_performance_mode) |
- android_platform = platform.Platform(platform_backend) |
- |
possible_browsers = [] |
for name, package_info in CHROME_PACKAGE_NAMES.iteritems(): |
[package, backend_settings, local_apk] = package_info |
b = PossibleAndroidBrowser(name, |
finder_options, |
android_platform, |
- platform_backend, |
- backend_settings(adb, package), |
+ backend_settings(package), |
local_apk) |
if b.platform.CanLaunchApplication(package) or b.HaveLocalAPK(): |
possible_browsers.append(b) |
- |
- if possible_browsers: |
- installed_prebuilt_tools = adb_commands.SetupPrebuiltTools(adb) |
- if not installed_prebuilt_tools: |
- logging.error( |
- 'Android device detected, however prebuilt android tools could not ' |
- 'be used. To run on Android you must build them first:\n' |
- ' $ ninja -C out/Release android_tools') |
- return [] |
- |
return possible_browsers |