Skip to content

Commit f9487b0

Browse files
authored
Do not block waiting for chromedriver to start up (#46126)
This would save approximately 0.5 second on each test runner restarts. And this should not cause a problem as another connection to the webdriver will be made to init the session, which also happens during initialization stage. https://github.com/web-platform-tests/wpt/blob/master/tools/wptrunner/wptrunner/testrunner.py#L93
1 parent 84b308d commit f9487b0

File tree

3 files changed

+11
-35
lines changed

3 files changed

+11
-35
lines changed

tools/wptrunner/wptrunner/browsers/base.py

+1-21
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@
33
import os
44
import platform
55
import socket
6-
import time
7-
import traceback
86
from abc import ABCMeta, abstractmethod
97
from typing import cast, Any, List, Mapping, Optional, Tuple, Type
108

119
import mozprocess
1210
from mozdebug import DebuggerInfo
1311
from mozlog.structuredlog import StructuredLogger
1412

15-
from ..environment import wait_for_service
1613
from ..testloader import GroupMetadata
1714
from ..wptcommandline import require_arg # noqa: F401
1815
from ..wpttest import Test
@@ -319,7 +316,6 @@ def __init__(self,
319316
self.env = os.environ.copy() if env is None else env
320317
self.webdriver_args = webdriver_args if webdriver_args is not None else []
321318

322-
self.init_deadline: Optional[float] = None
323319
self._output_handler: Optional[OutputHandler] = None
324320
self._cmd = None
325321
self._proc: Optional[mozprocess.ProcessHandler] = None
@@ -330,7 +326,6 @@ def make_command(self) -> List[str]:
330326
return [self.webdriver_binary] + self.webdriver_args
331327

332328
def start(self, group_metadata: GroupMetadata, **kwargs: Any) -> None:
333-
self.init_deadline = time.time() + self.init_timeout
334329
try:
335330
self._run_server(group_metadata, **kwargs)
336331
except KeyboardInterrupt:
@@ -345,7 +340,6 @@ def create_output_handler(self, cmd: List[str]) -> OutputHandler:
345340
return OutputHandler(self.logger, cmd)
346341

347342
def _run_server(self, group_metadata: GroupMetadata, **kwargs: Any) -> None:
348-
assert self.init_deadline is not None
349343
cmd = self.make_command()
350344
self._output_handler = self.create_output_handler(cmd)
351345

@@ -365,21 +359,7 @@ def _run_server(self, group_metadata: GroupMetadata, **kwargs: Any) -> None:
365359
raise
366360
self._output_handler.after_process_start(self._proc.pid)
367361

368-
try:
369-
wait_for_service(
370-
self.logger,
371-
self.host,
372-
self.port,
373-
timeout=self.init_deadline - time.time(),
374-
server_process=self._proc,
375-
)
376-
except Exception:
377-
self.logger.error(
378-
"WebDriver was not accessible "
379-
f"within the timeout:\n{traceback.format_exc()}")
380-
raise
381-
finally:
382-
self._output_handler.start(group_metadata=group_metadata, **kwargs)
362+
self._output_handler.start(group_metadata=group_metadata, **kwargs)
383363
self.logger.debug("_run complete")
384364

385365
def stop(self, force: bool = False) -> bool:

tools/wptrunner/wptrunner/browsers/firefox.py

+2
Original file line numberDiff line numberDiff line change
@@ -910,6 +910,7 @@ def __init__(self, logger, binary, package_name, prefs_root, webdriver_binary, w
910910
self.binary = binary
911911
self.package_name = package_name
912912
self.webdriver_binary = webdriver_binary
913+
self.init_deadline = None
913914

914915
self.stackfix_dir = stackfix_dir
915916
self.symbols_path = symbols_path
@@ -958,6 +959,7 @@ def create_output_handler(self, cmd):
958959

959960
def start(self, group_metadata, **kwargs):
960961
self.leak_report_file = setup_leak_report(self.leak_check, self.profile, self.env)
962+
self.init_deadline = time.time() + self.init_timeout
961963
super().start(group_metadata, **kwargs)
962964

963965
def stop(self, force=False):

tools/wptrunner/wptrunner/tests/browsers/test_base.py

+8-14
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import sys
44
from os.path import dirname, join
5-
from unittest import mock
65

76
import pytest
87

@@ -30,19 +29,14 @@ def test_logging_immediate_exit():
3029
handler = MozLogTestHandler()
3130
logger.add_handler(handler)
3231

33-
class CustomException(Exception):
34-
pass
35-
36-
with mock.patch.object(base, "wait_for_service", side_effect=CustomException):
37-
browser = base.WebDriverBrowser(
38-
logger, webdriver_binary="echo", webdriver_args=["sample output"]
39-
)
40-
try:
41-
with pytest.raises(CustomException):
42-
browser.start(group_metadata={})
43-
finally:
44-
# Ensure the `echo` process actually exits
45-
browser._proc.wait()
32+
browser = base.WebDriverBrowser(
33+
logger, webdriver_binary="echo", webdriver_args=["sample output"]
34+
)
35+
try:
36+
browser.start(group_metadata={})
37+
finally:
38+
# Ensure the `echo` process actually exits
39+
browser._proc.wait()
4640

4741
process_output_actions = [
4842
data for data in handler.items if data["action"] == "process_output"

0 commit comments

Comments
 (0)