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 |
11 import collections | 11 import collections |
12 import errno | 12 import errno |
13 import logging | 13 import logging |
14 import os | 14 import os |
15 | 15 |
16 from pylib import cmd_helper | 16 from pylib import cmd_helper |
17 from pylib import constants | 17 from pylib import constants |
18 from pylib.device import decorators | 18 from pylib.device import decorators |
19 from pylib.device import device_errors | 19 from pylib.device import device_errors |
20 from pylib.device import device_filter | |
21 from pylib.utils import timeout_retry | 20 from pylib.utils import timeout_retry |
22 | 21 |
23 | 22 |
24 _DEFAULT_TIMEOUT = 30 | 23 _DEFAULT_TIMEOUT = 30 |
25 _DEFAULT_RETRIES = 2 | 24 _DEFAULT_RETRIES = 2 |
26 | 25 |
27 | 26 |
28 def _VerifyLocalFileExists(path): | 27 def _VerifyLocalFileExists(path): |
29 """Verifies a local file exists. | 28 """Verifies a local file exists. |
30 | 29 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 @classmethod | 151 @classmethod |
153 def KillServer(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 152 def KillServer(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
154 cls._RunAdbCmd(['kill-server'], timeout=timeout, retries=retries) | 153 cls._RunAdbCmd(['kill-server'], timeout=timeout, retries=retries) |
155 | 154 |
156 @classmethod | 155 @classmethod |
157 def StartServer(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 156 def StartServer(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
158 # CPU affinity is used to reduce adb instability http://crbug.com/268450 | 157 # CPU affinity is used to reduce adb instability http://crbug.com/268450 |
159 cls._RunAdbCmd(['start-server'], timeout=timeout, retries=retries, | 158 cls._RunAdbCmd(['start-server'], timeout=timeout, retries=retries, |
160 cpu_affinity=0) | 159 cpu_affinity=0) |
161 | 160 |
| 161 # TODO(craigdh): Determine the filter criteria that should be supported. |
162 @classmethod | 162 @classmethod |
163 def GetDevices(cls, filters=None, timeout=_DEFAULT_TIMEOUT, | 163 def GetDevices(cls, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
164 retries=_DEFAULT_RETRIES): | |
165 """DEPRECATED. Refer to Devices(...) below.""" | |
166 # TODO(jbudorick): Remove this function once no more clients are using it. | |
167 return cls.Devices(filters=filters, timeout=timeout, retries=retries) | |
168 | |
169 @classmethod | |
170 def Devices(cls, filters=None, timeout=_DEFAULT_TIMEOUT, | |
171 retries=_DEFAULT_RETRIES): | |
172 """Get the list of active attached devices. | 164 """Get the list of active attached devices. |
173 | 165 |
174 Args: | 166 Args: |
175 filters: (optional) A list of binary functions that take an AdbWrapper | |
176 instance and a string description. Any device for which all provided | |
177 filter functions do not return True will not be included in the | |
178 returned list. | |
179 timeout: (optional) Timeout per try in seconds. | 167 timeout: (optional) Timeout per try in seconds. |
180 retries: (optional) Number of retries to attempt. | 168 retries: (optional) Number of retries to attempt. |
181 | 169 |
182 Yields: | 170 Yields: |
183 AdbWrapper instances. | 171 AdbWrapper instances. |
184 """ | 172 """ |
185 output = cls._RunAdbCmd(['devices'], timeout=timeout, retries=retries) | 173 output = cls._RunAdbCmd(['devices'], timeout=timeout, retries=retries) |
186 lines = (line.split() for line in output.splitlines()) | 174 lines = [line.split() for line in output.splitlines()] |
187 devices = (AdbWrapper(line[0]) for line in lines if len(line) == 2) | 175 return [AdbWrapper(line[0]) for line in lines |
188 | 176 if len(line) == 2 and line[1] == 'device'] |
189 def matches_all_filters(device): | |
190 for f in filters: | |
191 if not f(device): | |
192 logging.info('Device %s failed filter %s', device.GetDeviceSerial(), | |
193 f.__name__) | |
194 return False | |
195 return True | |
196 | |
197 return [d for d in devices if matches_all_filters(d)] | |
198 | 177 |
199 def GetDeviceSerial(self): | 178 def GetDeviceSerial(self): |
200 """Gets the device serial number associated with this object. | 179 """Gets the device serial number associated with this object. |
201 | 180 |
202 Returns: | 181 Returns: |
203 Device serial number as a string. | 182 Device serial number as a string. |
204 """ | 183 """ |
205 return self._device_serial | 184 return self._device_serial |
206 | 185 |
207 def Push(self, local, remote, timeout=60*5, retries=_DEFAULT_RETRIES): | 186 def Push(self, local, remote, timeout=60*5, retries=_DEFAULT_RETRIES): |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 """Restarts the adbd daemon with root permissions, if possible. | 523 """Restarts the adbd daemon with root permissions, if possible. |
545 | 524 |
546 Args: | 525 Args: |
547 timeout: (optional) Timeout per try in seconds. | 526 timeout: (optional) Timeout per try in seconds. |
548 retries: (optional) Number of retries to attempt. | 527 retries: (optional) Number of retries to attempt. |
549 """ | 528 """ |
550 output = self._RunDeviceAdbCmd(['root'], timeout, retries) | 529 output = self._RunDeviceAdbCmd(['root'], timeout, retries) |
551 if 'cannot' in output: | 530 if 'cannot' in output: |
552 raise device_errors.AdbCommandFailedError( | 531 raise device_errors.AdbCommandFailedError( |
553 ['root'], output, device_serial=self._device_serial) | 532 ['root'], output, device_serial=self._device_serial) |
OLD | NEW |