diff --git a/tools/testrunner/standard_runner.py b/tools/testrunner/standard_runner.py index 1e3b2cad6a..a3f27df7b0 100755 --- a/tools/testrunner/standard_runner.py +++ b/tools/testrunner/standard_runner.py @@ -633,9 +633,10 @@ class StandardTestRunner(base_runner.BaseTestRunner): return exit_code def _create_seed_proc(self, options): - if options.random_seed_stress_count == 1 and options.random_seed: + if options.random_seed_stress_count == 1: return None - return SeedProc(options.random_seed_stress_count, options.random_seed) + return SeedProc(options.random_seed_stress_count, options.random_seed, + options.j * 4) def _create_rerun_proc(self, ctx): if not ctx.rerun_failures_count: diff --git a/tools/testrunner/testproc/seed.py b/tools/testrunner/testproc/seed.py index 38adad7892..3f40e79b34 100644 --- a/tools/testrunner/testproc/seed.py +++ b/tools/testrunner/testproc/seed.py @@ -10,17 +10,22 @@ from ..utils import random_utils class SeedProc(base.TestProcProducer): - def __init__(self, count, seed=None): + def __init__(self, count, seed=None, parallel_subtests=1): """ Args: count: How many subtests with different seeds to create for each test. 0 means infinite. seed: seed to use. None means random seed for each subtest. + parallel_subtests: How many subtest of each test to run at the same time. """ super(SeedProc, self).__init__('Seed') self._count = count self._seed = seed self._last_idx = defaultdict(int) + self._todo = defaultdict(int) + self._parallel_subtests = parallel_subtests + if count: + self._parallel_subtests = min(self._parallel_subtests, count) def setup(self, requirement=base.DROP_RESULT): super(SeedProc, self).setup(requirement) @@ -29,9 +34,11 @@ class SeedProc(base.TestProcProducer): assert requirement == base.DROP_RESULT def _next_test(self, test): - self._try_send_next_test(test) + for _ in xrange(0, self._parallel_subtests): + self._try_send_next_test(test) def _result_for(self, test, subtest, result): + self._todo[test.procid] -= 1 self._try_send_next_test(test) def _try_send_next_test(self, test): @@ -43,7 +50,9 @@ class SeedProc(base.TestProcProducer): if not self._count or num < self._count: num += 1 self._send_test(create_subtest(num)) + self._todo[test.procid] += 1 self._last_idx[test.procid] = num - else: + elif not self._todo.get(test.procid): del self._last_idx[test.procid] + del self._todo[test.procid] self._send_result(test, None)