mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
Bug 1338397 - Use timeout multipler to adjust browser startup timeout in wpt, r=maja_zf
For gecko builds with --disable-optimize everything is very very slow; enough that the fixed 60s timeout for the browser to start is insufficient, and various marionette timeouts may also be hit. To alleviate this problem either disable timeouts or multiply them by the timeout multiplier which is generally set to around 3 for debug builds. This seems sufficient to solve the problem on the hardware developers actually have. MozReview-Commit-ID: I3zHJGXlpnd --HG-- extra : rebase_source : 01b680f2810e198bde513f741d1f9ca8433d7a5d
This commit is contained in:
parent
b8c378e1a5
commit
c0b9b89732
@ -23,7 +23,7 @@ def check_args(**kwargs):
|
||||
require_arg(kwargs, "webdriver_binary")
|
||||
|
||||
|
||||
def browser_kwargs(**kwargs):
|
||||
def browser_kwargs(test_type, run_info_data, **kwargs):
|
||||
return {"binary": kwargs["binary"],
|
||||
"webdriver_binary": kwargs["webdriver_binary"]}
|
||||
|
||||
|
@ -21,7 +21,7 @@ __wptrunner__ = {"product": "edge",
|
||||
def check_args(**kwargs):
|
||||
require_arg(kwargs, "webdriver_binary")
|
||||
|
||||
def browser_kwargs(**kwargs):
|
||||
def browser_kwargs(test_type, run_info_data, **kwargs):
|
||||
return {"webdriver_binary": kwargs["webdriver_binary"]}
|
||||
|
||||
def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
||||
|
@ -44,13 +44,26 @@ __wptrunner__ = {"product": "firefox",
|
||||
"update_properties": "update_properties"}
|
||||
|
||||
|
||||
def get_timeout_multiplier(test_type, run_info_data, **kwargs):
|
||||
if kwargs["timeout_multiplier"] is not None:
|
||||
return kwargs["timeout_multiplier"]
|
||||
if test_type == "reftest":
|
||||
if run_info_data["debug"] or run_info_data.get("asan"):
|
||||
return 4
|
||||
else:
|
||||
return 2
|
||||
elif run_info_data["debug"] or run_info_data.get("asan"):
|
||||
return 3
|
||||
return None
|
||||
|
||||
|
||||
def check_args(**kwargs):
|
||||
require_arg(kwargs, "binary")
|
||||
if kwargs["ssl_type"] != "none":
|
||||
require_arg(kwargs, "certutil_binary")
|
||||
|
||||
|
||||
def browser_kwargs(**kwargs):
|
||||
def browser_kwargs(test_type, run_info_data, **kwargs):
|
||||
return {"binary": kwargs["binary"],
|
||||
"prefs_root": kwargs["prefs_root"],
|
||||
"debug_info": kwargs["debug_info"],
|
||||
@ -60,7 +73,10 @@ def browser_kwargs(**kwargs):
|
||||
"ca_certificate_path": kwargs["ssl_env"].ca_cert_path(),
|
||||
"e10s": kwargs["gecko_e10s"],
|
||||
"stackfix_dir": kwargs["stackfix_dir"],
|
||||
"binary_args": kwargs["binary_args"]}
|
||||
"binary_args": kwargs["binary_args"],
|
||||
"timeout_multiplier": get_timeout_multiplier(test_type,
|
||||
run_info_data,
|
||||
**kwargs)}
|
||||
|
||||
|
||||
def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
||||
@ -68,14 +84,9 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
||||
executor_kwargs = base_executor_kwargs(test_type, server_config,
|
||||
cache_manager, **kwargs)
|
||||
executor_kwargs["close_after_done"] = test_type != "reftest"
|
||||
if kwargs["timeout_multiplier"] is None:
|
||||
if test_type == "reftest":
|
||||
if run_info_data["debug"] or run_info_data.get("asan"):
|
||||
executor_kwargs["timeout_multiplier"] = 4
|
||||
else:
|
||||
executor_kwargs["timeout_multiplier"] = 2
|
||||
elif run_info_data["debug"] or run_info_data.get("asan"):
|
||||
executor_kwargs["timeout_multiplier"] = 3
|
||||
executor_kwargs["timeout_multiplier"] = get_timeout_multiplier(test_type,
|
||||
run_info_data,
|
||||
**kwargs)
|
||||
if test_type == "wdspec":
|
||||
executor_kwargs["webdriver_binary"] = kwargs.get("webdriver_binary")
|
||||
fxOptions = {}
|
||||
@ -115,7 +126,7 @@ class FirefoxBrowser(Browser):
|
||||
def __init__(self, logger, binary, prefs_root, debug_info=None,
|
||||
symbols_path=None, stackwalk_binary=None, certutil_binary=None,
|
||||
ca_certificate_path=None, e10s=False, stackfix_dir=None,
|
||||
binary_args=None):
|
||||
binary_args=None, timeout_multiplier=None):
|
||||
Browser.__init__(self, logger)
|
||||
self.binary = binary
|
||||
self.prefs_root = prefs_root
|
||||
@ -134,6 +145,8 @@ class FirefoxBrowser(Browser):
|
||||
self.symbols_path)
|
||||
else:
|
||||
self.stack_fixer = None
|
||||
if timeout_multiplier:
|
||||
self.init_timeout = self.init_timeout * timeout_multiplier
|
||||
|
||||
def start(self):
|
||||
self.marionette_port = get_free_port(2828, exclude=self.used_ports)
|
||||
|
@ -30,7 +30,7 @@ def check_args(**kwargs):
|
||||
require_arg(kwargs, "binary")
|
||||
|
||||
|
||||
def browser_kwargs(**kwargs):
|
||||
def browser_kwargs(test_type, run_info_data, **kwargs):
|
||||
return {
|
||||
"binary": kwargs["binary"],
|
||||
"debug_info": kwargs["debug_info"],
|
||||
|
@ -42,7 +42,7 @@ def check_args(**kwargs):
|
||||
require_arg(kwargs, "binary")
|
||||
|
||||
|
||||
def browser_kwargs(**kwargs):
|
||||
def browser_kwargs(test_type, run_info_data, **kwargs):
|
||||
return {
|
||||
"binary": kwargs["binary"],
|
||||
"debug_info": kwargs["debug_info"],
|
||||
|
@ -52,12 +52,13 @@ def do_delayed_imports():
|
||||
|
||||
|
||||
class MarionetteProtocol(Protocol):
|
||||
def __init__(self, executor, browser):
|
||||
def __init__(self, executor, browser, timeout_multiplier=1):
|
||||
do_delayed_imports()
|
||||
|
||||
Protocol.__init__(self, executor, browser)
|
||||
self.marionette = None
|
||||
self.marionette_port = browser.marionette_port
|
||||
self.timeout_multiplier = timeout_multiplier
|
||||
self.timeout = None
|
||||
self.runner_handle = None
|
||||
|
||||
@ -66,14 +67,16 @@ class MarionetteProtocol(Protocol):
|
||||
Protocol.setup(self, runner)
|
||||
|
||||
self.logger.debug("Connecting to Marionette on port %i" % self.marionette_port)
|
||||
startup_timeout = marionette.Marionette.DEFAULT_STARTUP_TIMEOUT * self.timeout_multiplier
|
||||
self.marionette = marionette.Marionette(host='localhost',
|
||||
port=self.marionette_port,
|
||||
socket_timeout=None)
|
||||
socket_timeout=None,
|
||||
startup_timeout=startup_timeout)
|
||||
|
||||
# XXX Move this timeout somewhere
|
||||
self.logger.debug("Waiting for Marionette connection")
|
||||
while True:
|
||||
success = self.marionette.wait_for_port(60)
|
||||
success = self.marionette.wait_for_port(60 * self.timeout_multiplier)
|
||||
#When running in a debugger wait indefinitely for firefox to start
|
||||
if success or self.executor.debug_info is None:
|
||||
break
|
||||
@ -408,7 +411,7 @@ class MarionetteTestharnessExecutor(TestharnessExecutor):
|
||||
timeout_multiplier=timeout_multiplier,
|
||||
debug_info=debug_info)
|
||||
|
||||
self.protocol = MarionetteProtocol(self, browser)
|
||||
self.protocol = MarionetteProtocol(self, browser, timeout_multiplier)
|
||||
self.script = open(os.path.join(here, "testharness_marionette.js")).read()
|
||||
self.close_after_done = close_after_done
|
||||
self.window_id = str(uuid.uuid4())
|
||||
|
@ -160,8 +160,6 @@ def run_tests(config, test_paths, product, **kwargs):
|
||||
logger.critical("Error starting test environment: %s" % e.message)
|
||||
raise
|
||||
|
||||
browser_kwargs = get_browser_kwargs(ssl_env=ssl_env, **kwargs)
|
||||
|
||||
repeat = kwargs["repeat"]
|
||||
repeat_count = 0
|
||||
repeat_until_unexpected = kwargs["repeat_until_unexpected"]
|
||||
@ -188,9 +186,11 @@ def run_tests(config, test_paths, product, **kwargs):
|
||||
else:
|
||||
browser_cls = target_browser_cls
|
||||
|
||||
for test in test_loader.disabled_tests[test_type]:
|
||||
logger.test_start(test.id)
|
||||
logger.test_end(test.id, status="SKIP")
|
||||
browser_kwargs = get_browser_kwargs(test_type,
|
||||
run_info,
|
||||
ssl_env=ssl_env,
|
||||
**kwargs)
|
||||
|
||||
|
||||
executor_cls = executor_classes.get(test_type)
|
||||
executor_kwargs = get_executor_kwargs(test_type,
|
||||
@ -204,6 +204,9 @@ def run_tests(config, test_paths, product, **kwargs):
|
||||
(test_type, product))
|
||||
continue
|
||||
|
||||
for test in test_loader.disabled_tests[test_type]:
|
||||
logger.test_start(test.id)
|
||||
logger.test_end(test.id, status="SKIP")
|
||||
|
||||
with ManagerGroup("web-platform-tests",
|
||||
kwargs["processes"],
|
||||
|
Loading…
Reference in New Issue
Block a user