def split_apps(config, tests): app_symbols = { "chrome": "ChR", "chrome-m": "ChR", "chromium": "Cr", "fenix": "fenix", "refbrow": "refbrow", } for test in tests: apps = test.pop("apps", None) if not apps: yield test continue for app in apps: atest = deepcopy(test) suffix = f"-{app}" atest["app"] = app atest["description"] += f" on {app.capitalize()}" name = atest["test-name"] + suffix atest["test-name"] = name atest["try-name"] = name if app in app_symbols: group, symbol = split_symbol(atest["treeherder-symbol"]) group += f"-{app_symbols[app]}" atest["treeherder-symbol"] = join_symbol(group, symbol) yield atest
def split_jsshell(config, jobs): all_shells = {"sm": "Spidermonkey", "v8": "Google V8"} for job in jobs: if not job["name"].startswith("jsshell"): yield job continue test = job.pop("test") for shell in job.get("shell", all_shells.keys()): assert shell in all_shells new_job = copy.deepcopy(job) new_job["name"] = "{}-{}".format(new_job["name"], shell) new_job["description"] = "{} on {}".format(new_job["description"], all_shells[shell]) new_job["shell"] = shell group = f"js-bench-{shell}" symbol = split_symbol(new_job["treeherder"]["symbol"])[1] new_job["treeherder"]["symbol"] = join_symbol(group, symbol) run = new_job["run"] run["mach"] = run["mach"].format(shell=shell, SHELL=shell.upper(), test=test) yield new_job
def split_btime_variants(config, jobs): for job in jobs: if job.get("perftest-btime-variants") is None: yield job continue variants = job.pop("perftest-btime-variants") if not variants: yield job continue yield_existing = False for suffix, options in variants: if suffix is None: # Append options to the existing job job.setdefault("perftest-btime-variants", []).append(options) yield_existing = True else: job_new = deepcopy(job) group, symbol = split_symbol(job_new["treeherder"]["symbol"]) symbol += "-" + suffix job_new["treeherder"]["symbol"] = join_symbol(group, symbol) job_new["name"] += "-" + suffix job_new.setdefault("perftest-perfherder-global", {}).setdefault("extraOptions", []).append(suffix) # Replace the existing options with the new ones job_new["perftest-btime-variants"] = [options] yield job_new # The existing job has been modified so we should also return it if yield_existing: yield job
def split_python(config, jobs): for job in jobs: key = "python-version" versions = job.pop(key, []) if not versions: yield job continue for version in versions: group = f"py{version}" pyjob = copy.deepcopy(job) if "name" in pyjob: pyjob["name"] += f"-{group}" else: pyjob["label"] += f"-{group}" symbol = split_symbol(pyjob["treeherder"]["symbol"])[1] pyjob["treeherder"]["symbol"] = join_symbol(group, symbol) pyjob["run"][key] = version yield pyjob
def split_perftest_variants(config, jobs): for job in jobs: if job.get("variants") is None: yield job continue for variant in job.pop("variants"): job_new = deepcopy(job) group, symbol = split_symbol(job_new["treeherder"]["symbol"]) group += "-" + variant job_new["treeherder"]["symbol"] = join_symbol(group, symbol) job_new["name"] += "-" + variant job_new.setdefault("perftest-perfherder-global", {}).setdefault("extraOptions", []).append(variant) job_new[variant] = True yield job_new yield job
def split_page_load_by_url(config, tests): for test in tests: # `chunk-number` and 'subtest' only exists when the task had a # definition for `raptor-subtests` chunk_number = test.pop("chunk-number", None) subtest = test.get( "subtest" ) # don't pop as some tasks need this value after splitting variants subtest_symbol = test.pop("subtest-symbol", None) if not chunk_number or not subtest: yield test continue if len(subtest_symbol) > 10 and "ytp" not in subtest_symbol: raise Exception( "Treeherder symbol %s is lager than 10 char! Please use a different symbol." % subtest_symbol) if test["test-name"].startswith("browsertime-"): test["raptor-test"] = subtest # Remove youtube-playback in the test name to avoid duplication test["test-name"] = test["test-name"].replace( "youtube-playback-", "") else: # Use full test name if running on webextension test["raptor-test"] = "raptor-tp6-" + subtest + "-{}".format( test["app"]) # Only run the subtest/single URL test["test-name"] += f"-{subtest}" test["try-name"] += f"-{subtest}" # Set treeherder symbol and description group, _ = split_symbol(test["treeherder-symbol"]) test["treeherder-symbol"] = join_symbol(group, subtest_symbol) test["description"] += f" on {subtest}" yield test
def test_split_with_group(self): self.assertEqual(split_symbol("ab(xy)"), ("ab", "xy"))
def test_split_no_group(self): self.assertEqual(split_symbol("xy"), ("?", "xy"))