| 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): | 59 def _BuildAdbCmd(cls, args, device_serial, cpu_affinity=None): |
| 60 cmd = [constants.GetAdbPath()] | 60 if cpu_affinity is not None: |
| 61 cmd = ['taskset', '-c', str(cpu_affinity)] |
| 62 else: |
| 63 cmd = [] |
| 64 cmd.append(constants.GetAdbPath()) |
| 61 if device_serial is not None: | 65 if device_serial is not None: |
| 62 cmd.extend(['-s', device_serial]) | 66 cmd.extend(['-s', device_serial]) |
| 63 cmd.extend(args) | 67 cmd.extend(args) |
| 64 return cmd | 68 return cmd |
| 65 # pylint: enable=unused-argument | 69 # pylint: enable=unused-argument |
| 66 | 70 |
| 67 # pylint: disable=unused-argument | 71 # pylint: disable=unused-argument |
| 68 @classmethod | 72 @classmethod |
| 69 @decorators.WithTimeoutAndRetries | 73 @decorators.WithTimeoutAndRetries |
| 70 def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, | 74 def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, |
| 71 check_error=True): | 75 check_error=True, cpu_affinity=None): |
| 72 status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( | 76 status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( |
| 73 cls._BuildAdbCmd(args, device_serial), | 77 cls._BuildAdbCmd(args, device_serial, cpu_affinity=cpu_affinity), |
| 74 timeout_retry.CurrentTimeoutThread().GetRemainingTime()) | 78 timeout_retry.CurrentTimeoutThread().GetRemainingTime()) |
| 75 if status != 0: | 79 if status != 0: |
| 76 raise device_errors.AdbCommandFailedError( | 80 raise device_errors.AdbCommandFailedError( |
| 77 args, output, status, device_serial) | 81 args, output, status, device_serial) |
| 78 # This catches some errors, including when the device drops offline; | 82 # This catches some errors, including when the device drops offline; |
| 79 # unfortunately adb is very inconsistent with error reporting so many | 83 # unfortunately adb is very inconsistent with error reporting so many |
| 80 # command failures present differently. | 84 # command failures present differently. |
| 81 if check_error and output.startswith('error:'): | 85 if check_error and output.startswith('error:'): |
| 82 raise device_errors.AdbCommandFailedError(args, output) | 86 raise device_errors.AdbCommandFailedError(args, output) |
| 83 return output | 87 return output |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 """The string representation of an instance. | 132 """The string representation of an instance. |
| 129 | 133 |
| 130 Returns: | 134 Returns: |
| 131 The device serial number as a string. | 135 The device serial number as a string. |
| 132 """ | 136 """ |
| 133 return self._device_serial | 137 return self._device_serial |
| 134 | 138 |
| 135 def __repr__(self): | 139 def __repr__(self): |
| 136 return '%s(\'%s\')' % (self.__class__.__name__, self) | 140 return '%s(\'%s\')' % (self.__class__.__name__, self) |
| 137 | 141 |
| 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 |
| 138 # TODO(craigdh): Determine the filter criteria that should be supported. | 152 # TODO(craigdh): Determine the filter criteria that should be supported. |
| 139 @classmethod | 153 @classmethod |
| 140 def GetDevices(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 154 def GetDevices(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
| 141 """Get the list of active attached devices. | 155 """Get the list of active attached devices. |
| 142 | 156 |
| 143 Args: | 157 Args: |
| 144 timeout: (optional) Timeout per try in seconds. | 158 timeout: (optional) Timeout per try in seconds. |
| 145 retries: (optional) Number of retries to attempt. | 159 retries: (optional) Number of retries to attempt. |
| 146 | 160 |
| 147 Yields: | 161 Yields: |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 """Restarts the adbd daemon with root permissions, if possible. | 470 """Restarts the adbd daemon with root permissions, if possible. |
| 457 | 471 |
| 458 Args: | 472 Args: |
| 459 timeout: (optional) Timeout per try in seconds. | 473 timeout: (optional) Timeout per try in seconds. |
| 460 retries: (optional) Number of retries to attempt. | 474 retries: (optional) Number of retries to attempt. |
| 461 """ | 475 """ |
| 462 output = self._RunDeviceAdbCmd(['root'], timeout, retries) | 476 output = self._RunDeviceAdbCmd(['root'], timeout, retries) |
| 463 if 'cannot' in output: | 477 if 'cannot' in output: |
| 464 raise device_errors.AdbCommandFailedError( | 478 raise device_errors.AdbCommandFailedError( |
| 465 ['root'], output, device_serial=self._device_serial) | 479 ['root'], output, device_serial=self._device_serial) |
| OLD | NEW |