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,