Home | History | Annotate | Download | only in tools
      1 #!/usr/bin/env python
      2 # Copyright 2014 the V8 project authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import argparse
      7 import os
      8 import subprocess
      9 import sys
     10 
     11 BOTS = {
     12   '--arm32': 'v8_arm32_perf_try',
     13   '--linux32': 'v8_linux32_perf_try',
     14   '--linux64': 'v8_linux64_perf_try',
     15   '--linux64_atom': 'v8_linux64_atom_perf_try',
     16   '--linux64_haswell': 'v8_linux64_haswell_perf_try',
     17   '--nexus5': 'v8_nexus5_perf_try',
     18   '--nexus7': 'v8_nexus7_perf_try',
     19   '--nexus9': 'v8_nexus9_perf_try',
     20   '--nexus10': 'v8_nexus10_perf_try',
     21 }
     22 
     23 DEFAULT_BOTS = [
     24   'v8_arm32_perf_try',
     25   'v8_linux32_perf_try',
     26   'v8_linux64_haswell_perf_try',
     27   'v8_nexus10_perf_try',
     28 ]
     29 
     30 PUBLIC_BENCHMARKS = [
     31   'arewefastyet',
     32   'embenchen',
     33   'emscripten',
     34   'compile',
     35   'jetstream',
     36   'jsbench',
     37   'jstests',
     38   'kraken_orig',
     39   'massive',
     40   'memory',
     41   'octane',
     42   'octane-pr',
     43   'octane-tf',
     44   'octane-tf-pr',
     45   'simdjs',
     46   'sunspider',
     47 ]
     48 
     49 V8_BASE = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
     50 
     51 def main():
     52   parser = argparse.ArgumentParser(description='')
     53   parser.add_argument('benchmarks', nargs='+', help='The benchmarks to run.')
     54   parser.add_argument('--extra-flags', default='',
     55                       help='Extra flags to be passed to the executable.')
     56   for option in sorted(BOTS):
     57     parser.add_argument(
     58         option, dest='bots', action='append_const', const=BOTS[option],
     59         help='Add %s trybot.' % BOTS[option])
     60   options = parser.parse_args()
     61   if not options.bots:
     62     print 'No trybots specified. Using default %s.' % ','.join(DEFAULT_BOTS)
     63     options.bots = DEFAULT_BOTS
     64 
     65   if not options.benchmarks:
     66     print 'Please specify the benchmarks to run as arguments.'
     67     return 1
     68 
     69   for benchmark in options.benchmarks:
     70     if benchmark not in PUBLIC_BENCHMARKS:
     71       print ('%s not found in our benchmark list. The respective trybot might '
     72             'fail, unless you run something this script isn\'t aware of. '
     73             'Available public benchmarks: %s' % (benchmark, PUBLIC_BENCHMARKS))
     74       print 'Proceed anyways? [Y/n] ',
     75       answer = sys.stdin.readline().strip()
     76       if answer != "" and answer != "Y" and answer != "y":
     77         return 1
     78 
     79   assert '"' not in options.extra_flags and '\'' not in options.extra_flags, (
     80       'Invalid flag specification.')
     81 
     82   # Ensure depot_tools are updated.
     83   subprocess.check_output(
     84       'gclient', shell=True, stderr=subprocess.STDOUT, cwd=V8_BASE)
     85 
     86   cmd = ['git cl try -m internal.client.v8']
     87   cmd += ['-b %s' % bot for bot in options.bots]
     88   benchmarks = ['"%s"' % benchmark for benchmark in options.benchmarks]
     89   cmd += ['-p \'testfilter=[%s]\'' % ','.join(benchmarks)]
     90   if options.extra_flags:
     91     cmd += ['-p \'extra_flags="%s"\'' % options.extra_flags]
     92   subprocess.check_call(' '.join(cmd), shell=True, cwd=V8_BASE)
     93 
     94 
     95 if __name__ == '__main__':  # pragma: no cover
     96   sys.exit(main())
     97