skia2/bin/compare
cdalton 2c56ba5cde Don't suppress nanobench output table in verbose mode
Changes verbose mode to print both the table and the individual sample
values. No need to hold back information in verbose mode.

BUG=skia:

Review URL: https://codereview.chromium.org/1208763003
2015-06-26 13:32:53 -07:00

43 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python
import sys
from scipy.stats import mannwhitneyu
SIGNIFICANCE_THRESHOLD = 0.0001
a,b = {},{}
for (path, d) in [(sys.argv[1], a), (sys.argv[2], b)]:
for line in open(path):
try:
tokens = line.split()
if tokens[0] != "Samples:":
continue
samples = tokens[1:-1]
label = tokens[-1]
d[label] = map(float, samples)
except:
pass
common = set(a.keys()).intersection(b.keys())
ps = []
for key in common:
_, p = mannwhitneyu(a[key], b[key]) # Non-parametric t-test. Doesn't assume normal dist.
am, bm = min(a[key]), min(b[key])
ps.append((bm/am, p, key, am, bm))
ps.sort(reverse=True)
def humanize(ns):
for threshold, suffix in [(1e9, 's'), (1e6, 'ms'), (1e3, 'us'), (1e0, 'ns')]:
if ns > threshold:
return "%.3g%s" % (ns/threshold, suffix)
maxlen = max(map(len, common))
# We print only signficant changes in benchmark timing distribution.
bonferroni = SIGNIFICANCE_THRESHOLD / len(ps) # Adjust for the fact we've run multiple tests.
for ratio, p, key, am, bm in ps:
if p < bonferroni:
str_ratio = ('%.2gx' if ratio < 1 else '%.3gx') % ratio
print '%*s\t%6s -> %6s\t%s' % (maxlen, key, humanize(am), humanize(bm), str_ratio)