| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """This module wraps Android's adb tool. | 5 """This module wraps Android's adb tool. |
| 6 | 6 |
| 7 This is a thin wrapper around the adb interface. Any additional complexity | 7 This is a thin wrapper around the adb interface. Any additional complexity |
| 8 should be delegated to a higher level (ex. DeviceUtils). | 8 should be delegated to a higher level (ex. DeviceUtils). |
| 9 """ | 9 """ |
| 10 | 10 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 | 49 |
| 50 Args: | 50 Args: |
| 51 device_serial: The device serial number as a string. | 51 device_serial: The device serial number as a string. |
| 52 """ | 52 """ |
| 53 if not device_serial: | 53 if not device_serial: |
| 54 raise ValueError('A device serial must be specified') | 54 raise ValueError('A device serial must be specified') |
| 55 self._device_serial = str(device_serial) | 55 self._device_serial = str(device_serial) |
| 56 | 56 |
| 57 # pylint: disable=unused-argument | 57 # pylint: disable=unused-argument |
| 58 @classmethod | 58 @classmethod |
| 59 def _BuildAdbCmd(cls, args, device_serial, cpu_affinity=None): | 59 def _BuildAdbCmd(cls, args, device_serial): |
| 60 if cpu_affinity is not None: | 60 cmd = [constants.GetAdbPath()] |
| 61 cmd = ['taskset', '-c', str(cpu_affinity)] | |
| 62 else: | |
| 63 cmd = [] | |
| 64 cmd.append(constants.GetAdbPath()) | |
| 65 if device_serial is not None: | 61 if device_serial is not None: |
| 66 cmd.extend(['-s', device_serial]) | 62 cmd.extend(['-s', device_serial]) |
| 67 cmd.extend(args) | 63 cmd.extend(args) |
| 68 return cmd | 64 return cmd |
| 69 # pylint: enable=unused-argument | 65 # pylint: enable=unused-argument |
| 70 | 66 |
| 71 # pylint: disable=unused-argument | 67 # pylint: disable=unused-argument |
| 72 @classmethod | 68 @classmethod |
| 73 @decorators.WithTimeoutAndRetries | 69 @decorators.WithTimeoutAndRetries |
| 74 def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, | 70 def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, |
| 75 check_error=True, cpu_affinity=None): | 71 check_error=True): |
| 76 status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( | 72 status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( |
| 77 cls._BuildAdbCmd(args, device_serial, cpu_affinity=cpu_affinity), | 73 cls._BuildAdbCmd(args, device_serial), |
| 78 timeout_retry.CurrentTimeoutThread().GetRemainingTime()) | 74 timeout_retry.CurrentTimeoutThread().GetRemainingTime()) |
| 79 if status != 0: | 75 if status != 0: |
| 80 raise device_errors.AdbCommandFailedError( | 76 raise device_errors.AdbCommandFailedError( |
| 81 args, output, status, device_serial) | 77 args, output, status, device_serial) |
| 82 # This catches some errors, including when the device drops offline; | 78 # This catches some errors, including when the device drops offline; |
| 83 # unfortunately adb is very inconsistent with error reporting so many | 79 # unfortunately adb is very inconsistent with error reporting so many |
| 84 # command failures present differently. | 80 # command failures present differently. |
| 85 if check_error and output.startswith('error:'): | 81 if check_error and output.startswith('error:'): |
| 86 raise device_errors.AdbCommandFailedError(args, output) | 82 raise device_errors.AdbCommandFailedError(args, output) |
| 87 return output | 83 return output |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 """The string representation of an instance. | 128 """The string representation of an instance. |
| 133 | 129 |
| 134 Returns: | 130 Returns: |
| 135 The device serial number as a string. | 131 The device serial number as a string. |
| 136 """ | 132 """ |
| 137 return self._device_serial | 133 return self._device_serial |
| 138 | 134 |
| 139 def __repr__(self): | 135 def __repr__(self): |
| 140 return '%s(\'%s\')' % (self.__class__.__name__, self) | 136 return '%s(\'%s\')' % (self.__class__.__name__, self) |
| 141 | 137 |
| 142 @classmethod | |
| 143 def KillServer(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | |
| 144 cls._RunAdbCmd(['kill-server'], timeout=timeout, retries=retries) | |
| 145 | |
| 146 @classmethod | |
| 147 def StartServer(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | |
| 148 # CPU affinity is used to reduce adb instability http://crbug.com/268450 | |
| 149 cls._RunAdbCmd(['start-server'], timeout=timeout, retries=retries, | |
| 150 cpu_affinity=0) | |
| 151 | |
| 152 # TODO(craigdh): Determine the filter criteria that should be supported. | 138 # TODO(craigdh): Determine the filter criteria that should be supported. |
| 153 @classmethod | 139 @classmethod |
| 154 def GetDevices(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 140 def GetDevices(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
| 155 """Get the list of active attached devices. | 141 """Get the list of active attached devices. |
| 156 | 142 |
| 157 Args: | 143 Args: |
| 158 timeout: (optional) Timeout per try in seconds. | 144 timeout: (optional) Timeout per try in seconds. |
| 159 retries: (optional) Number of retries to attempt. | 145 retries: (optional) Number of retries to attempt. |
| 160 | 146 |
| 161 Yields: | 147 Yields: |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 """Restarts the adbd daemon with root permissions, if possible. | 456 """Restarts the adbd daemon with root permissions, if possible. |
| 471 | 457 |
| 472 Args: | 458 Args: |
| 473 timeout: (optional) Timeout per try in seconds. | 459 timeout: (optional) Timeout per try in seconds. |
| 474 retries: (optional) Number of retries to attempt. | 460 retries: (optional) Number of retries to attempt. |
| 475 """ | 461 """ |
| 476 output = self._RunDeviceAdbCmd(['root'], timeout, retries) | 462 output = self._RunDeviceAdbCmd(['root'], timeout, retries) |
| 477 if 'cannot' in output: | 463 if 'cannot' in output: |
| 478 raise device_errors.AdbCommandFailedError( | 464 raise device_errors.AdbCommandFailedError( |
| 479 ['root'], output, device_serial=self._device_serial) | 465 ['root'], output, device_serial=self._device_serial) |
| OLD | NEW |