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

Unified Diff: infra/bots/recipe_modules/core/api.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 | « no previous file | infra/bots/recipe_modules/flavor/__init__.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: infra/bots/recipe_modules/core/api.py
diff --git a/infra/bots/recipe_modules/core/api.py b/infra/bots/recipe_modules/core/api.py
index 6d477efd06794c3a52862df79effb53c57cb71c8..130ea7056290d039558e692632c8e796131c7594 100644
--- a/infra/bots/recipe_modules/core/api.py
+++ b/infra/bots/recipe_modules/core/api.py
@@ -17,15 +17,6 @@ from recipe_engine import config_types
from . import fake_specs
-TEST_EXPECTED_SKP_VERSION = '42'
-TEST_EXPECTED_SK_IMAGE_VERSION = '42'
-
-VERSION_FILE_SK_IMAGE = 'SK_IMAGE_VERSION'
-VERSION_FILE_SKP = 'SKP_VERSION'
-
-VERSION_NONE = -1
-
-
class SkiaApi(recipe_api.RecipeApi):
def get_builder_spec(self, skia_dir, builder_name):
@@ -176,323 +167,3 @@ class SkiaApi(recipe_api.RecipeApi):
if self.m.vars.need_chromium_checkout:
self.m.gclient.runhooks(cwd=self.m.vars.checkout_root,
env=self.m.vars.gclient_env)
-
- def copy_dir(self, host_version, version_file, tmp_dir,
- host_path, device_path, test_expected_version,
- test_actual_version):
- actual_version_file = self.m.path.join(tmp_dir, version_file)
- # Copy to device.
- device_version_file = self.m.flavor.device_path_join(
- self.m.flavor.device_dirs.tmp_dir, version_file)
- if str(actual_version_file) != str(device_version_file):
- try:
- device_version = (
- self.m.flavor.read_file_on_device(device_version_file))
- except self.m.step.StepFailure:
- device_version = VERSION_NONE
- if device_version != host_version:
- self.m.flavor.remove_file_on_device(device_version_file)
- self.m.flavor.create_clean_device_dir(device_path)
- self.m.flavor.copy_directory_contents_to_device(
- host_path, device_path)
-
- # Copy the new version file.
- self.m.flavor.copy_file_to_device(actual_version_file,
- device_version_file)
-
- def _copy_images(self):
- """Download and copy test images if needed."""
- version_file = self.m.vars.infrabots_dir.join(
- 'assets', 'skimage', 'VERSION')
- test_data = self.m.properties.get(
- 'test_downloaded_sk_image_version', TEST_EXPECTED_SK_IMAGE_VERSION)
- version = self.m.run.readfile(
- version_file,
- name='Get downloaded skimage VERSION',
- test_data=test_data).rstrip()
- self.m.run.writefile(
- self.m.path.join(self.m.vars.tmp_dir, VERSION_FILE_SK_IMAGE),
- version)
- self.copy_dir(
- version,
- VERSION_FILE_SK_IMAGE,
- self.m.vars.tmp_dir,
- self.m.vars.images_dir,
- self.m.flavor.device_dirs.images_dir,
- test_expected_version=self.m.properties.get(
- 'test_downloaded_sk_image_version',
- TEST_EXPECTED_SK_IMAGE_VERSION),
- test_actual_version=self.m.properties.get(
- 'test_downloaded_sk_image_version',
- TEST_EXPECTED_SK_IMAGE_VERSION))
- return version
-
- def _copy_skps(self):
- """Download and copy the SKPs if needed."""
- version_file = self.m.vars.infrabots_dir.join(
- 'assets', 'skp', 'VERSION')
- test_data = self.m.properties.get(
- 'test_downloaded_skp_version', TEST_EXPECTED_SKP_VERSION)
- version = self.m.run.readfile(
- version_file,
- name='Get downloaded SKP VERSION',
- test_data=test_data).rstrip()
- self.m.run.writefile(
- self.m.path.join(self.m.vars.tmp_dir, VERSION_FILE_SKP),
- version)
- self.copy_dir(
- version,
- VERSION_FILE_SKP,
- self.m.vars.tmp_dir,
- self.m.vars.local_skp_dir,
- self.m.flavor.device_dirs.skp_dir,
- test_expected_version=self.m.properties.get(
- 'test_downloaded_skp_version', TEST_EXPECTED_SKP_VERSION),
- test_actual_version=self.m.properties.get(
- 'test_downloaded_skp_version', TEST_EXPECTED_SKP_VERSION))
- return version
-
- def install(self):
- """Copy the required executables and files to the device."""
- # Run any device-specific installation.
- self.m.flavor.install()
-
- # TODO(borenet): Only copy files which have changed.
- # Resources
- self.m.flavor.copy_directory_contents_to_device(
- self.m.vars.resource_dir,
- self.m.flavor.device_dirs.resource_dir)
-
- def test_steps(self):
- """Run the DM test."""
- self.m.run.run_once(self.install)
- self.m.run.run_once(self._copy_skps)
- self.m.run.run_once(self._copy_images)
-
- use_hash_file = False
- if self.m.vars.upload_dm_results:
- # This must run before we write anything into
- # self.m.flavor.device_dirs.dm_dir or we may end up deleting our
- # output on machines where they're the same.
- self.m.flavor.create_clean_host_dir(self.m.vars.dm_dir)
- host_dm_dir = str(self.m.vars.dm_dir)
- device_dm_dir = str(self.m.flavor.device_dirs.dm_dir)
- if host_dm_dir != device_dm_dir:
- self.m.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.
- self.m.run.run_once(self.m.file.makedirs,
- 'tmp_dir',
- self.m.vars.tmp_dir,
- infra_step=True)
-
- host_hashes_file = self.m.vars.tmp_dir.join(hash_filename)
- hashes_file = self.m.flavor.device_path_join(
- self.m.flavor.device_dirs.tmp_dir, hash_filename)
- self.m.run(
- self.m.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=self.m.vars.skia_dir,
- abort_on_failure=False,
- fail_build_on_failure=False,
- infra_step=True)
-
- if self.m.path.exists(host_hashes_file):
- self.m.flavor.copy_file_to_device(host_hashes_file, hashes_file)
- use_hash_file = True
-
- # Run DM.
- properties = [
- 'gitHash', self.m.vars.got_revision,
- 'master', self.m.vars.master_name,
- 'builder', self.m.vars.builder_name,
- 'build_number', self.m.vars.build_number,
- ]
- if self.m.vars.is_trybot:
- properties.extend([
- 'issue', self.m.vars.issue,
- 'patchset', self.m.vars.patchset,
- ])
-
- args = [
- 'dm',
- '--undefok', # This helps branches that may not know new flags.
- '--resourcePath', self.m.flavor.device_dirs.resource_dir,
- '--skps', self.m.flavor.device_dirs.skp_dir,
- '--images', self.m.flavor.device_path_join(
- self.m.flavor.device_dirs.images_dir, 'dm'),
- '--colorImages', self.m.flavor.device_path_join(
- self.m.flavor.device_dirs.images_dir, 'colorspace'),
- '--nameByHash',
- '--properties'
- ] + properties
-
- args.append('--key')
- args.extend(self._KeyParams())
- if use_hash_file:
- args.extend(['--uninterestingHashesFile', hashes_file])
- if self.m.vars.upload_dm_results:
- args.extend(['--writePath', self.m.flavor.device_dirs.dm_dir])
-
- skip_flag = None
- if self.m.vars.builder_cfg.get('cpu_or_gpu') == 'CPU':
- skip_flag = '--nogpu'
- elif self.m.vars.builder_cfg.get('cpu_or_gpu') == 'GPU':
- skip_flag = '--nocpu'
- if skip_flag:
- args.append(skip_flag)
- args.extend(self.m.vars.dm_flags)
-
- self.m.run(self.m.flavor.step, 'dm', cmd=args,
- abort_on_failure=False,
- env=self.m.vars.default_env)
-
- if self.m.vars.upload_dm_results:
- # Copy images and JSON to host machine if needed.
- self.m.flavor.copy_directory_contents_to_host(
- self.m.flavor.device_dirs.dm_dir, self.m.vars.dm_dir)
-
- # See skia:2789.
- if ('Valgrind' in self.m.vars.builder_name and
- self.m.vars.builder_cfg.get('cpu_or_gpu') == 'GPU'):
- abandonGpuContext = list(args)
- abandonGpuContext.append('--abandonGpuContext')
- self.m.run(self.m.flavor.step, 'dm --abandonGpuContext',
- cmd=abandonGpuContext, abort_on_failure=False)
- preAbandonGpuContext = list(args)
- preAbandonGpuContext.append('--preAbandonGpuContext')
- self.m.run(self.m.flavor.step, 'dm --preAbandonGpuContext',
- cmd=preAbandonGpuContext, abort_on_failure=False,
- env=self.m.vars.default_env)
-
- def perf_steps(self):
- """Run Skia benchmarks."""
- self.m.run.run_once(self.install)
- self.m.run.run_once(self._copy_skps)
- self.m.run.run_once(self._copy_images)
-
- if self.m.vars.upload_perf_results:
- self.m.flavor.create_clean_device_dir(
- self.m.flavor.device_dirs.perf_data_dir)
-
- # Run nanobench.
- properties = [
- '--properties',
- 'gitHash', self.m.vars.got_revision,
- 'build_number', self.m.vars.build_number,
- ]
- if self.m.vars.is_trybot:
- properties.extend([
- 'issue', self.m.vars.issue,
- 'patchset', self.m.vars.patchset,
- ])
-
- target = 'nanobench'
- if 'VisualBench' in self.m.vars.builder_name:
- target = 'visualbench'
- args = [
- target,
- '--undefok', # This helps branches that may not know new flags.
- '-i', self.m.flavor.device_dirs.resource_dir,
- '--skps', self.m.flavor.device_dirs.skp_dir,
- '--images', self.m.flavor.device_path_join(
- self.m.flavor.device_dirs.images_dir, 'nanobench'),
- ]
-
- skip_flag = None
- if self.m.vars.builder_cfg.get('cpu_or_gpu') == 'CPU':
- skip_flag = '--nogpu'
- elif self.m.vars.builder_cfg.get('cpu_or_gpu') == 'GPU':
- skip_flag = '--nocpu'
- if skip_flag:
- args.append(skip_flag)
- args.extend(self.m.vars.nanobench_flags)
-
- if self.m.vars.upload_perf_results:
- json_path = self.m.flavor.device_path_join(
- self.m.flavor.device_dirs.perf_data_dir,
- 'nanobench_%s.json' % self.m.vars.got_revision)
- args.extend(['--outResultsFile', json_path])
- args.extend(properties)
-
- keys_blacklist = ['configuration', 'role', 'is_trybot']
- args.append('--key')
- for k in sorted(self.m.vars.builder_cfg.keys()):
- if not k in keys_blacklist:
- args.extend([k, self.m.vars.builder_cfg[k]])
-
- self.m.run(self.m.flavor.step, target, cmd=args,
- abort_on_failure=False,
- env=self.m.vars.default_env)
-
- # See skia:2789.
- if ('Valgrind' in self.m.vars.builder_name and
- self.m.vars.builder_cfg.get('cpu_or_gpu') == 'GPU'):
- abandonGpuContext = list(args)
- abandonGpuContext.extend(['--abandonGpuContext', '--nocpu'])
- self.m.run(self.m.flavor.step,
- '%s --abandonGpuContext' % target,
- cmd=abandonGpuContext, abort_on_failure=False,
- env=self.m.vars.default_env)
-
- # Upload results.
- if self.m.vars.upload_perf_results:
- self.m.file.makedirs('perf_dir', self.m.vars.perf_data_dir)
- self.m.flavor.copy_directory_contents_to_host(
- self.m.flavor.device_dirs.perf_data_dir,
- self.m.vars.perf_data_dir)
-
- def cleanup_steps(self):
- """Run any cleanup steps."""
- self.m.flavor.cleanup_steps()
-
- def _KeyParams(self):
- """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(self.m.vars.builder_cfg.keys()):
- if k not in blacklist:
- flat.append(k)
- flat.append(self.m.vars.builder_cfg[k])
- return flat
« no previous file with comments | « no previous file | infra/bots/recipe_modules/flavor/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698