summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Peres <martin.peres@linux.intel.com>2016-01-25 20:24:22 +0200
committerMartin Peres <martin.peres@linux.intel.com>2016-01-27 19:35:18 +0200
commitd7e4b480d7b76b4eb4dcfe5a6be6611dfcd3fcd4 (patch)
tree1fff80020704dd84f3ffdc4d5eb95f9493416561
parent561e01819b8b137b98fd618d8535fd5e3ea90dc2 (diff)
report: introduce EventPerfChange
-rw-r--r--utils/ezbench.py39
1 files changed, 38 insertions, 1 deletions
diff --git a/utils/ezbench.py b/utils/ezbench.py
index 3afb6e3..f76ff59 100644
--- a/utils/ezbench.py
+++ b/utils/ezbench.py
@@ -920,6 +920,25 @@ class EventBuildFixed:
main = main.format(self.fixed_commit_range, self.broken_commit_range)
return "{} ({})".format(main, parenthesis)
+class EventPerfChange:
+ def __init__(self, benchmark, commit_range, old_perf, new_perf):
+ self.benchmark = benchmark
+ self.commit_range = commit_range
+ self.old_perf = old_perf
+ self.new_perf = new_perf
+
+ def diff(self):
+ if self.old_perf != 0:
+ return (1 - (self.new_perf / self.old_perf)) * -1
+ elif self.new_perf == 0 and self.old_perf == 0:
+ return 0
+ else:
+ return float("inf")
+
+ def __str__(self):
+ msg = "{} changed the performance of {} from {:.2f} to {:.2f} ({:+.2f}%)"
+ return msg.format(self.commit_range, self.benchmark.full_name,
+ self.old_perf, self.new_perf, self.diff() * 100)
class Report:
def __init__(self, benchmarks, commits, notes):
@@ -928,7 +947,7 @@ class Report:
self.notes = notes
self.events = list()
- def enhance_report(self, commits_rev_order):
+ def enhance_report(self, commits_rev_order, perf_change_threshold = 0.05):
if len(commits_rev_order) == 0:
return
@@ -949,6 +968,7 @@ class Report:
# Generate events
commit_prev = None
+ bench_prev = dict()
build_broken_since = None
for commit in self.commits:
commit_range = EventCommitRange(commit_prev, commit)
@@ -961,6 +981,23 @@ class Report:
self.events.append(EventBuildFixed(build_broken_since, commit_range))
build_broken_since = None
+ # Look for performance regressions
+ for result in commit.results:
+ perf = sum(result.data) / len(result.data)
+ bench = result.benchmark.full_name
+ bench_unit = result.benchmark.unit_str
+ if bench in bench_prev:
+ # We got previous perf results, compare!
+ old_commit = bench_prev[bench][0]
+ old_perf = bench_prev[bench][1]
+ thrs = perf_change_threshold * old_perf
+
+ if thrs > 0 and abs(perf - old_perf) >= thrs:
+ self.events.append(EventPerfChange(result.benchmark,
+ commit_range,
+ old_perf, perf))
+ bench_prev[bench] = (commit.sha1, perf)
+
commit_prev = commit
def readCsv(filepath):