summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-12-10 18:51:05 -0500
committerBen Gamari <ben@smart-cactus.org>2019-12-10 18:51:05 -0500
commitbf6dc0b0cc7bd081d942cd201ae939b90e456feb (patch)
treef549d8799114b6d45f014efa5ea71597c8f5b225
parent01f74a41d0c8d5426ae12f7df8051814cb2f0717 (diff)
downloadhaskell-wip/perf-table-html.tar.gz
testsuite: Add support for producing HTML table summarizing metricswip/perf-table-html
-rw-r--r--testsuite/driver/runtests.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/testsuite/driver/runtests.py b/testsuite/driver/runtests.py
index 9eed68bc37..f7bfbec09f 100644
--- a/testsuite/driver/runtests.py
+++ b/testsuite/driver/runtests.py
@@ -334,6 +334,51 @@ def cleanup_and_exit(exitcode):
shutil.rmtree(tempdir, ignore_errors=True)
exit(exitcode)
+def html_tabulate_metrics(metrics: List[PerfMetric]) -> None:
+ cols = [
+ "test", "way",
+ "metric", "value",
+ "baseline value", "relative chg.",
+ ""
+ ]
+ s = []
+ s += ["<table>", "<tr>"]
+ s += ["<th>{}</th>".format(label) for label in cols]
+ s += ["</tr>"]
+
+ for metric in sorted(metrics, key=lambda m: (m.stat.test, m.stat.way)):
+ s += ["<tr>"]
+ vals = [
+ metric.stat.test,
+ metric.stat.way,
+ "{:.3f}".format(metric.stat.value)
+ ]
+
+ if metric.baseline is not None:
+ val0 = metric.baseline.perfStat.value
+ val1 = metric.stat.value
+ rel = 100 * (val1 - val0) / val0
+ if rel >= 5:
+ arrow = "⇑"
+ elif rel <= 5:
+ arrow = "⇓"
+ else:
+ arrow = ""
+
+ vals += [
+ "{:.3f}".format(val1),
+ "{:.1f}%".format(rel),
+ arrow
+ ]
+ else:
+ vals += [ "n/a", "n/a" ]
+
+ s += ["<td>{}</td>".format(val) for val in vals]
+ s += ["</tr>"]
+
+ s += ["</table>"]
+ return ''.join(s)
+
def tabulate_metrics(metrics: List[PerfMetric]) -> None:
for metric in sorted(metrics, key=lambda m: (m.stat.test, m.stat.way)):
print("{test:24} {metric:40} {value:15.3f}".format(