| 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 ea432b5a030582419038ce862edf5ba9bb1aac1b..875e0d9014fcfaf2ba554c4da414b0bd666f23b8 100644
|
| --- a/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py
|
| +++ b/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py
|
| @@ -6,25 +6,15 @@
|
|
|
| import logging
|
| import os
|
| -import re
|
| -import subprocess
|
| -import sys
|
|
|
| from telemetry import decorators
|
| from telemetry.core import browser
|
| -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
|
|
|
| -try:
|
| - import psutil # pylint: disable=F0401
|
| -except ImportError:
|
| - psutil = None
|
| -
|
|
|
| CHROME_PACKAGE_NAMES = {
|
| 'android-content-shell':
|
| @@ -92,7 +82,7 @@ class PossibleAndroidBrowser(possible_browser.PossibleBrowser):
|
| candidate_apks.append((last_changed, apk_full_name))
|
|
|
| if candidate_apks:
|
| - # Find the canadidate .apk with the latest modification time.
|
| + # Find the candidate .apk with the latest modification time.
|
| newest_apk_path = sorted(candidate_apks)[-1][1]
|
| self._local_apk = newest_apk_path
|
|
|
| @@ -146,85 +136,20 @@ def SelectDefaultBrowser(possible_browsers):
|
|
|
|
|
| def CanFindAvailableBrowsers():
|
| - if not adb_commands.IsAndroidSupported():
|
| - logging.info('Android build commands unavailable on this machine. Have '
|
| - 'you installed Android build dependencies?')
|
| - return False
|
| -
|
| - try:
|
| - with open(os.devnull, 'w') as devnull:
|
| - proc = subprocess.Popen(
|
| - ['adb', 'devices'],
|
| - stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=devnull)
|
| - stdout, _ = proc.communicate()
|
| - if re.search(re.escape('????????????\tno permissions'), stdout) != None:
|
| - logging.warn('adb devices reported a permissions error. Consider '
|
| - 'restarting adb as root:')
|
| - logging.warn(' adb kill-server')
|
| - logging.warn(' sudo `which adb` devices\n\n')
|
| - return True
|
| - except OSError:
|
| - platform_tools_path = os.path.join(util.GetChromiumSrcDir(),
|
| - 'third_party', 'android_tools', 'sdk', 'platform-tools')
|
| - if (sys.platform.startswith('linux') and
|
| - os.path.exists(os.path.join(platform_tools_path, 'adb'))):
|
| - os.environ['PATH'] = os.pathsep.join([platform_tools_path,
|
| - os.environ['PATH']])
|
| - return True
|
| - return False
|
| + android_device.CanDiscoverDevices()
|
|
|
|
|
| def FindAllBrowserTypes(_options):
|
| return CHROME_PACKAGE_NAMES.keys()
|
|
|
|
|
| -def FindAllAvailableBrowsers(finder_options):
|
| - """Finds all the desktop browsers available on this machine."""
|
| - if not CanFindAvailableBrowsers():
|
| - logging.info('No adb command found. ' +
|
| - 'Will not try searching for Android browsers.')
|
| - return []
|
| - if finder_options.android_device:
|
| - devices = [android_device.AndroidDevice(
|
| - finder_options.android_device,
|
| - enable_performance_mode=not finder_options.no_performance_mode)]
|
| - 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.device_id for d in devices]))
|
| - return []
|
| -
|
| - try:
|
| - android_platform = platform.GetPlatformForDevice(devices[0])
|
| - except exceptions.PlatformError:
|
| +def _FindAllPossibleBrowsers(finder_options, android_platform):
|
| + """Testable version of FindAllAvailableBrowsers."""
|
| + if not android_platform:
|
| 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.
|
| - if psutil:
|
| - for proc in psutil.process_iter():
|
| - try:
|
| - if 'adb' in proc.name:
|
| - if 'cpu_affinity' in dir(proc):
|
| - proc.cpu_affinity([0]) # New versions of psutil.
|
| - elif 'set_cpu_affinity' in dir(proc):
|
| - proc.set_cpu_affinity([0]) # Older versions.
|
| - else:
|
| - logging.warn(
|
| - 'Cannot set CPU affinity due to stale psutil version: %s',
|
| - '.'.join(str(x) for x in psutil.version_info))
|
| - except (psutil.NoSuchProcess, psutil.AccessDenied):
|
| - logging.warn('Failed to set adb process CPU affinity')
|
| -
|
| possible_browsers = []
|
| for name, package_info in CHROME_PACKAGE_NAMES.iteritems():
|
| - [package, backend_settings, local_apk] = package_info
|
| + package, backend_settings, local_apk = package_info
|
| b = PossibleAndroidBrowser(name,
|
| finder_options,
|
| android_platform,
|
| @@ -233,3 +158,16 @@ def FindAllAvailableBrowsers(finder_options):
|
| if b.platform.CanLaunchApplication(package) or b.HaveLocalAPK():
|
| possible_browsers.append(b)
|
| return possible_browsers
|
| +
|
| +
|
| +def FindAllAvailableBrowsers(finder_options):
|
| + """Finds all the possible browsers on one device.
|
| +
|
| + The device is either the only device on the host platform,
|
| + or |finder_options| specifies a particular device.
|
| + """
|
| + device = android_device.GetDevice(finder_options)
|
| + if not device:
|
| + return []
|
| + android_platform = platform.GetPlatformForDevice(device)
|
| + return _FindAllPossibleBrowsers(finder_options, android_platform)
|
|
|