130b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier#!/usr/bin/env python
230b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier"""
330b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiseliercompare_bench.py - Compare two benchmarks or their results and report the
430b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier                   difference.
530b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier"""
630b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselierimport sys
730b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselierimport gbench
830b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselierfrom gbench import util, report
930b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier
1030b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselierdef main():
1130b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    # Parse the command line flags
1230b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    def usage():
1330b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier        print('compare_bench.py <test1> <test2> [benchmark options]...')
1430b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier        exit(1)
1530b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    if '--help' in sys.argv or len(sys.argv) < 3:
1630b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier        usage()
1730b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    tests = sys.argv[1:3]
1830b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    bench_opts = sys.argv[3:]
1930b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    bench_opts = list(bench_opts)
2030b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    # Run the benchmarks and report the results
2130b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    json1 = gbench.util.run_or_load_benchmark(tests[0], bench_opts)
2230b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    json2 = gbench.util.run_or_load_benchmark(tests[1], bench_opts)
2330b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    output_lines = gbench.report.generate_difference_report(json1, json2)
2430b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    print 'Comparing %s to %s' % (tests[0], tests[1])
2530b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    for ln in output_lines:
2630b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier        print(ln)
2730b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier
2830b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier
2930b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselierif __name__ == '__main__':
3030b48cb1b3a0c4fcc1887259bd215ad8738d21b4Eric Fiselier    main()
31