Index: build/android/pylib/local/device/local_device_perf_test_run.py |
diff --git a/build/android/pylib/local/device/local_device_perf_test_run.py b/build/android/pylib/local/device/local_device_perf_test_run.py |
index b78553e0417f6825fa0c5d981fb454dda26e0123..44dd7b62ecc62cd67ed77cd6d32e61e28165df18 100644 |
--- a/build/android/pylib/local/device/local_device_perf_test_run.py |
+++ b/build/android/pylib/local/device/local_device_perf_test_run.py |
@@ -22,6 +22,7 @@ from devil.android.tools import device_recovery |
from devil.android.tools import device_status |
from devil.utils import cmd_helper |
from devil.utils import parallelizer |
+from devil.utils import reraiser_thread |
from pylib import constants |
from pylib.base import base_test_result |
from pylib.constants import host_paths |
@@ -299,7 +300,7 @@ class HostTestShard(TestShard): |
def RunTestsOnShard(self): |
results = base_test_result.TestRunResults() |
for test in self._tests: |
- tries_left = self._retries |
+ tries_left = self._retries + 1 |
result_type = None |
while (result_type != base_test_result.ResultType.PASS |
and tries_left > 0): |
@@ -334,9 +335,6 @@ class LocalDevicePerfTestRun(local_device_test_run.LocalDeviceTestRun): |
self._timeout = None if test_instance.no_timeout else self._DEFAULT_TIMEOUT |
def SetUp(self): |
- self._devices = self._GetAllDevices(self._env.devices, |
- self._test_instance.known_devices_file) |
- |
if os.path.exists(constants.PERF_OUTPUT_DIR): |
shutil.rmtree(constants.PERF_OUTPUT_DIR) |
os.makedirs(constants.PERF_OUTPUT_DIR) |
@@ -412,27 +410,40 @@ class LocalDevicePerfTestRun(local_device_test_run.LocalDeviceTestRun): |
if not self._test_buckets and not self._no_device_tests: |
raise local_device_test_run.NoTestsError() |
- def run_perf_tests(shard_id): |
- if shard_id is None: |
- s = HostTestShard(self._env, self._test_instance, self._no_device_tests, |
- retries=3, timeout=self._timeout) |
- else: |
- if device_status.IsBlacklisted( |
- str(self._devices[shard_id]), self._env.blacklist): |
- logging.warning('Device %s is not active. Will not create shard %s.', |
- str(self._devices[shard_id]), shard_id) |
- return None |
- s = DeviceTestShard(self._env, self._test_instance, |
- self._devices[shard_id], shard_id, |
- self._test_buckets[shard_id], |
- retries=self._env.max_tries, timeout=self._timeout) |
+ def run_no_devices_tests(): |
+ if not self._no_device_tests: |
+ return [] |
+ s = HostTestShard(self._env, self._test_instance, self._no_device_tests, |
+ retries=3, timeout=self._timeout) |
+ return [s.RunTestsOnShard()] |
+ |
+ def device_shard_helper(shard_id): |
+ if device_status.IsBlacklisted( |
+ str(self._devices[shard_id]), self._env.blacklist): |
+ logging.warning('Device %s is not active. Will not create shard %s.', |
+ str(self._devices[shard_id]), shard_id) |
+ return None |
+ s = DeviceTestShard(self._env, self._test_instance, |
+ self._devices[shard_id], shard_id, |
+ self._test_buckets[shard_id], |
+ retries=self._env.max_tries, timeout=self._timeout) |
return s.RunTestsOnShard() |
- device_indices = range(min(len(self._devices), len(self._test_buckets))) |
- if self._no_device_tests: |
- device_indices.append(None) |
- shards = parallelizer.Parallelizer(device_indices).pMap(run_perf_tests) |
- return [x for x in shards.pGet(self._timeout) if x is not None] |
+ def run_devices_tests(): |
+ if not self._test_buckets: |
+ return [] |
+ if self._devices is None: |
+ self._devices = self._GetAllDevices( |
+ self._env.devices, self._test_instance.known_devices_file) |
+ |
+ device_indices = range(min(len(self._devices), len(self._test_buckets))) |
+ shards = parallelizer.Parallelizer(device_indices).pMap( |
+ device_shard_helper) |
+ return [x for x in shards.pGet(self._timeout) if x is not None] |
+ |
+ host_test_results, device_test_results = reraiser_thread.RunAsync( |
+ [run_no_devices_tests, run_devices_tests]) |
+ return host_test_results + device_test_results |
# override |
def TestPackage(self): |