summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorEli Bendersky <eliben@google.com>2019-08-23 12:55:32 -0700
committerEli Bendersky <eliben@google.com>2019-08-23 12:55:32 -0700
commitc2e34dc6b6ca06705b2c7862486dff151f9f03ea (patch)
tree4bd5fd342494092e45afa029ad2e60c7aa103380 /utils
parent97a3a90208cb0ec9dbf8006d520ac15250918809 (diff)
downloadpycparser-c2e34dc6b6ca06705b2c7862486dff151f9f03ea.tar.gz
Enhance measurement script
Diffstat (limited to 'utils')
-rw-r--r--utils/internal/benchmark-parse.py35
1 files changed, 28 insertions, 7 deletions
diff --git a/utils/internal/benchmark-parse.py b/utils/internal/benchmark-parse.py
index 1760f55..e165e8c 100644
--- a/utils/internal/benchmark-parse.py
+++ b/utils/internal/benchmark-parse.py
@@ -1,15 +1,36 @@
-from __future__ import print_function
+import os
+import statistics
import sys
import time
sys.path.extend(['.', '..'])
-from pycparser import c_parser, c_ast, parse_file
+from pycparser import c_parser, c_ast
+
+
+def measure_parse(text, n, progress_cb):
+ times = []
+ for i in range(n):
+ parser = c_parser.CParser()
+ t1 = time.time()
+ ast = parser.parse(text, '')
+ elapsed = time.time() - t1
+ assert isinstance(ast, c_ast.FileAST)
+ times.append(elapsed)
+ progress_cb(i)
+ return times
+
+
+def measure_file(filename, n):
+ progress_cb = lambda i: print('.', sep='', end='', flush=True)
+ with open(filename) as f:
+ print('%-20s' % os.path.basename(filename), end='', flush=True)
+ text = f.read()
+ times = measure_parse(text, n, progress_cb)
+ print(' Mean: %.3f Stddev: %.3f' % (statistics.mean(times),
+ statistics.stdev(times)))
if __name__ == '__main__':
- filename = sys.argv[1]
- t1 = time.time()
- ast = parse_file(filename)
- print('Elapsed: %.4f' % (time.time() - t1))
- assert ast is not None
+ for i in range(1, len(sys.argv)):
+ measure_file(sys.argv[i], 5)