diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-11-21 16:55:18 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-11-21 16:55:19 +0900 |
commit | 873ba3ec5c36fe51e9aeadaac126a04d965fc053 (patch) | |
tree | 9624dd07f5e55939549e86add68cda90119f8af4 /benchlog | |
parent | abbaebf6f92b878517d8061fae50a8b9ca84ca52 (diff) | |
download | re2-873ba3ec5c36fe51e9aeadaac126a04d965fc053.tar.gz re2-873ba3ec5c36fe51e9aeadaac126a04d965fc053.tar.bz2 re2-873ba3ec5c36fe51e9aeadaac126a04d965fc053.zip |
Imported Upstream version 20150801upstream/20150801
Change-Id: If6ba79b7356ae34e4008c43850b4390163058f2f
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'benchlog')
-rwxr-xr-x | benchlog/benchplot.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/benchlog/benchplot.py b/benchlog/benchplot.py new file mode 100755 index 0000000..104abe8 --- /dev/null +++ b/benchlog/benchplot.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python + +import argparse # for ArgumentParser +import subprocess # for Popen +import tempfile # for NamedTemporaryFile +import os # for remove + +class gnuplot(object): + + output = "result.png" + + script = """ + set terminal png size 1024, 768 + set output "{}.png" + set title "re2 benchlog" + set datafile separator ";" + set grid x y + set ylabel "MB/s" + set autoscale + plot """ + + template = """'{}' using 1:5:xticlabels(2) with linespoints linewidth 3 title "{}",\\\n""" + + benchdata = dict() + tempfiles = [] + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """ + remove all temporary files + """ + + for filename in self.tempfiles: + os.remove(filename) + + def parse_re2_benchlog(self, filename): + """ + parse the input benchlog and return a dictionary contain bench data + """ + + benchdata = self.benchdata + + with open(filename) as f: + + for raw in f.readlines(): + + data = raw.split('\t') + + if len(data) == 4: + + data = data[0].split('/') + data[1:] + data = list(map(str.strip, data)) + + if not benchdata.get(data[0]): + benchdata[data[0]] = [ data[1:] ] + else: + benchdata[data[0]].append(data[1:]) + + def gen_csv(self): + """ + generate temporary csv files + """ + + for name, data in self.benchdata.items(): + + with tempfile.NamedTemporaryFile(delete=False) as f: + + for index, line in enumerate(data): + f.write('{};{}\n'.format(index, ';'.join(line)).encode()) + + self.tempfiles.append(f.name) + self.script = self.script + self.template.format(f.name, name) + + def run(self): + self.gen_csv() + script = self.script[:-3].format(self.output) + command = subprocess.Popen(['gnuplot'], stdin=subprocess.PIPE) + command.communicate(script.encode()) + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='generate plots for benchlog') + parser.add_argument('benchlog', type=str, help='benchlog generated by re2') + args = parser.parse_args() + + try: + subprocess.Popen(['gnuplot'], stdin=subprocess.PIPE) + except FileNotFoundError: + print('you can install "gnuplot" to generate plots automatically') + exit(1) + + with gnuplot() as plot: + plot.output = args.benchlog + plot.parse_re2_benchlog(args.benchlog) + plot.run() |