| Index: build/android/pylib/device/device_utils.py
|
| diff --git a/build/android/pylib/device/device_utils.py b/build/android/pylib/device/device_utils.py
|
| index a1b4117f7b963887e8516526ec0fc878ba5c1c8a..eba5e0203a2d247223b9628284fb96708db924e2 100644
|
| --- a/build/android/pylib/device/device_utils.py
|
| +++ b/build/android/pylib/device/device_utils.py
|
| @@ -412,8 +412,8 @@ class DeviceUtils(object):
|
|
|
| @decorators.WithTimeoutAndRetriesFromInstance()
|
| def RunShellCommand(self, cmd, check_return=False, cwd=None, env=None,
|
| - as_root=False, single_line=False,
|
| - timeout=None, retries=None):
|
| + as_root=False, single_line=False, timeout=None,
|
| + retries=None):
|
| """Run an ADB shell command.
|
|
|
| The command to run |cmd| should be a sequence of program arguments or else
|
| @@ -847,7 +847,7 @@ class DeviceUtils(object):
|
| self.RunShellCommand(
|
| ['unzip', zip_on_device],
|
| as_root=True,
|
| - env={'PATH': '$PATH:%s' % install_commands.BIN_DIR},
|
| + env={'PATH': '%s:$PATH' % install_commands.BIN_DIR},
|
| check_return=True)
|
| finally:
|
| if zip_proc.is_alive():
|
| @@ -1297,23 +1297,6 @@ class DeviceUtils(object):
|
| return host_path
|
|
|
| @decorators.WithTimeoutAndRetriesFromInstance()
|
| - def GetIOStats(self, timeout=None, retries=None):
|
| - """Gets cumulative disk IO stats since boot for all processes.
|
| -
|
| - Args:
|
| - timeout: timeout in seconds
|
| - retries: number of retries
|
| -
|
| - Returns:
|
| - A dict containing |num_reads|, |num_writes|, |read_ms|, and |write_ms|.
|
| -
|
| - Raises:
|
| - CommandTimeoutError on timeout.
|
| - DeviceUnreachableError on missing device.
|
| - """
|
| - return self.old_interface.GetIoStats()
|
| -
|
| - @decorators.WithTimeoutAndRetriesFromInstance()
|
| def GetMemoryUsageForPid(self, pid, timeout=None, retries=None):
|
| """Gets the memory usage for the given PID.
|
|
|
| @@ -1349,6 +1332,41 @@ class DeviceUtils(object):
|
| """Returns the device serial."""
|
| return self.adb.GetDeviceSerial()
|
|
|
| + @decorators.WithTimeoutAndRetriesFromInstance()
|
| + def GetDevicePieWrapper(self, timeout=None, retries=None):
|
| + """Gets the absolute path to the run_pie wrapper on the device.
|
| +
|
| + We have to build our device executables to be PIE, but they need to be able
|
| + to run on versions of android that don't support PIE (i.e. ICS and below).
|
| + To do so, we push a wrapper to the device that lets older android versions
|
| + run PIE executables. This method pushes that wrapper to the device if
|
| + necessary and returns the path to it.
|
| +
|
| + This is exposed publicly to allow clients to write scripts using run_pie
|
| + (e.g. md5sum.CalculateDeviceMd5Sum).
|
| +
|
| + Args:
|
| + timeout: timeout in seconds
|
| + retries: number of retries
|
| +
|
| + Returns:
|
| + The path to the PIE wrapper on the device, or an empty string if the
|
| + device does not require the wrapper.
|
| + """
|
| + if 'run_pie' not in self._cache:
|
| + pie = ''
|
| + if (self.build_version_sdk <
|
| + constants.ANDROID_SDK_VERSION_CODES.JELLY_BEAN):
|
| + host_pie_path = os.path.join(constants.GetOutDirectory(), 'run_pie')
|
| + if not os.path.exists(host_pie_path):
|
| + raise device_errors.CommandFailedError('Please build run_pie')
|
| + pie = '%s/run_pie' % constants.TEST_EXECUTABLE_DIR
|
| + self.adb.Push(host_pie_path, pie)
|
| +
|
| + self._cache['run_pie'] = pie
|
| +
|
| + return self._cache['run_pie']
|
| +
|
| @classmethod
|
| def parallel(cls, devices=None, async=False):
|
| """Creates a Parallelizer to operate over the provided list of devices.
|
|
|