From bf6dc0b0cc7bd081d942cd201ae939b90e456feb Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Tue, 10 Dec 2019 18:51:05 -0500 Subject: testsuite: Add support for producing HTML table summarizing metrics --- testsuite/driver/runtests.py | 45 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) 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 += ["", ""] + s += ["".format(label) for label in cols] + s += [""] + + for metric in sorted(metrics, key=lambda m: (m.stat.test, m.stat.way)): + s += [""] + 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 += ["".format(val) for val in vals] + s += [""] + + s += ["
{}
{}
"] + 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( -- cgit v1.2.1