Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Unified Diff: scripts/slave/recipe_modules/auto_bisect_staging/api.py

Issue 2247373002: Refactor stages 1, 2 and test_api overhaul. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Relative intra-module imports. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | scripts/slave/recipe_modules/auto_bisect_staging/bisect_exceptions.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: scripts/slave/recipe_modules/auto_bisect_staging/api.py
diff --git a/scripts/slave/recipe_modules/auto_bisect_staging/api.py b/scripts/slave/recipe_modules/auto_bisect_staging/api.py
index 50c14b38b988cef0047d6c222d78a996aa1bd2a7..4d64c3bd0404fd173d0ad03bb7735ec11b7335dc 100644
--- a/scripts/slave/recipe_modules/auto_bisect_staging/api.py
+++ b/scripts/slave/recipe_modules/auto_bisect_staging/api.py
@@ -19,7 +19,7 @@ from . import local_bisect
BISECT_CONFIG_FILE = 'tools/auto_bisect/bisect.cfg'
-class AutoBisectApi(recipe_api.RecipeApi):
+class AutoBisectStagingApi(recipe_api.RecipeApi):
"""A module for bisect specific functions."""
# Number of seconds to wait between polls for test results.
@@ -36,7 +36,7 @@ class AutoBisectApi(recipe_api.RecipeApi):
SERVICE_ACCOUNT = 'chromium-bisect'
def __init__(self, *args, **kwargs):
- super(AutoBisectApi, self).__init__(*args, **kwargs)
+ super(AutoBisectStagingApi, self).__init__(*args, **kwargs)
self.override_poll_interval = None
self.bot_db = None
# Repo for triggering build jobs.
@@ -57,9 +57,6 @@ class AutoBisectApi(recipe_api.RecipeApi):
self._working_dir = self.m.chromium_checkout.get_checkout_dir({})
return self._working_dir or self.m.path['slave_build']
- def perform_bisect(self, **flags):
- return local_bisect.perform_bisect(self, **flags)
-
def create_bisector(self, bisect_config_dict, dummy_mode=False, **flags):
"""Passes the api and the config dictionary to the Bisector constructor.
@@ -104,11 +101,11 @@ class AutoBisectApi(recipe_api.RecipeApi):
"""Sets SVN repo url for triggering build jobs."""
self.svn_repo_url = svn_repo_url
- def gsutil_file_exists(self, path):
+ def gsutil_file_exists(self, path, **kwargs):
"""Returns True if a file exists at the given GS path."""
try:
- self.m.gsutil(['ls', path])
- except self.m.step.StepFailure: # pragma: no cover
+ self.m.gsutil( ['ls', path], **kwargs)
+ except self.m.step.StepFailure:
# A step failure here simply means that the file does not exist, and
# should not be treated as an error.
self.m.step.active_result.presentation.status = self.m.step.SUCCESS
@@ -134,7 +131,9 @@ class AutoBisectApi(recipe_api.RecipeApi):
step_name,
self.resource('fetch_revision_info.py'),
[revision.commit_hash, revision.depot_name],
- stdout=self.m.json.output())
+ stdout=self.m.json.output(),
+ step_test_data=lambda: self._test_data['cl_info'][revision.commit_hash],
+ )
return result.stdout
def _commit_info(self, commit_hash, url, step_name=None): # pragma: no cover
@@ -169,41 +168,8 @@ class AutoBisectApi(recipe_api.RecipeApi):
self.surface_result('BAD_REV')
raise
- def run_bisect_script(self, **kwargs):
- """Executes src/tools/run-perf-bisect-regression.py to perform bisection."""
- self.m.python(
- 'Preparing for Bisection',
- script=self.m.path['checkout'].join(
- 'tools', 'prepare-bisect-perf-regression.py'),
- args=['-w', self.m.path['cache'].join('bisect')])
- args = []
-
- kwargs['allow_subannotations'] = True
-
- # TODO(prasadv): Remove this once bisect runs are no longer running
- # against revisions from February 2016 or earlier.
- if self.internal_bisect: # pragma: no cover
- kwargs['env'] = {'CHROMIUM_OUTPUT_DIR': self.m.chromium.output_dir}
-
- if kwargs.get('extra_src'):
- args = args + ['--extra_src', kwargs.pop('extra_src')]
- if kwargs.get('path_to_config'):
- args = args + ['--path_to_config', kwargs.pop('path_to_config')]
- if self.m.chromium.c.TARGET_PLATFORM != 'android':
- goma_dir = self.m.goma.ensure_goma()
- args += ['--path_to_goma', goma_dir]
- args += [
- '--build-properties',
- self.m.json.dumps(dict(self.m.properties.legacy())),
- ]
- self.m.chromium.runtest(
- self.m.path['checkout'].join('tools', 'run-bisect-perf-regression.py'),
- ['-w', self.m.path['cache'].join('bisect')] + args,
- name='Running Bisection',
- xvfb=True, **kwargs)
-
def run_local_test_run(self, test_config_params,
- skip_download=False): # pragma: no cover
+ skip_download=False, **kwargs):
"""Starts a test run on the same machine.
This is for the merged director/tester flow.
@@ -211,13 +177,13 @@ class AutoBisectApi(recipe_api.RecipeApi):
if self.m.platform.is_win:
self.m.chromium.taskkill()
- if skip_download:
+ if skip_download: # pragma: no cover
update_step = None
else:
update_step = self._SyncRevisionToTest(test_config_params)
- self.start_test_run_for_bisect(update_step, self.bot_db,
- test_config_params, run_locally=True,
- skip_download=skip_download)
+ return self.start_test_run_for_bisect(
+ update_step, self.bot_db, test_config_params,
+ skip_download=skip_download, **kwargs)
def ensure_checkout(self, *args, **kwargs):
if self.working_dir:
@@ -225,13 +191,13 @@ class AutoBisectApi(recipe_api.RecipeApi):
return self.m.bot_update.ensure_checkout(*args, **kwargs)
- def _SyncRevisionToTest(self, test_config_params): # pragma: no cover
+ def _SyncRevisionToTest(self, test_config_params):
if not self.internal_bisect:
self.m.gclient.c.revisions.update(
test_config_params['deps_revision_overrides'])
return self.ensure_checkout(
root_solution_revision=test_config_params['revision'])
- else:
+ else: # pragma: no cover
return self._SyncRevisionsForAndroidChrome(
test_config_params['revision_ladder'])
@@ -247,15 +213,12 @@ class AutoBisectApi(recipe_api.RecipeApi):
self.m.gclient('sync %s' % '-'.join(revisions), params)
return None
- def start_test_run_for_bisect(self, update_step, bot_db,
- test_config_params, run_locally=False,
- skip_download=False):
+ def start_test_run_for_bisect(self, update_step, bot_db, test_config_params,
+ skip_download=False, **kwargs):
mastername = self.m.properties.get('mastername')
buildername = self.m.properties.get('buildername')
bot_config = bot_db.get_bot_config(mastername, buildername)
build_archive_url = test_config_params['parent_build_archive_url']
- if not run_locally:
- self.m.bisect_tester_staging.upload_job_url()
if not skip_download:
if self.m.chromium.c.TARGET_PLATFORM == 'android':
# The best way to ensure the old build directory is not used is to
@@ -298,7 +261,9 @@ class AutoBisectApi(recipe_api.RecipeApi):
build_revision=test_config_params['parent_got_revision'],
override_bot_type='tester')
- tests = [self.m.chromium_tests.steps.BisectTestStaging(test_config_params)]
+ tests = [
+ self.m.chromium_tests.steps.BisectTestStaging(
+ test_config_params, **kwargs)]
if not tests: # pragma: no cover
return
@@ -328,6 +293,7 @@ class AutoBisectApi(recipe_api.RecipeApi):
self.deploy_apk_on_device(
self.full_deploy_script, deploy_apks, deploy_args)
test_runner()
+ return tests[0].run_results
def deploy_apk_on_device(self, deploy_script, deploy_apks, deploy_args):
"""Installs apk on the android device."""
@@ -377,8 +343,7 @@ class AutoBisectApi(recipe_api.RecipeApi):
flags['do_not_nest_wait_for_revision'] = kwargs.pop(
'do_not_nest_wait_for_revision')
if bot_db is None: # pragma: no cover
- self.bot_db = api.chromium_tests.create_bot_db_from_master_dict(
- '', None, None)
+ self.bot_db = api.chromium_tests.create_bot_db_from_master_dict('', None)
else:
self.bot_db = bot_db
@@ -396,16 +361,16 @@ class AutoBisectApi(recipe_api.RecipeApi):
perf_setup=True, remove_system_webview=True)
api.chromium.runhooks()
try:
- # Run legacy bisect script if the patch contains bisect.cfg.
if BISECT_CONFIG_FILE in affected_files:
- api.step('***LEGACY BISECT (deprecated)***', [])
- self.run_bisect_script(**kwargs)
+ api.step('***LEGACY BISECT HAS BEEN DEPRECATED***', [])
+ api.step.active_result.presentation.status = api.step.FAILURE
+ return
elif api.properties.get('bisect_config'):
# We can distinguish between a config for a full bisect vs a single
# test by checking for the presence of the good_revision key.
if api.properties.get('bisect_config').get('good_revision'):
api.step('***BISECT***', [])
- local_bisect.perform_bisect(self, **flags) # pragma: no cover
+ local_bisect.perform_bisect(self, **flags)
else:
api.step('***SINGLE TEST (deprecated)***', [])
self.start_test_run_for_bisect(update_step, self.bot_db,
@@ -423,3 +388,33 @@ class AutoBisectApi(recipe_api.RecipeApi):
else:
self.ensure_checkout()
api.chromium_android.common_tests_final_steps()
+
+
+ def stat_compare(self, values_a, values_b, metric,
+ output_format='chartjson', **kwargs):
+ """Compares samples using catapult's statistics implementation.
+
+ Args:
+ values_a, values_b: lists of paths to the json files containing the values
+ produced by the test.
+ metric: the name of the metric as sent by dashboard.
+ output_format: 'chartjson', 'valueset' or 'buildbot'
+
+ Returns:
+ a dict containing 'result' which may be True, False or 'needMoreData', as
+ well as details about each sample ('debug_values', 'mean' and 'std_dev').
+
+ """
+ args = [','.join(map(str, values_a)),
+ ','.join(map(str, values_b)),
+ metric,
+ '--' + output_format]
+
+ script = self.working_dir.join('catapult', 'tracing', 'bin',
+ 'compare_samples')
+ return self.m.python(
+ 'Compare samples',
+ script=script,
+ args=args,
+ stdout=self.m.json.output(),
+ **kwargs).stdout
« no previous file with comments | « no previous file | scripts/slave/recipe_modules/auto_bisect_staging/bisect_exceptions.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698