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