From 5abb0a952b1ab72f2de0c1a6acc54f8fae39d8e4 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Wed, 7 Sep 2016 18:06:25 +0200
Subject: [PATCH] Add a script that makes performance comparisons with pandas

---
 bin/CMakeLists.txt            |  4 ++-
 bin/performance_regression.py | 55 +++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)
 create mode 100755 bin/performance_regression.py

diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt
index 847e8935..c1aaf2f5 100644
--- a/bin/CMakeLists.txt
+++ b/bin/CMakeLists.txt
@@ -1 +1,3 @@
-dune_symlink_to_source_files(FILES make_graph.sh)
+dune_symlink_to_source_files(FILES make_graph.sh
+                                   performance_regression.py
+                             )
diff --git a/bin/performance_regression.py b/bin/performance_regression.py
new file mode 100755
index 00000000..7ef368a4
--- /dev/null
+++ b/bin/performance_regression.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+
+import pandas
+import subprocess
+import sys
+
+class color:
+    GREEN = '\033[92m'
+    RED = '\033[91m'
+    ENDC = '\033[0m'
+
+
+def parse_data():
+    frame = pandas.read_csv('timings.csv', header=None, names=('exec', 'kernel', 'time'), delimiter=' ')
+    data = frame.groupby(('exec', 'kernel'))['time'].min()
+
+    return data
+
+
+def run():
+    subprocess.call("make -j2 build_tests".split())
+    subprocess.call("rm timings.csv".split())
+    for i in range(10):
+        subprocess.call("ctest".split())
+
+
+def regression_summary():
+    # Get timings
+    run()
+    data1 = parse_data()
+
+    # Switch to reference data
+    subprocess.call(sys.argv[1:])
+
+    # Get reference timings
+    run()
+    data2 = parse_data()
+
+    for key in data1.keys():
+        exe, kernel = key
+        diff = data1[exe][kernel] - data2[exe][kernel]
+        rel = abs(diff / data2[exe][kernel])
+        s = exe + '/' + kernel + ': ' + str(rel)
+        c = ''
+        if rel > 0.02:
+            if diff > 0.:
+                c = color.RED
+            else:
+                c = color.GREEN
+
+        print(c + s + color.ENDC)
+
+
+if __name__ == '__main__':
+    regression_summary()
-- 
GitLab