Use loop index to decide which emulator to use (#32292)
Pass the test type and an index into `TestRunnerManager` to allow the android emulator
to be correctly selected by index for each test type. This also allows improving the logging
so it's clear which test type each `TestRunnerManager` thread is associated with.
diff --git a/tools/wptrunner/wptrunner/testrunner.py b/tools/wptrunner/wptrunner/testrunner.py
index d8e698e..74478fa 100644
--- a/tools/wptrunner/wptrunner/testrunner.py
+++ b/tools/wptrunner/wptrunner/testrunner.py
@@ -157,15 +157,6 @@
handle_error(e)
-manager_count = 0
-
-
-def next_manager_number():
- global manager_count
- local = manager_count = manager_count + 1
- return local
-
-
class BrowserManager(object):
def __init__(self, logger, browser, command_queue, no_timeout=False):
self.logger = logger
@@ -264,10 +255,10 @@
class TestRunnerManager(threading.Thread):
- def __init__(self, suite_name, test_queue, test_source_cls, browser_cls, browser_kwargs,
- executor_cls, executor_kwargs, stop_flag, rerun=1, pause_after_test=False,
- pause_on_unexpected=False, restart_on_unexpected=True, debug_info=None,
- capture_stdio=True, recording=None):
+ def __init__(self, suite_name, index, test_type, test_queue, test_source_cls, browser_cls,
+ browser_kwargs, executor_cls, executor_kwargs, stop_flag, rerun=1,
+ pause_after_test=False, pause_on_unexpected=False, restart_on_unexpected=True,
+ debug_info=None, capture_stdio=True, recording=None):
"""Thread that owns a single TestRunner process and any processes required
by the TestRunner (e.g. the Firefox binary).
@@ -287,13 +278,14 @@
self.test_source = test_source_cls(test_queue)
- self.manager_number = next_manager_number()
+ self.manager_number = index
+ self.test_type = test_type
self.browser_cls = browser_cls
self.browser_kwargs = browser_kwargs.copy()
if self.browser_kwargs.get("device_serial"):
- # Assign Android device to runner according to manager_number
+ # Assign Android device to runner according to current manager index
self.browser_kwargs["device_serial"] = (
- self.browser_kwargs["device_serial"][self.manager_number - 1])
+ self.browser_kwargs["device_serial"][index])
self.executor_cls = executor_cls
self.executor_kwargs = executor_kwargs
@@ -319,7 +311,7 @@
self.test_runner_proc = None
- threading.Thread.__init__(self, name="TestRunnerManager-%i" % self.manager_number)
+ threading.Thread.__init__(self, name="TestRunnerManager-%s-%i" % (test_type, index))
# This is started in the actual new thread
self.logger = None
@@ -514,7 +506,8 @@
mp = mpcontext.get_context()
self.test_runner_proc = mp.Process(target=start_runner,
args=args,
- name="TestRunner-%i" % self.manager_number)
+ name="TestRunner-%s-%i" % (
+ self.test_type, self.manager_number))
self.test_runner_proc.start()
self.logger.debug("Test runner started")
# Now we wait for either an init_succeeded event or an init_failed event
@@ -898,8 +891,10 @@
test_queue = make_test_queue(type_tests, self.test_source_cls, **self.test_source_kwargs)
- for _ in range(self.size):
+ for idx in range(self.size):
manager = TestRunnerManager(self.suite_name,
+ idx,
+ test_type,
test_queue,
self.test_source_cls,
self.browser_cls,