| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 """A module that contains a queue for running sharded tests.""" | 6 """A module that contains a queue for running sharded tests.""" |
| 7 | 7 |
| 8 import multiprocessing | 8 import multiprocessing |
| 9 | 9 |
| 10 | 10 |
| 11 class ShardedTestsQueue(object): | 11 class ShardedTestsQueue(object): |
| 12 """A queue for managing pending tests across different runners. | 12 """A queue for managing pending tests across different runners. |
| 13 | 13 |
| 14 This class should only be used when sharding. | 14 This class should only be used when sharding. |
| 15 | 15 |
| 16 Attributes: | 16 Attributes: |
| 17 num_devices: an integer; the number of attached Android devices. | 17 num_devices: an integer; the number of attached Android devices. |
| 18 tests: a list of tests to be run. | 18 tests: a list of tests to be run. |
| 19 tests_queue: if sharding, a JoinableQueue object that holds tests from | 19 tests_queue: if sharding, a JoinableQueue object that holds tests from |
| 20 |tests|. Otherwise, a list holding tests. | 20 |tests|. Otherwise, a list holding tests. |
| 21 results_queue: a Queue object to hold TestResults objects. | 21 results_queue: a Queue object to hold TestRunResults objects. |
| 22 """ | 22 """ |
| 23 _STOP_SENTINEL = 'STOP' # sentinel value for iter() | 23 _STOP_SENTINEL = 'STOP' # sentinel value for iter() |
| 24 | 24 |
| 25 def __init__(self, num_devices, tests): | 25 def __init__(self, num_devices, tests): |
| 26 self.num_devices = num_devices | 26 self.num_devices = num_devices |
| 27 self.tests_queue = multiprocessing.Queue() | 27 self.tests_queue = multiprocessing.Queue() |
| 28 for test in tests: | 28 for test in tests: |
| 29 self.tests_queue.put(test) | 29 self.tests_queue.put(test) |
| 30 for _ in xrange(self.num_devices): | 30 for _ in xrange(self.num_devices): |
| 31 self.tests_queue.put(ShardedTestsQueue._STOP_SENTINEL) | 31 self.tests_queue.put(ShardedTestsQueue._STOP_SENTINEL) |
| 32 | 32 |
| 33 def __iter__(self): | 33 def __iter__(self): |
| 34 """Returns an iterator with the test cases.""" | 34 """Returns an iterator with the test cases.""" |
| 35 return iter(self.tests_queue.get, ShardedTestsQueue._STOP_SENTINEL) | 35 return iter(self.tests_queue.get, ShardedTestsQueue._STOP_SENTINEL) |
| OLD | NEW |