| Index: tools/telemetry/telemetry/core/platform/android_platform_backend.py
|
| diff --git a/tools/telemetry/telemetry/core/platform/android_platform_backend.py b/tools/telemetry/telemetry/core/platform/android_platform_backend.py
|
| index 0fcd4c64abf47cccdbf7c0066a5ec368bc8a5300..bc23118782427f6ac5873388832b539a1d6f45bd 100644
|
| --- a/tools/telemetry/telemetry/core/platform/android_platform_backend.py
|
| +++ b/tools/telemetry/telemetry/core/platform/android_platform_backend.py
|
| @@ -37,13 +37,13 @@ import platformsettings # pylint: disable=import-error
|
|
|
| # Get build/android scripts into our path.
|
| util.AddDirToPythonPath(util.GetChromiumSrcDir(), 'build', 'android')
|
| +from pylib import constants # pylint: disable=F0401
|
| +from pylib import screenshot # pylint: disable=F0401
|
| from pylib.device import battery_utils # pylint: disable=F0401
|
| from pylib.perf import cache_control # pylint: disable=F0401
|
| from pylib.perf import perf_control # pylint: disable=F0401
|
| from pylib.perf import thermal_throttle # pylint: disable=F0401
|
| from pylib.utils import device_temp_file # pylint: disable=F0401
|
| -from pylib import constants # pylint: disable=F0401
|
| -from pylib import screenshot # pylint: disable=F0401
|
|
|
| try:
|
| from pylib.perf import surface_stats_collector # pylint: disable=import-error
|
| @@ -51,6 +51,13 @@ except Exception:
|
| surface_stats_collector = None
|
|
|
|
|
| +_DEVICE_COPY_SCRIPT_FILE = os.path.join(
|
| + constants.DIR_SOURCE_ROOT, 'build', 'android', 'pylib',
|
| + 'efficient_android_directory_copy.sh')
|
| +_DEVICE_COPY_SCRIPT_LOCATION = (
|
| + '/data/local/tmp/efficient_android_directory_copy.sh')
|
| +
|
| +
|
| class AndroidPlatformBackend(
|
| linux_based_platform_backend.LinuxBasedPlatformBackend):
|
| def __init__(self, device, finder_options):
|
| @@ -76,8 +83,9 @@ class AndroidPlatformBackend(
|
| self._perf_tests_setup = perf_control.PerfControl(self._device)
|
| self._thermal_throttle = thermal_throttle.ThermalThrottle(self._device)
|
| self._raw_display_frame_rate_measurements = []
|
| - self._can_access_protected_file_contents = \
|
| - self._device.old_interface.CanAccessProtectedFileContents()
|
| + self._can_access_protected_file_contents = (
|
| + self._device.HasRoot() or self._device.NeedsSU())
|
| + self._device_copy_script = None
|
| power_controller = power_monitor_controller.PowerMonitorController([
|
| monsoon_power_monitor.MonsoonPowerMonitor(self._device, self),
|
| android_ds2784_power_monitor.DS2784PowerMonitor(self._device, self),
|
| @@ -201,11 +209,11 @@ class AndroidPlatformBackend(
|
| if not android_prebuilt_profiler_helper.InstallOnDevice(
|
| self._device, 'purge_ashmem'):
|
| raise Exception('Error installing purge_ashmem.')
|
| - (status, output) = self._device.old_interface.GetAndroidToolStatusAndOutput(
|
| + output = self._device.RunShellCommand(
|
| android_prebuilt_profiler_helper.GetDevicePath('purge_ashmem'),
|
| - log_result=True)
|
| - if status != 0:
|
| - raise Exception('Error while purging ashmem: ' + '\n'.join(output))
|
| + check_return=True)
|
| + for l in output:
|
| + logging.info(l)
|
|
|
| def GetMemoryStats(self, pid):
|
| memory_usage = self._device.GetMemoryUsageForPid(pid)
|
| @@ -530,7 +538,7 @@ class AndroidPlatformBackend(
|
| self._device.PushChangedFiles([(new_profile_dir, saved_profile_location)])
|
|
|
| profile_dir = self._GetProfileDir(package)
|
| - self._device.old_interface.EfficientDeviceDirectoryCopy(
|
| + self._EfficientDeviceDirectoryCopy(
|
| saved_profile_location, profile_dir)
|
| dumpsys = self._device.RunShellCommand('dumpsys package %s' % package)
|
| id_line = next(line for line in dumpsys if 'userId=' in line)
|
| @@ -544,6 +552,16 @@ class AndroidPlatformBackend(
|
| self._device.RunShellCommand(
|
| 'chown %s.%s %s' % (uid, uid, extended_path))
|
|
|
| + def _EfficientDeviceDirectoryCopy(self, source, dest):
|
| + if not self._device_copy_script:
|
| + self._device.adb.Push(
|
| + _DEVICE_COPY_SCRIPT_FILE,
|
| + _DEVICE_COPY_SCRIPT_LOCATION)
|
| + self._device_copy_script = _DEVICE_COPY_SCRIPT_FILE
|
| + self._device.RunShellCommand(
|
| + ['sh', self._device_copy_script, source, dest],
|
| + check_return=True)
|
| +
|
| def RemoveProfile(self, package, ignore_list):
|
| """Delete application profile on device.
|
|
|
| @@ -574,17 +592,14 @@ class AndroidPlatformBackend(
|
| # pulled down is really needed e.g. .pak files.
|
| if not os.path.exists(output_profile_path):
|
| os.makedirs(output_profile_path)
|
| - files = self._device.RunShellCommand('ls "%s"' % profile_dir)
|
| + files = self._device.RunShellCommand(
|
| + ['ls', profile_dir], check_return=True)
|
| for f in files:
|
| # Don't pull lib, since it is created by the installer.
|
| if f != 'lib':
|
| source = '%s%s' % (profile_dir, f)
|
| dest = os.path.join(output_profile_path, f)
|
| - # self._adb.Pull(source, dest) doesn't work because its timeout
|
| - # is fixed in android's adb_interface at 60 seconds, which may
|
| - # be too short to pull the cache.
|
| - cmd = 'pull %s %s' % (source, dest)
|
| - self._device.old_interface.Adb().SendCommand(cmd, timeout_time=240)
|
| + self._device.PullFile(source, dest, timeout=240)
|
|
|
| def _GetProfileDir(self, package):
|
| """Returns the on-device location where the application profile is stored
|
|
|