Index: build/android/pylib/device/adb_wrapper.py |
diff --git a/build/android/pylib/device/adb_wrapper.py b/build/android/pylib/device/adb_wrapper.py |
index 39fe706b0bc734262f5b82cf55cfe881660d14d7..4006a21d5540611c5e23aa72f2b838293b5efadc 100644 |
--- a/build/android/pylib/device/adb_wrapper.py |
+++ b/build/android/pylib/device/adb_wrapper.py |
@@ -56,15 +56,22 @@ class AdbWrapper(object): |
# pylint: disable=unused-argument |
@classmethod |
- @decorators.WithTimeoutAndRetries |
- def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, |
- check_error=True): |
+ def _BuildAdbCmd(cls, args, device_serial): |
cmd = [constants.GetAdbPath()] |
if device_serial is not None: |
cmd.extend(['-s', device_serial]) |
cmd.extend(args) |
+ return cmd |
+ # pylint: enable=unused-argument |
+ |
+ # pylint: disable=unused-argument |
+ @classmethod |
+ @decorators.WithTimeoutAndRetries |
+ def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, |
+ check_error=True): |
status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( |
- cmd, timeout_retry.CurrentTimeoutThread().GetRemainingTime()) |
+ cls._BuildAdbCmd(args, device_serial), |
+ timeout_retry.CurrentTimeoutThread().GetRemainingTime()) |
if status != 0: |
raise device_errors.AdbCommandFailedError( |
args, output, status, device_serial) |
@@ -93,6 +100,19 @@ class AdbWrapper(object): |
device_serial=self._device_serial, |
check_error=check_error) |
+ def _IterRunDeviceAdbCmd(self, args, timeout): |
+ """Runs an adb command and returns an iterator over its output lines. |
+ |
+ Args: |
+ args: A list of arguments to adb. |
+ timeout: Timeout in seconds. |
+ |
+ Yields: |
+ The output of the command line by line. |
+ """ |
+ return cmd_helper.IterCmdOutputLines( |
+ self._BuildAdbCmd(args, self._device_serial), timeout=timeout) |
+ |
def __eq__(self, other): |
"""Consider instances equal if they refer to the same device. |
@@ -242,22 +262,20 @@ class AdbWrapper(object): |
cmd, 'path does not specify an accessible directory in the device', |
device_serial=self._device_serial) |
- def Logcat(self, filter_spec=None, timeout=_DEFAULT_TIMEOUT, |
- retries=_DEFAULT_RETRIES): |
- """Get the logcat output. |
+ def Logcat(self, filter_spec=None, timeout=None): |
+ """Get an iterator over the logcat output. |
Args: |
filter_spec: (optional) Spec to filter the logcat. |
timeout: (optional) Timeout per try in seconds. |
- retries: (optional) Number of retries to attempt. |
- Returns: |
- logcat output as a string. |
+ Yields: |
+ logcat output line by line. |
""" |
cmd = ['logcat'] |
if filter_spec is not None: |
cmd.append(filter_spec) |
- return self._RunDeviceAdbCmd(cmd, timeout, retries, check_error=False) |
+ return self._IterRunDeviceAdbCmd(cmd, timeout) |
def Forward(self, local, remote, timeout=_DEFAULT_TIMEOUT, |
retries=_DEFAULT_RETRIES): |