Extend run-benchmark script to support human-readable results conversion.
[WebKit.git] / Tools / Scripts / webkitpy / benchmark_runner / run_benchmark.py
1 #!/usr/bin/env python
2
3 import argparse
4 import json
5 import logging
6 import platform
7 import os
8
9 from benchmark_runner import BenchmarkRunner
10 from browser_driver.browser_driver_factory import BrowserDriverFactory
11
12
13 _log = logging.getLogger(__name__)
14
15
16 def parse_args():
17     parser = argparse.ArgumentParser(description='Automate the browser based performance benchmarks')
18     parser.add_argument('--output-file', dest='output', default=None)
19     parser.add_argument('--build-directory', dest='buildDir', help='Path to the browser executable. e.g. WebKitBuild/Release/')
20     parser.add_argument('--platform', dest='platform', default='osx', choices=BrowserDriverFactory.available_platforms())
21     # FIXME: Should we add chrome as an option? Well, chrome uses webkit in iOS.
22     parser.add_argument('--browser', dest='browser', default='safari', choices=BrowserDriverFactory.available_browsers())
23     parser.add_argument('--debug', action='store_true')
24     parser.add_argument('--local-copy', dest='localCopy', help='Path to a local copy of the benchmark. e.g. PerformanceTests/SunSpider/')
25     parser.add_argument('--count', dest='countOverride', type=int, help='Number of times to run the benchmark. e.g. 5')
26     parser.add_argument('--device-id', dest='device_id', default=None)
27     parser.add_argument('--no-adjust-unit', dest='scale_unit', action='store_false')
28     mutual_group = parser.add_mutually_exclusive_group(required=True)
29     mutual_group.add_argument('--read-results-json', dest='json_file', help='Specify file you want to format')
30     mutual_group.add_argument('--plan', dest='plan', help='Benchmark plan to run. e.g. speedometer, jetstream')
31
32     args = parser.parse_args()
33
34     if args.debug:
35         _log.setLevel(logging.DEBUG)
36     _log.debug('Initializing program with following parameters')
37     _log.debug('\toutput file name\t: %s' % args.output)
38     _log.debug('\tbuild directory\t: %s' % args.buildDir)
39     _log.debug('\tplan name\t: %s', args.plan)
40
41     return args
42
43
44 def start(args):
45     if args.json_file:
46         BenchmarkRunner.show_results(json.load(open(args.json_file, 'r')), args.scale_unit)
47         return
48     runner = BenchmarkRunner(args.plan, args.localCopy, args.countOverride, args.buildDir, args.output, args.platform, args.browser, args.scale_unit, args.device_id)
49     runner.execute()
50
51
52 def format_logger(logger):
53     logger.setLevel(logging.INFO)
54     ch = logging.StreamHandler()
55     formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
56     ch.setFormatter(formatter)
57     logger.addHandler(ch)
58
59
60 def main():
61     start(parse_args())