|
|
|
@ -67,6 +67,12 @@ def _args(): |
|
|
|
|
default=20, |
|
|
|
|
help='Number of times to loops the benchmarks. Must match what was passed to bm_run.py' |
|
|
|
|
) |
|
|
|
|
argp.add_argument( |
|
|
|
|
'-c', |
|
|
|
|
'--counters', |
|
|
|
|
type=bool, |
|
|
|
|
default=True, |
|
|
|
|
help='Whether or not to run and diff a counters build') |
|
|
|
|
argp.add_argument('-n', '--new', type=str, help='New benchmark name') |
|
|
|
|
argp.add_argument('-o', '--old', type=str, help='Old benchmark name') |
|
|
|
|
argp.add_argument( |
|
|
|
@ -121,7 +127,8 @@ def _read_json(filename, badjson_files, nonexistant_files): |
|
|
|
|
stripped = ".".join(filename.split(".")[:-2]) |
|
|
|
|
try: |
|
|
|
|
with open(filename) as f: |
|
|
|
|
return json.loads(f.read()) |
|
|
|
|
r = f.read(); |
|
|
|
|
return json.loads(r) |
|
|
|
|
except IOError, e: |
|
|
|
|
if stripped in nonexistant_files: |
|
|
|
|
nonexistant_files[stripped] += 1 |
|
|
|
@ -129,14 +136,17 @@ def _read_json(filename, badjson_files, nonexistant_files): |
|
|
|
|
nonexistant_files[stripped] = 1 |
|
|
|
|
return None |
|
|
|
|
except ValueError, e: |
|
|
|
|
print r |
|
|
|
|
if stripped in badjson_files: |
|
|
|
|
badjson_files[stripped] += 1 |
|
|
|
|
else: |
|
|
|
|
badjson_files[stripped] = 1 |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
def fmt_dict(d): |
|
|
|
|
return ''.join([" " + k + ": " + str(d[k]) + "\n" for k in d]) |
|
|
|
|
|
|
|
|
|
def diff(bms, loops, track, old, new): |
|
|
|
|
def diff(bms, loops, track, old, new, counters): |
|
|
|
|
benchmarks = collections.defaultdict(Benchmark) |
|
|
|
|
|
|
|
|
|
badjson_files = {} |
|
|
|
@ -148,18 +158,22 @@ def diff(bms, loops, track, old, new): |
|
|
|
|
'--benchmark_list_tests']).splitlines(): |
|
|
|
|
stripped_line = line.strip().replace("/", "_").replace( |
|
|
|
|
"<", "_").replace(">", "_").replace(", ", "_") |
|
|
|
|
js_new_ctr = _read_json('%s.%s.counters.%s.%d.json' % |
|
|
|
|
(bm, stripped_line, new, loop), |
|
|
|
|
badjson_files, nonexistant_files) |
|
|
|
|
js_new_opt = _read_json('%s.%s.opt.%s.%d.json' % |
|
|
|
|
(bm, stripped_line, new, loop), |
|
|
|
|
badjson_files, nonexistant_files) |
|
|
|
|
js_old_ctr = _read_json('%s.%s.counters.%s.%d.json' % |
|
|
|
|
(bm, stripped_line, old, loop), |
|
|
|
|
badjson_files, nonexistant_files) |
|
|
|
|
js_old_opt = _read_json('%s.%s.opt.%s.%d.json' % |
|
|
|
|
(bm, stripped_line, old, loop), |
|
|
|
|
badjson_files, nonexistant_files) |
|
|
|
|
if counters: |
|
|
|
|
js_new_ctr = _read_json('%s.%s.counters.%s.%d.json' % |
|
|
|
|
(bm, stripped_line, new, loop), |
|
|
|
|
badjson_files, nonexistant_files) |
|
|
|
|
js_old_ctr = _read_json('%s.%s.counters.%s.%d.json' % |
|
|
|
|
(bm, stripped_line, old, loop), |
|
|
|
|
badjson_files, nonexistant_files) |
|
|
|
|
else: |
|
|
|
|
js_new_ctr = None |
|
|
|
|
js_old_ctr = None |
|
|
|
|
|
|
|
|
|
if js_new_ctr: |
|
|
|
|
for row in bm_json.expand_json(js_new_ctr, js_new_opt): |
|
|
|
@ -187,12 +201,12 @@ def diff(bms, loops, track, old, new): |
|
|
|
|
rows.append([name] + benchmarks[name].row(fields)) |
|
|
|
|
note = None |
|
|
|
|
if len(badjson_files): |
|
|
|
|
note = 'Corrupt JSON data (indicates timeout or crash) = %s' % str(badjson_files) |
|
|
|
|
note = 'Corrupt JSON data (indicates timeout or crash): \n%s' % fmt_dict(badjson_files) |
|
|
|
|
if len(nonexistant_files): |
|
|
|
|
if note: |
|
|
|
|
note += '\n\nMissing files (indicates new benchmark) = %s' % str(nonexistant_files) |
|
|
|
|
note += '\n\nMissing files (indicates new benchmark): \n%s' % fmt_dict(nonexistant_files) |
|
|
|
|
else: |
|
|
|
|
note = '\n\nMissing files (indicates new benchmark) = %s' % str(nonexistant_files) |
|
|
|
|
note = '\n\nMissing files (indicates new benchmark): \n%s' % fmt_dict(nonexistant_files) |
|
|
|
|
if rows: |
|
|
|
|
return tabulate.tabulate(rows, headers=headers, floatfmt='+.2f'), note |
|
|
|
|
else: |
|
|
|
@ -202,5 +216,5 @@ def diff(bms, loops, track, old, new): |
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
args = _args() |
|
|
|
|
diff, note = diff(args.benchmarks, args.loops, args.track, args.old, |
|
|
|
|
args.new) |
|
|
|
|
args.new, args.counters) |
|
|
|
|
print('%s\n%s' % (note, diff if diff else "No performance differences")) |
|
|
|
|