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

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

Issue 2485763002: Use devil's adb with each bisect iteration, also start/stop daemons. (Closed)
Patch Set: Whitespace cleanup. Created 4 years, 1 month 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
Index: scripts/slave/recipe_modules/auto_bisect/api.py
diff --git a/scripts/slave/recipe_modules/auto_bisect/api.py b/scripts/slave/recipe_modules/auto_bisect/api.py
index ecbb988467a491943be3e97773c94a61a1ff0052..dfeb685c157739dcd1603e8d1b085f80e543ec2e 100644
--- a/scripts/slave/recipe_modules/auto_bisect/api.py
+++ b/scripts/slave/recipe_modules/auto_bisect/api.py
@@ -8,6 +8,7 @@ This API is meant to enable the bisect recipe to bisect any chromium-supported
platform for any test that can be run via buildbot, perf or otherwise.
"""
+import contextlib
import os
from recipe_engine import recipe_api
@@ -51,6 +52,22 @@ class AutoBisectApi(recipe_api.RecipeApi):
# None means "default value".
self._working_dir = None
+ @contextlib.contextmanager
+ def noop_context_manager(_api):
+ """This is a context manager that doesn't do anything.
+
+ It is used for a placeholder for code that should be wrapped around ever
RobertoCN 2016/11/08 19:16:56 nit: every
+ test execution of a bisect iteration or full build. Replace it with a
+ real context manager (one that accepts an api argument) to do something
+ useful.
+ """
+ yield
+
+ # test_context_mgr is run for each overall bisect run (i.e., once).
jbudorick 2016/11/08 00:18:31 build_context_mgr
+ self.build_context_mgr = noop_context_manager
+ # test_context_mgr is run for each iteration of the bisect.
+ self.test_context_mgr = noop_context_manager
+
@property
def working_dir(self):
if not self._working_dir:
@@ -309,25 +326,26 @@ class AutoBisectApi(recipe_api.RecipeApi):
bot_config_object = self.m.chromium_tests.create_bot_config_object(
mastername, buildername)
with self.m.chromium_tests.wrap_chromium_tests(bot_config_object, tests):
- if self.m.chromium.c.TARGET_PLATFORM == 'android' and not skip_download:
- deploy_apks = []
- deploy_args = []
- if self.internal_bisect: # pragma: no cover
- deploy_args = list(bot_config['deploy_args'])
- deploy_apks = bot_config.get('deploy_apks')
- if deploy_apks:
- deploy_args.extend([
- '--apks',
- ','.join(str(self.m.chromium_android.apk_path(apk))
- for apk in deploy_apks)])
- else:
ghost stip (do not use) 2016/11/07 23:57:48 diff didn't like this indent for some reason
- if bot_config.get('webview'):
- deploy_apks = ['SystemWebView.apk', 'SystemWebViewShell.apk']
+ with self.test_context_mgr(self.m):
+ if self.m.chromium.c.TARGET_PLATFORM == 'android' and not skip_download:
ghost stip (do not use) 2016/11/07 23:57:48 I would have added this part to the context manage
+ deploy_apks = []
+ deploy_args = []
+ if self.internal_bisect: # pragma: no cover
+ deploy_args = list(bot_config['deploy_args'])
+ deploy_apks = bot_config.get('deploy_apks')
+ if deploy_apks:
+ deploy_args.extend([
+ '--apks',
+ ','.join(str(self.m.chromium_android.apk_path(apk))
+ for apk in deploy_apks)])
else:
- deploy_apks = ['ChromePublic.apk']
- self.deploy_apk_on_device(
- self.full_deploy_script, deploy_apks, deploy_args)
- test_runner()
+ if bot_config.get('webview'):
+ deploy_apks = ['SystemWebView.apk', 'SystemWebViewShell.apk']
+ else:
+ deploy_apks = ['ChromePublic.apk']
+ self.deploy_apk_on_device(
+ self.full_deploy_script, deploy_apks, deploy_args)
+ test_runner()
def deploy_apk_on_device(self, deploy_script, deploy_apks, deploy_args):
"""Installs apk on the android device."""
@@ -389,14 +407,7 @@ class AutoBisectApi(recipe_api.RecipeApi):
with api.step.context(context):
affected_files = self.m.tryserver.get_files_affected_by_patch()
- # Skip device setup for internal bisect as it is taken care in
- # internal recipes.
- if (api.chromium.c.TARGET_PLATFORM == 'android' and
- not self.internal_bisect):
- api.chromium_android.common_tests_setup_steps(
- perf_setup=True, remove_system_webview=True)
- api.chromium.runhooks()
- try:
+ with self.build_context_mgr(api):
ghost stip (do not use) 2016/11/07 23:57:48 😎
# Run legacy bisect script if the patch contains bisect.cfg.
if BISECT_CONFIG_FILE in affected_files:
api.step('***LEGACY BISECT (deprecated)***', [])
@@ -415,12 +426,3 @@ class AutoBisectApi(recipe_api.RecipeApi):
api.step('***PERF TRYJOB***', [])
self.m.perf_try.start_perf_try_job(
api, affected_files, update_step, self.bot_db)
- finally:
- if api.chromium.c.TARGET_PLATFORM == 'android':
- if self.internal_bisect: # pragma: no cover
- api.chromium_android.init_and_sync(
- gclient_config=api.chromium_android.c.internal_dir_name,
- use_bot_update=True)
- else:
- self.ensure_checkout()
- api.chromium_android.common_tests_final_steps()

Powered by Google App Engine
This is Rietveld 408576698