diff options
author | borenet <borenet@google.com> | 2016-03-02 08:06:27 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-02 08:06:27 -0800 |
commit | c803ef125d98429abbbe2679f4a8c6bc7bf10f85 (patch) | |
tree | 7116e06226305319a0bd714114f8a6f03cf55bf4 /infra | |
parent | 217c0b3f137d824413e806759bc25378abbe8c18 (diff) |
Swarming bots: Add support for perf steps
NOTRY=true
BUG=skia:4763
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1754843002
Review URL: https://codereview.chromium.org/1754843002
Diffstat (limited to 'infra')
-rw-r--r-- | infra/bots/common.py | 94 | ||||
-rw-r--r-- | infra/bots/perf_skia.isolate | 12 | ||||
-rw-r--r-- | infra/bots/perf_skia.py | 30 |
3 files changed, 132 insertions, 4 deletions
diff --git a/infra/bots/common.py b/infra/bots/common.py index b38777767c..b532d5db55 100644 --- a/infra/bots/common.py +++ b/infra/bots/common.py @@ -276,7 +276,8 @@ class BotInfo(object): flat.append(self.bot_cfg[k]) return flat - def test_steps(self, got_revision, master_name, slave_name, build_number): + def test_steps(self, got_revision, master_name, slave_name, build_number, + issue=None, patchset=None): """Run the DM test.""" self.build_number = build_number self.got_revision = got_revision @@ -319,9 +320,13 @@ class BotInfo(object): 'build_number', self.build_number, ] if self.is_trybot: + if not issue: + raise Exception('issue is required for trybots.') + if not patchset: + raise Exception('patchset is required for trybots.') properties.extend([ - 'issue', self.m.properties['issue'], - 'patchset', self.m.properties['patchset'], + 'issue', issue, + 'patchset', patchset, ]) args = [ @@ -361,10 +366,91 @@ class BotInfo(object): # See skia:2789. if ('Valgrind' in self.name and - self.builder_cfg.get('cpu_or_gpu') == 'GPU'): + self.bot_cfg.get('cpu_or_gpu') == 'GPU'): abandonGpuContext = list(args) abandonGpuContext.append('--abandonGpuContext') self.flavor.run(abandonGpuContext) preAbandonGpuContext = list(args) preAbandonGpuContext.append('--preAbandonGpuContext') self.flavor.run(preAbandonGpuContext) + + self.flavor.cleanup_steps() + + def perf_steps(self, got_revision, master_name, slave_name, build_number, + issue=None, patchset=None): + """Run Skia benchmarks.""" + self.build_number = build_number + self.got_revision = got_revision + self.master_name = master_name + self.slave_name = slave_name + self._run_once(self.install) + if self.upload_perf_results: + self.flavor.create_clean_device_dir(self.device_dirs.perf_data_dir) + + # Run nanobench. + properties = [ + '--properties', + 'gitHash', self.got_revision, + 'build_number', self.build_number, + ] + if self.is_trybot: + if not issue: + raise Exception('issue is required for trybots.') + if not patchset: + raise Exception('patchset is required for trybots.') + properties.extend([ + 'issue', issue, + 'patchset', patchset, + ]) + + target = 'nanobench' + if 'VisualBench' in self.name: + target = 'visualbench' + args = [ + target, + '--undefok', # This helps branches that may not know new flags. + '-i', self.device_dirs.resource_dir, + '--skps', self.device_dirs.skp_dir, + '--images', self.flavor.device_path_join( + self.device_dirs.images_dir, 'dm'), # Using DM images for now. + ] + + skip_flag = None + if self.bot_cfg.get('cpu_or_gpu') == 'CPU': + skip_flag = '--nogpu' + elif self.bot_cfg.get('cpu_or_gpu') == 'GPU': + skip_flag = '--nocpu' + if skip_flag: + args.append(skip_flag) + args.extend(self.nanobench_flags) + + if self.upload_perf_results: + json_path = self.flavor.device_path_join( + self.device_dirs.perf_data_dir, + 'nanobench_%s.json' % self.got_revision) + args.extend(['--outResultsFile', json_path]) + args.extend(properties) + + keys_blacklist = ['configuration', 'role', 'is_trybot'] + args.append('--key') + for k in sorted(self.bot_cfg.keys()): + if not k in keys_blacklist: + args.extend([k, self.bot_cfg[k]]) + + self.flavor.run(args, env=self.default_env) + + # See skia:2789. + if ('Valgrind' in self.name and + self.bot_cfg.get('cpu_or_gpu') == 'GPU'): + abandonGpuContext = list(args) + abandonGpuContext.extend(['--abandonGpuContext', '--nocpu']) + self.flavor.run(abandonGpuContext, env=self.default_env) + + # Copy results to host. + if self.upload_perf_results: + if not os.path.exists(self.perf_data_dir): + os.makedirs(self.perf_data_dir) + self.flavor.copy_directory_contents_to_host( + self.device_dirs.perf_data_dir, self.perf_data_dir) + + self.flavor.cleanup_steps() diff --git a/infra/bots/perf_skia.isolate b/infra/bots/perf_skia.isolate new file mode 100644 index 0000000000..420a0d0db8 --- /dev/null +++ b/infra/bots/perf_skia.isolate @@ -0,0 +1,12 @@ +{ + 'includes': [ + 'images.isolate', + 'skia_repo.isolate', + 'skps.isolate', + ], + 'variables': { + 'command': [ + 'python', 'perf_skia.py', '--master_name', '<(MASTER_NAME)', '--builder_name', '<(BUILDER_NAME)', '--build_number', '<(BUILD_NUMBER)', '--slave_name', '<(SLAVE_NAME)', '--revision', '<(REVISION)', '--swarm_out_dir', '${ISOLATED_OUTDIR}', + ], + }, +} diff --git a/infra/bots/perf_skia.py b/infra/bots/perf_skia.py new file mode 100644 index 0000000000..0e32feecca --- /dev/null +++ b/infra/bots/perf_skia.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +# +# Copyright 2016 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import argparse +import common +import os +import sys + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--master_name', required=True) + parser.add_argument('--builder_name', required=True) + parser.add_argument('--build_number', required=True) + parser.add_argument('--slave_name', required=True) + parser.add_argument('--revision', required=True) + parser.add_argument('--swarm_out_dir', required=True) + args = parser.parse_args() + bot = common.BotInfo(args.builder_name, os.path.abspath(args.swarm_out_dir)) + bot.perf_steps(args.revision, args.master_name, args.slave_name, + args.build_number) + + +if __name__ == '__main__': + main() |