Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Side by Side Diff: build/android/pylib/device/device_utils.py

Issue 290573004: [Android] Support generic parallel execution across devices. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix the parallelizer tests Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/android/provision_devices.py ('k') | build/android/pylib/utils/parallelizer.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 # pylint: disable=W0613 10 # pylint: disable=W0613
11 11
12 import multiprocessing
13 import os
14 import sys
15
16 import pylib.android_commands 12 import pylib.android_commands
17 from pylib.device import adb_wrapper 13 from pylib.device import adb_wrapper
18 from pylib.device import decorators 14 from pylib.device import decorators
19 from pylib.device import device_errors 15 from pylib.device import device_errors
20 16 from pylib.utils import parallelizer
21 CHROME_SRC_DIR = os.path.abspath(
22 os.path.join(os.path.dirname(__file__), '..', '..', '..', '..'))
23 sys.path.append(os.path.join(
24 CHROME_SRC_DIR, 'third_party', 'android_testrunner'))
25 import errors
26 17
27 _DEFAULT_TIMEOUT = 30 18 _DEFAULT_TIMEOUT = 30
28 _DEFAULT_RETRIES = 3 19 _DEFAULT_RETRIES = 3
29 20
30 21
31 # multiprocessing map_async requires a top-level function for pickle library.
32 def RebootDeviceSafe(device):
33 """Reboot a device, wait for it to start, and squelch timeout exceptions."""
34 try:
35 DeviceUtils(device).old_interface.Reboot(True)
36 except errors.DeviceUnresponsiveError as e:
37 return e
38
39
40 def RebootDevices():
41 """Reboot all attached and online devices."""
42 devices = pylib.android_commands.GetAttachedDevices()
43 print 'Rebooting: %s' % devices
44 if devices:
45 pool = multiprocessing.Pool(len(devices))
46 results = pool.map_async(RebootDeviceSafe, devices).get(99999)
47
48 for device, result in zip(devices, results):
49 if result:
50 print '%s failed to startup.' % device
51
52 if any(results):
53 print 'RebootDevices() Warning: %s' % results
54 else:
55 print 'Reboots complete.'
56
57
58 @decorators.WithExplicitTimeoutAndRetries( 22 @decorators.WithExplicitTimeoutAndRetries(
59 _DEFAULT_TIMEOUT, _DEFAULT_RETRIES) 23 _DEFAULT_TIMEOUT, _DEFAULT_RETRIES)
60 def GetAVDs(): 24 def GetAVDs():
61 """ Returns a list of Android Virtual Devices. 25 """ Returns a list of Android Virtual Devices.
62 26
63 Returns: 27 Returns:
64 A list containing the configured AVDs. 28 A list containing the configured AVDs.
65 """ 29 """
66 return pylib.android_commands.GetAVDs() 30 return pylib.android_commands.GetAVDs()
67 31
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 Args: 107 Args:
144 timeout: Same as for |IsOnline|. 108 timeout: Same as for |IsOnline|.
145 retries: Same as for |IsOnline|. 109 retries: Same as for |IsOnline|.
146 Raises: 110 Raises:
147 CommandFailedError if root could not be enabled. 111 CommandFailedError if root could not be enabled.
148 """ 112 """
149 if not self.old_interface.EnableAdbRoot(): 113 if not self.old_interface.EnableAdbRoot():
150 raise device_errors.CommandFailedError( 114 raise device_errors.CommandFailedError(
151 'adb root', 'Could not enable root.') 115 'adb root', 'Could not enable root.')
152 116
117 def __str__(self):
118 """Returns the device serial."""
119 return self.old_interface.GetDevice()
120
121 @staticmethod
122 def parallel(devices):
123 """ Creates a Parallelizer to operate over the provided list of devices.
124
125 If |devices| is either |None| or an empty list, the Parallelizer will
126 operate over all attached devices.
127
128 Args:
129 devices: A list of either DeviceUtils instances or objects from
130 from which DeviceUtils instances can be constructed.
131 Returns:
132 A Parallelizer operating over |devices|.
133 """
134 if not devices or len(devices) == 0:
135 devices = pylib.android_commands.AndroidCommands.GetAttachedDevices()
136 return parallelizer.Parallelizer([
137 d if isinstance(d, DeviceUtils) else DeviceUtils(d)
138 for d in devices])
139
OLDNEW
« no previous file with comments | « build/android/provision_devices.py ('k') | build/android/pylib/utils/parallelizer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698