| Index: build/android/pylib/sharded_tests_queue.py
|
| diff --git a/build/android/pylib/sharded_tests_queue.py b/build/android/pylib/sharded_tests_queue.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d2b3779695d294c8a25b9ccddd73c6c010f97dad
|
| --- /dev/null
|
| +++ b/build/android/pylib/sharded_tests_queue.py
|
| @@ -0,0 +1,36 @@
|
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +
|
| +"""A module that contains a queue for running sharded tests."""
|
| +
|
| +import multiprocessing
|
| +
|
| +
|
| +class ShardedTestsQueue(object):
|
| + """A queue for managing pending tests across different runners.
|
| +
|
| + This class should only be used when sharding.
|
| +
|
| + Attributes:
|
| + num_devices: an integer; the number of attached Android devices.
|
| + tests: a list of tests to be run.
|
| + tests_queue: if sharding, a JoinableQueue object that holds tests from
|
| + |tests|. Otherwise, a list holding tests.
|
| + results_queue: a Queue object to hold TestResults objects.
|
| + """
|
| + _STOP_SENTINEL = 'STOP' # sentinel value for iter()
|
| +
|
| + def __init__(self, num_devices, tests):
|
| + assert num_devices > 1, 'At least two devices must be attached.'
|
| + self.num_devices = num_devices
|
| + self.tests_queue = multiprocessing.Queue()
|
| + for test in tests:
|
| + self.tests_queue.put(test)
|
| + for _ in xrange(self.num_devices):
|
| + self.tests_queue.put(ShardedTestsQueue._STOP_SENTINEL)
|
| +
|
| + def __iter__(self):
|
| + """Returns an iterator with the test cases."""
|
| + return iter(self.tests_queue.get, ShardedTestsQueue._STOP_SENTINEL)
|
|
|