aboutsummaryrefslogtreecommitdiffhomepage
path: root/infra
diff options
context:
space:
mode:
authorGravatar borenet <borenet@google.com>2016-03-02 08:06:27 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-02 08:06:27 -0800
commitc803ef125d98429abbbe2679f4a8c6bc7bf10f85 (patch)
tree7116e06226305319a0bd714114f8a6f03cf55bf4 /infra
parent217c0b3f137d824413e806759bc25378abbe8c18 (diff)
Swarming bots: Add support for perf steps
Diffstat (limited to 'infra')
-rw-r--r--infra/bots/common.py94
-rw-r--r--infra/bots/perf_skia.isolate12
-rw-r--r--infra/bots/perf_skia.py30
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()