2022-08-05 12:55:59 +00:00
|
|
|
#!/usr/bin/env python3
|
2014-11-18 14:39:34 +00:00
|
|
|
# Copyright 2014 the V8 project authors. All rights reserved.
|
|
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
|
|
# found in the LICENSE file.
|
|
|
|
|
2019-02-19 08:28:26 +00:00
|
|
|
# for py2/py3 compatibility
|
|
|
|
from __future__ import print_function
|
|
|
|
|
2015-04-30 05:12:33 +00:00
|
|
|
import argparse
|
2015-09-17 13:41:31 +00:00
|
|
|
import os
|
|
|
|
import subprocess
|
2014-11-18 14:39:34 +00:00
|
|
|
import sys
|
|
|
|
|
2015-04-30 05:12:33 +00:00
|
|
|
BOTS = {
|
|
|
|
'--linux32': 'v8_linux32_perf_try',
|
|
|
|
'--linux64': 'v8_linux64_perf_try',
|
2015-07-06 12:17:15 +00:00
|
|
|
'--nexus5': 'v8_nexus5_perf_try',
|
|
|
|
'--nexus7': 'v8_nexus7_perf_try',
|
2019-01-16 11:31:33 +00:00
|
|
|
'--pixel2': 'v8_pixel2_perf_try',
|
2015-04-30 05:12:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DEFAULT_BOTS = [
|
2014-11-18 14:39:34 +00:00
|
|
|
'v8_linux32_perf_try',
|
2018-11-07 19:32:20 +00:00
|
|
|
'v8_linux64_perf_try',
|
2014-11-18 14:39:34 +00:00
|
|
|
]
|
|
|
|
|
2015-11-25 14:00:25 +00:00
|
|
|
PUBLIC_BENCHMARKS = [
|
|
|
|
'arewefastyet',
|
2019-02-18 10:25:26 +00:00
|
|
|
'ares6',
|
|
|
|
'blazor',
|
2019-01-16 11:31:33 +00:00
|
|
|
'compile',
|
2015-11-25 14:00:25 +00:00
|
|
|
'embenchen',
|
|
|
|
'emscripten',
|
|
|
|
'jetstream',
|
|
|
|
'jsbench',
|
|
|
|
'jstests',
|
|
|
|
'kraken_orig',
|
|
|
|
'massive',
|
|
|
|
'memory',
|
|
|
|
'octane',
|
2016-06-03 11:04:32 +00:00
|
|
|
'octane-noopt',
|
2015-11-25 14:00:25 +00:00
|
|
|
'octane-pr',
|
|
|
|
'octane-tf',
|
|
|
|
'octane-tf-pr',
|
|
|
|
'sunspider',
|
2016-09-22 08:17:45 +00:00
|
|
|
'unity',
|
2016-05-05 19:11:03 +00:00
|
|
|
'wasm',
|
2018-05-17 13:35:59 +00:00
|
|
|
'web-tooling-benchmark',
|
2015-11-25 14:00:25 +00:00
|
|
|
]
|
|
|
|
|
2015-09-17 13:41:31 +00:00
|
|
|
V8_BASE = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
|
|
|
|
|
2015-04-30 05:12:33 +00:00
|
|
|
def main():
|
|
|
|
parser = argparse.ArgumentParser(description='')
|
2015-09-18 08:06:14 +00:00
|
|
|
parser.add_argument('benchmarks', nargs='+', help='The benchmarks to run.')
|
|
|
|
parser.add_argument('--extra-flags', default='',
|
|
|
|
help='Extra flags to be passed to the executable.')
|
2016-02-17 12:13:07 +00:00
|
|
|
parser.add_argument('-r', '--revision', type=str, default=None,
|
|
|
|
help='Revision (use full hash!) to use for the try job; '
|
|
|
|
'default: the revision will be determined by the '
|
|
|
|
'try server; see its waterfall for more info')
|
2018-11-08 02:57:44 +00:00
|
|
|
parser.add_argument('-v', '--verbose', action='store_true',
|
|
|
|
help='Print debug information')
|
2019-06-14 10:32:00 +00:00
|
|
|
parser.add_argument('-c', '--confidence-level', type=float,
|
|
|
|
help='Repeatedly runs each benchmark until specified '
|
|
|
|
'confidence level is reached. The value is interpreted '
|
|
|
|
'as the number of standard deviations from the mean that '
|
|
|
|
'all values must lie within. Typical values are 1, 2 and '
|
|
|
|
'3 and correspond to 68%%, 95%% and 99.7%% probability '
|
|
|
|
'that the measured value is within 0.1%% of the true '
|
|
|
|
'value. Larger values result in more retries and thus '
|
|
|
|
'longer runtime, but also provide more reliable results.')
|
2015-04-30 05:12:33 +00:00
|
|
|
for option in sorted(BOTS):
|
|
|
|
parser.add_argument(
|
|
|
|
option, dest='bots', action='append_const', const=BOTS[option],
|
|
|
|
help='Add %s trybot.' % BOTS[option])
|
|
|
|
options = parser.parse_args()
|
|
|
|
if not options.bots:
|
2019-02-19 08:28:26 +00:00
|
|
|
print('No trybots specified. Using default %s.' % ','.join(DEFAULT_BOTS))
|
2015-04-30 05:12:33 +00:00
|
|
|
options.bots = DEFAULT_BOTS
|
|
|
|
|
|
|
|
if not options.benchmarks:
|
2019-02-19 08:28:26 +00:00
|
|
|
print('Please specify the benchmarks to run as arguments.')
|
2014-11-18 14:39:34 +00:00
|
|
|
return 1
|
|
|
|
|
2015-11-25 14:00:25 +00:00
|
|
|
for benchmark in options.benchmarks:
|
|
|
|
if benchmark not in PUBLIC_BENCHMARKS:
|
|
|
|
print ('%s not found in our benchmark list. The respective trybot might '
|
|
|
|
'fail, unless you run something this script isn\'t aware of. '
|
|
|
|
'Available public benchmarks: %s' % (benchmark, PUBLIC_BENCHMARKS))
|
2019-02-19 08:28:26 +00:00
|
|
|
print('Proceed anyways? [Y/n] ', end=' ')
|
2015-11-25 14:00:25 +00:00
|
|
|
answer = sys.stdin.readline().strip()
|
|
|
|
if answer != "" and answer != "Y" and answer != "y":
|
|
|
|
return 1
|
|
|
|
|
2015-09-18 08:06:14 +00:00
|
|
|
assert '"' not in options.extra_flags and '\'' not in options.extra_flags, (
|
|
|
|
'Invalid flag specification.')
|
|
|
|
|
2015-09-17 13:41:31 +00:00
|
|
|
# Ensure depot_tools are updated.
|
|
|
|
subprocess.check_output(
|
2017-05-17 06:19:36 +00:00
|
|
|
'update_depot_tools', shell=True, stderr=subprocess.STDOUT, cwd=V8_BASE)
|
2015-09-17 13:41:31 +00:00
|
|
|
|
2019-01-16 11:31:33 +00:00
|
|
|
cmd = ['git cl try', '-B', 'luci.v8-internal.try']
|
|
|
|
cmd += ['-b %s' % bot for bot in options.bots]
|
2019-06-14 10:32:00 +00:00
|
|
|
if options.revision:
|
|
|
|
cmd.append('-r %s' % options.revision)
|
2019-01-16 11:31:33 +00:00
|
|
|
benchmarks = ['"%s"' % benchmark for benchmark in options.benchmarks]
|
2019-06-14 10:32:00 +00:00
|
|
|
cmd.append('-p \'testfilter=[%s]\'' % ','.join(benchmarks))
|
2019-01-16 11:31:33 +00:00
|
|
|
if options.extra_flags:
|
2019-06-14 10:32:00 +00:00
|
|
|
cmd.append('-p \'extra_flags="%s"\'' % options.extra_flags)
|
|
|
|
if options.confidence_level:
|
|
|
|
cmd.append('-p confidence_level=%f' % options.confidence_level)
|
2019-01-16 11:31:33 +00:00
|
|
|
if options.verbose:
|
|
|
|
cmd.append('-vv')
|
2019-02-19 08:28:26 +00:00
|
|
|
print('Running %s' % ' '.join(cmd))
|
2019-01-16 11:31:33 +00:00
|
|
|
subprocess.check_call(' '.join(cmd), shell=True, cwd=V8_BASE)
|
2014-11-18 14:39:34 +00:00
|
|
|
|
2015-09-18 08:06:14 +00:00
|
|
|
if __name__ == '__main__': # pragma: no cover
|
2015-04-30 05:12:33 +00:00
|
|
|
sys.exit(main())
|