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

Unified Diff: infra/bots/recipes/swarm_test.py

Issue 2198973002: [Recipes] Move test and perf steps into test and perf recipes (Closed) Base URL: https://skia.googlesource.com/skia.git@fix_buildbot_spec
Patch Set: ready for review Created 4 years, 4 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 | « infra/bots/recipes/swarm_perf.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: infra/bots/recipes/swarm_test.py
diff --git a/infra/bots/recipes/swarm_test.py b/infra/bots/recipes/swarm_test.py
index c42a7901baacbc3409f66ed98908e5232a943446..e219e72cee9209633a688030f01e29f2211a422c 100644
--- a/infra/bots/recipes/swarm_test.py
+++ b/infra/bots/recipes/swarm_test.py
@@ -7,13 +7,17 @@
DEPS = [
+ 'build/file',
'core',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/platform',
'recipe_engine/properties',
+ 'recipe_engine/python',
'recipe_engine/raw_io',
+ 'flavor',
'run',
+ 'vars',
]
@@ -33,10 +37,162 @@ TEST_BUILDERS = {
}
+def key_params(api):
+ """Build a unique key from the builder name (as a list).
+
+ E.g. arch x86 gpu GeForce320M mode MacMini4.1 os Mac10.6
+ """
+ # Don't bother to include role, which is always Test.
+ # TryBots are uploaded elsewhere so they can use the same key.
+ blacklist = ['role', 'is_trybot']
+
+ flat = []
+ for k in sorted(api.vars.builder_cfg.keys()):
+ if k not in blacklist:
+ flat.append(k)
+ flat.append(api.vars.builder_cfg[k])
+ return flat
+
+
+def test_steps(api):
+ """Run the DM test."""
+ use_hash_file = False
+ if api.vars.upload_dm_results:
+ # This must run before we write anything into
+ # api.flavor.device_dirs.dm_dir or we may end up deleting our
+ # output on machines where they're the same.
+ api.flavor.create_clean_host_dir(api.vars.dm_dir)
+ host_dm_dir = str(api.vars.dm_dir)
+ device_dm_dir = str(api.flavor.device_dirs.dm_dir)
+ if host_dm_dir != device_dm_dir:
+ api.flavor.create_clean_device_dir(device_dm_dir)
+
+ # Obtain the list of already-generated hashes.
+ hash_filename = 'uninteresting_hashes.txt'
+
+ # Ensure that the tmp_dir exists.
+ api.run.run_once(api.file.makedirs,
+ 'tmp_dir',
+ api.vars.tmp_dir,
+ infra_step=True)
+
+ host_hashes_file = api.vars.tmp_dir.join(hash_filename)
+ hashes_file = api.flavor.device_path_join(
+ api.flavor.device_dirs.tmp_dir, hash_filename)
+ api.run(
+ api.python.inline,
+ 'get uninteresting hashes',
+ program="""
+ import contextlib
+ import math
+ import socket
+ import sys
+ import time
+ import urllib2
+
+ HASHES_URL = 'https://gold.skia.org/_/hashes'
+ RETRIES = 5
+ TIMEOUT = 60
+ WAIT_BASE = 15
+
+ socket.setdefaulttimeout(TIMEOUT)
+ for retry in range(RETRIES):
+ try:
+ with contextlib.closing(
+ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:
+ hashes = w.read()
+ with open(sys.argv[1], 'w') as f:
+ f.write(hashes)
+ break
+ except Exception as e:
+ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL
+ print e
+ if retry == RETRIES:
+ raise
+ waittime = WAIT_BASE * math.pow(2, retry)
+ print 'Retry in %d seconds.' % waittime
+ time.sleep(waittime)
+ """,
+ args=[host_hashes_file],
+ cwd=api.vars.skia_dir,
+ abort_on_failure=False,
+ fail_build_on_failure=False,
+ infra_step=True)
+
+ if api.path.exists(host_hashes_file):
+ api.flavor.copy_file_to_device(host_hashes_file, hashes_file)
+ use_hash_file = True
+
+ # Run DM.
+ properties = [
+ 'gitHash', api.vars.got_revision,
+ 'master', api.vars.master_name,
+ 'builder', api.vars.builder_name,
+ 'build_number', api.vars.build_number,
+ ]
+ if api.vars.is_trybot:
+ properties.extend([
+ 'issue', api.vars.issue,
+ 'patchset', api.vars.patchset,
+ ])
+
+ args = [
+ 'dm',
+ '--undefok', # This helps branches that may not know new flags.
+ '--resourcePath', api.flavor.device_dirs.resource_dir,
+ '--skps', api.flavor.device_dirs.skp_dir,
+ '--images', api.flavor.device_path_join(
+ api.flavor.device_dirs.images_dir, 'dm'),
+ '--colorImages', api.flavor.device_path_join(
+ api.flavor.device_dirs.images_dir, 'colorspace'),
+ '--nameByHash',
+ '--properties'
+ ] + properties
+
+ args.append('--key')
+ args.extend(key_params(api))
+ if use_hash_file:
+ args.extend(['--uninterestingHashesFile', hashes_file])
+ if api.vars.upload_dm_results:
+ args.extend(['--writePath', api.flavor.device_dirs.dm_dir])
+
+ skip_flag = None
+ if api.vars.builder_cfg.get('cpu_or_gpu') == 'CPU':
+ skip_flag = '--nogpu'
+ elif api.vars.builder_cfg.get('cpu_or_gpu') == 'GPU':
+ skip_flag = '--nocpu'
+ if skip_flag:
+ args.append(skip_flag)
+ args.extend(api.vars.dm_flags)
+
+ api.run(api.flavor.step, 'dm', cmd=args,
+ abort_on_failure=False,
+ env=api.vars.default_env)
+
+ if api.vars.upload_dm_results:
+ # Copy images and JSON to host machine if needed.
+ api.flavor.copy_directory_contents_to_host(
+ api.flavor.device_dirs.dm_dir, api.vars.dm_dir)
+
+ # See skia:2789.
+ if ('Valgrind' in api.vars.builder_name and
+ api.vars.builder_cfg.get('cpu_or_gpu') == 'GPU'):
+ abandonGpuContext = list(args)
+ abandonGpuContext.append('--abandonGpuContext')
+ api.run(api.flavor.step, 'dm --abandonGpuContext',
+ cmd=abandonGpuContext, abort_on_failure=False)
+ preAbandonGpuContext = list(args)
+ preAbandonGpuContext.append('--preAbandonGpuContext')
+ api.run(api.flavor.step, 'dm --preAbandonGpuContext',
+ cmd=preAbandonGpuContext, abort_on_failure=False,
+ env=api.vars.default_env)
+
+
def RunSteps(api):
api.core.setup()
- api.core.test_steps()
- api.core.cleanup_steps()
+ api.flavor.install()
+ test_steps(api)
+ api.flavor.cleanup_steps()
api.run.check_failure()
« no previous file with comments | « infra/bots/recipes/swarm_perf.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698