OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 """ | 5 """ |
6 Provides a variety of device interactions based on adb. | 6 Provides a variety of device interactions based on adb. |
7 | 7 |
8 Eventually, this will be based on adb_wrapper. | 8 Eventually, this will be based on adb_wrapper. |
9 """ | 9 """ |
10 | 10 |
| 11 import multiprocessing |
| 12 import os |
| 13 import sys |
11 import pylib.android_commands | 14 import pylib.android_commands |
12 from pylib.device import adb_wrapper | 15 from pylib.device import adb_wrapper |
13 | 16 |
| 17 CHROME_SRC_DIR = os.path.abspath( |
| 18 os.path.join(os.path.dirname(__file__), '..', '..', '..', '..')) |
| 19 sys.path.append(os.path.join( |
| 20 CHROME_SRC_DIR, 'third_party', 'android_testrunner')) |
| 21 import errors |
14 | 22 |
15 def GetAVDs(): | 23 def GetAVDs(): |
16 return pylib.android_commands.GetAVDs() | 24 return pylib.android_commands.GetAVDs() |
17 | 25 |
18 | 26 |
| 27 # multiprocessing map_async requires a top-level function for pickle library. |
| 28 def RebootDeviceSafe(device): |
| 29 """Reboot a device, wait for it to start, and squelch timeout exceptions.""" |
| 30 try: |
| 31 DeviceUtils(device).old_interface.Reboot(True) |
| 32 except errors.DeviceUnresponsiveError as e: |
| 33 return e |
| 34 |
| 35 |
| 36 def RebootDevices(): |
| 37 """Reboot all attached and online devices.""" |
| 38 devices = pylib.android_commands.GetAttachedDevices() |
| 39 print 'Rebooting: %s' % devices |
| 40 if devices: |
| 41 pool = multiprocessing.Pool(len(devices)) |
| 42 results = pool.map_async(RebootDeviceSafe, devices).get(99999) |
| 43 |
| 44 for device, result in zip(devices, results): |
| 45 if result: |
| 46 print '%s failed to startup.' % device |
| 47 |
| 48 if any(results): |
| 49 print 'RebootDevices() Warning: %s' % results |
| 50 else: |
| 51 print 'Reboots complete.' |
| 52 |
| 53 |
19 class DeviceUtils(object): | 54 class DeviceUtils(object): |
20 | 55 |
21 def __init__(self, device): | 56 def __init__(self, device): |
22 self.old_interface = None | 57 self.old_interface = None |
23 if isinstance(device, basestring): | 58 if isinstance(device, basestring): |
24 self.old_interface = pylib.android_commands.AndroidCommands(device) | 59 self.old_interface = pylib.android_commands.AndroidCommands(device) |
25 elif isinstance(device, adb_wrapper.AdbWrapper): | 60 elif isinstance(device, adb_wrapper.AdbWrapper): |
26 self.old_interface = pylib.android_commands.AndroidCommands(str(device)) | 61 self.old_interface = pylib.android_commands.AndroidCommands(str(device)) |
27 elif isinstance(device, pylib.android_commands.AndroidCommands): | 62 elif isinstance(device, pylib.android_commands.AndroidCommands): |
28 self.old_interface = device | 63 self.old_interface = device |
29 elif not device: | 64 elif not device: |
30 self.old_interface = pylib.android_commands.AndroidCommands() | 65 self.old_interface = pylib.android_commands.AndroidCommands() |
31 | 66 |
OLD | NEW |