Changeset 122384 in webkit
- Timestamp:
- Jul 11, 2012 4:11:14 PM (12 years ago)
- Location:
- trunk/Tools
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r122381 r122384 1 2012-07-11 Dirk Pranke <dpranke@chromium.org> 2 3 nrwt: clean up names in worker.py 4 https://bugs.webkit.org/show_bug.cgi?id=90510 5 6 Reviewed by Ojan Vafai. 7 8 This is the last patch in the series of refactoring worker.py; 9 all this does is change some names of methods, instance 10 variables, and method parameters to be clearer (it also changes 11 some code in manager.py and manager_worker.py to be consistent). 12 13 There are no functional changes in this patch and the existing 14 tests should cover everything. 15 16 * Scripts/webkitpy/layout_tests/controllers/manager.py: 17 (Manager.__init__): 18 (Manager.prepare_lists_and_print_output): 19 (Manager._run_tests.worker_factory): 20 (Manager._run_tests): 21 (Manager._show_results_html_file): 22 (Manager.handle_finished_test_list): 23 (_WorkerState.__init__): 24 * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py: 25 (_Broker.post_message): 26 (_Broker._dispatch_message): 27 (AbstractWorker.__init__): 28 (AbstractWorker.run): 29 (AbstractWorker.yield_to_caller): 30 (AbstractWorker.post): 31 (_WorkerConnection.__init__): 32 * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py: 33 (_TestWorker.__init__): 34 (_TestWorker.start): 35 (_TestWorker.handle): 36 (_TestWorker.stop): 37 (_TestsMixin): 38 (_TestsMixin.test_name): 39 * Scripts/webkitpy/layout_tests/controllers/worker.py: 40 (Worker.__init__): 41 (Worker.__del__): 42 (Worker.start): 43 (Worker.handle): 44 (Worker._run_test): 45 (Worker.stop): 46 (Worker._timeout): 47 (Worker._kill_driver): 48 (Worker._run_test_with_timeout): 49 (Worker._clean_up_after_test): 50 (Worker._run_test_in_another_thread.SingleTestThread.run): 51 (Worker._run_test_in_this_thread): 52 (Worker._run_single_test): 53 1 54 2012-07-11 Adam Barth <abarth@webkit.org> 2 55 -
trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
r121509 r122384 334 334 self._worker_states = {} 335 335 336 self.name = 'manager' 337 336 338 def collect_tests(self, args): 337 339 """Find all the files to test. … … 497 499 self._printer.print_expected("Running all %d tests." % len(self._test_files)) 498 500 else: 499 self._printer.print_expected("Running %1 test.")501 self._printer.print_expected("Running 1 test.") 500 502 501 503 # Create a sorted list of test files so the subset chunk, … … 770 772 self._log_num_workers(num_workers, len(all_shards), len(locked_shards)) 771 773 772 def worker_factory(worker_connection , worker_number):773 return worker.Worker(worker_connection, worker_number,self.results_directory(), self._options)774 def worker_factory(worker_connection): 775 return worker.Worker(worker_connection, self.results_directory(), self._options) 774 776 775 777 manager_connection = manager_worker_broker.get(num_workers, self, worker_factory, self._port.host) … … 782 784 worker_connection = manager_connection.start_worker(worker_number) 783 785 worker_state = _WorkerState(worker_number, worker_connection) 784 self._worker_states[worker_connection.name ()] = worker_state786 self._worker_states[worker_connection.name] = worker_state 785 787 786 788 time.sleep(self._port.worker_startup_delay_secs()) … … 1443 1445 self._port.show_results_html_file(results_filename) 1444 1446 1445 def name(self):1446 return 'Manager'1447 1447 1448 1448 def is_done(self): … … 1478 1478 raise WorkerException(str(exception_value)) 1479 1479 1480 def handle_finished_ list(self, source, list_name, num_tests, elapsed_time):1480 def handle_finished_test_list(self, source, list_name, num_tests, elapsed_time): 1481 1481 self._group_stats[list_name] = (num_tests, elapsed_time) 1482 1482 … … 1575 1575 self.next_timeout = None 1576 1576 self.stats = {} 1577 self.stats['name'] = worker_connection.name ()1577 self.stats['name'] = worker_connection.name 1578 1578 self.stats['num_tests'] = 0 1579 1579 self.stats['total_time'] = 0 -
trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py
r121816 r122384 172 172 173 173 Messages have a name and a tuple of optional arguments. Both must be picklable.""" 174 message = _Message(client.name (), topic_name, message_name, message_args)174 message = _Message(client.name, topic_name, message_name, message_args) 175 175 queue = self._get_queue_for_topic(topic_name) 176 176 queue.put(_Message.dumps(message)) … … 201 201 raise ValueError( 202 202 "%s: received message '%s' it couldn't handle" % 203 (client.name (), message.name))203 (client.name, message.name)) 204 204 optargs = message.args 205 205 message_handler = getattr(client, 'handle_' + message.name) … … 269 269 self.worker = None 270 270 self._worker_connection = worker_connection 271 self. _worker_number = worker_number272 self. _name = 'worker/%d' % worker_number271 self.worker_number = worker_number 272 self.name = 'worker/%d' % worker_number 273 273 self._done = False 274 274 self._canceled = False 275 275 self._options = optparse.Values({'verbose': False}) 276 276 self.host = None 277 278 def name(self):279 return self._name280 277 281 278 def is_done(self): … … 291 288 self.host = host 292 289 293 self.worker.s afe_init()294 _log.debug('%s starting' % self. _name)290 self.worker.start() 291 _log.debug('%s starting' % self.name) 295 292 296 293 try: … … 298 295 if not self.is_done(): 299 296 raise AssertionError("%s: ran out of messages in worker queue." 300 % self. _name)297 % self.name) 301 298 except KeyboardInterrupt: 302 299 exception_msg = ", interrupted" … … 306 303 self._worker_connection.raise_exception(sys.exc_info()) 307 304 finally: 308 _log.debug("%s done with message loop%s" % (self. _name, exception_msg))305 _log.debug("%s done with message loop%s" % (self.name, exception_msg)) 309 306 try: 310 self.worker. cleanup()307 self.worker.stop() 311 308 finally: 312 309 # Make sure we post a done so that we can flush the log messages … … 326 323 self._canceled = True 327 324 328 def yield_to_ broker(self):325 def yield_to_caller(self): 329 326 self._worker_connection.yield_to_broker() 330 327 331 def post _message(self, *args):328 def post(self, *args): 332 329 self._worker_connection.post_message(*args) 333 330 … … 383 380 # _WorkerConnection and AbstractWorker get merged. 384 381 self._client = AbstractWorker(self, worker_number) 385 self._worker = worker_factory(self._client , worker_number)382 self._worker = worker_factory(self._client) 386 383 self._client.worker = self._worker 387 384 self._host = host … … 389 386 self._logger = None 390 387 self._log_handler = None 388 self.name = self._client.name 391 389 _BrokerConnection.__init__(self, broker, self._client, ANY_WORKER_TOPIC, MANAGER_TOPIC) 392 393 def name(self):394 return self._client.name()395 390 396 391 def cancel(self): -
trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py
r121809 r122384 56 56 57 57 class _TestWorker(object): 58 def __init__(self, caller , worker_number):58 def __init__(self, caller): 59 59 self._caller = caller 60 60 self._thing_to_greet = 'everybody' … … 63 63 self._options = optparse.Values({'verbose': False}) 64 64 65 def name(self): 66 return WORKER_NAME 67 68 def cleanup(self): 69 pass 65 def start(self): 66 if self._starting_queue: 67 self._starting_queue.put('') 68 69 if self._stopping_queue: 70 self._stopping_queue.get() 70 71 71 72 def handle(self, message, src, an_int, a_str): 72 73 assert an_int == 1 73 74 assert a_str == "hello, world" 74 self._caller.post_message('finished_test', 2) 75 76 def safe_init(self): 77 if self._starting_queue: 78 self._starting_queue.put('') 79 80 if self._stopping_queue: 81 self._stopping_queue.get() 75 self._caller.post('finished_test', 2) 82 76 83 77 def stop(self): 84 self._caller.post_message('done')78 pass 85 79 86 80 … … 100 94 contract all implementations must follow.""" 101 95 102 def name(self): 103 return 'TesterManager' 96 name = 'TesterManager' 104 97 105 98 def is_done(self): … … 129 122 self.make_broker() 130 123 worker = self._broker.start_worker(1) 131 self.assertEquals(worker.name (), WORKER_NAME)124 self.assertEquals(worker.name, WORKER_NAME) 132 125 worker.cancel() 133 126 worker.join(0.1) -
trunk/Tools/Scripts/webkitpy/layout_tests/controllers/worker.py
r121816 r122384 42 42 43 43 class Worker(object): 44 def __init__(self, worker_connection, worker_number, results_directory, options):45 self._ worker_connection = worker_connection46 self._worker_number = worker_number47 self._name = 'worker/%d' % worker_number44 def __init__(self, caller, results_directory, options): 45 self._caller = caller 46 self._worker_number = caller.worker_number 47 self._name = caller.name 48 48 self._results_directory = results_directory 49 49 self._options = options 50 50 51 # The remaining fields are initialized in s afe_init()51 # The remaining fields are initialized in start() 52 52 self._host = None 53 53 self._port = None … … 60 60 61 61 def __del__(self): 62 self.cleanup() 63 64 def safe_init(self): 65 """This method is called when it is safe for the object to create state that 66 does not need to be pickled (usually this means it is called in a child process).""" 67 self._host = self._worker_connection.host 62 self.stop() 63 64 def start(self): 65 """This method is called when the object is starting to be used and it is safe 66 for the object to create state that does not need to be pickled (usually this means 67 it is called in a child process).""" 68 self._host = self._caller.host 68 69 self._filesystem = self._host.filesystem 69 70 self._port = self._host.port_factory.get(self._options.platform, self._options) … … 74 75 self._tests_run_file = self._filesystem.open_text_file_for_writing(tests_run_filename) 75 76 76 def handle(self, name, source, list_name, test_list):77 def handle(self, name, source, test_list_name, test_inputs): 77 78 assert name == 'test_list' 78 79 start_time = time.time() 79 num_tests = 0 80 for test_input in test_list: 81 self._update_test_input(test_input) 80 for test_input in test_inputs: 82 81 self._run_test(test_input) 83 num_tests += 1 84 self._worker_connection.yield_to_broker() 85 82 self._caller.yield_to_caller() 86 83 elapsed_time = time.time() - start_time 87 self._ worker_connection.post_message('finished_list', list_name, num_tests, elapsed_time)84 self._caller.post('finished_test_list', test_list_name, len(test_inputs), elapsed_time) 88 85 89 86 def _update_test_input(self, test_input): … … 100 97 101 98 def _run_test(self, test_input): 102 test_timeout_sec = self.timeout(test_input) 99 self._update_test_input(test_input) 100 test_timeout_sec = self._timeout(test_input) 103 101 start = time.time() 104 self._ worker_connection.post_message('started_test', test_input, test_timeout_sec)105 106 result = self. run_test_with_timeout(test_input, test_timeout_sec)102 self._caller.post('started_test', test_input, test_timeout_sec) 103 104 result = self._run_test_with_timeout(test_input, test_timeout_sec) 107 105 108 106 elapsed_time = time.time() - start 109 self._ worker_connection.post_message('finished_test', result, elapsed_time)110 111 self. clean_up_after_test(test_input, result)112 113 def cleanup(self):107 self._caller.post('finished_test', result, elapsed_time) 108 109 self._clean_up_after_test(test_input, result) 110 111 def stop(self): 114 112 _log.debug("%s cleaning up" % self._name) 115 self. kill_driver()113 self._kill_driver() 116 114 if self._tests_run_file: 117 115 self._tests_run_file.close() 118 116 self._tests_run_file = None 119 117 120 def timeout(self, test_input):118 def _timeout(self, test_input): 121 119 """Compute the appropriate timeout value for a test.""" 122 120 # The DumpRenderTree watchdog uses 2.5x the timeout; we want to be … … 134 132 return thread_timeout_sec 135 133 136 def kill_driver(self):134 def _kill_driver(self): 137 135 # Be careful about how and when we kill the driver; if driver.stop() 138 136 # raises an exception, this routine may get re-entered via __del__. … … 143 141 driver.stop() 144 142 145 def run_test_with_timeout(self, test_input, timeout):143 def _run_test_with_timeout(self, test_input, timeout): 146 144 if self._options.run_singly: 147 145 return self._run_test_in_another_thread(test_input, timeout) 148 146 return self._run_test_in_this_thread(test_input) 149 147 150 def clean_up_after_test(self, test_input, result):148 def _clean_up_after_test(self, test_input, result): 151 149 self._batch_count += 1 152 150 test_name = test_input.test_name … … 156 154 # Check and kill DumpRenderTree if we need to. 157 155 if any([f.driver_needs_restart() for f in result.failures]): 158 self. kill_driver()156 self._kill_driver() 159 157 # Reset the batch count since the shell just bounced. 160 158 self._batch_count = 0 … … 170 168 171 169 if self._batch_size > 0 and self._batch_count >= self._batch_size: 172 self. kill_driver()170 self._kill_driver() 173 171 self._batch_count = 0 174 172 … … 196 194 197 195 def run(self): 198 self.result = worker. run_single_test(driver, test_input)196 self.result = worker._run_single_test(driver, test_input) 199 197 200 198 thread = SingleTestThread() … … 228 226 """ 229 227 if self._driver and self._driver.has_crashed(): 230 self. kill_driver()228 self._kill_driver() 231 229 if not self._driver: 232 230 self._driver = self._port.create_driver(self._worker_number) 233 return self. run_single_test(self._driver, test_input)234 235 def run_single_test(self, driver, test_input):231 return self._run_single_test(self._driver, test_input) 232 233 def _run_single_test(self, driver, test_input): 236 234 return single_test_runner.run_single_test(self._port, self._options, 237 235 test_input, driver, self._name)
Note: See TracChangeset
for help on using the changeset viewer.