aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Kevin Lubick <kjlubick@google.com>2016-11-10 14:19:00 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-10 20:00:56 +0000
commit9c2249f51c861f3d0db089fbba38b8ac1d63d160 (patch)
tree5a828c25ad3e8a557afb47ecc8ac507fe56fdc1d
parent399bbd96ac1b68caf91635e2eb4fdbbb30baef3c (diff)
skpbench: add utility to format results for Skia Perf
Adds skiaperf.py for formatting skpbench.py outputs for Skia Perf. Also renames parseskpbench.py to sheet.py. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4657 Change-Id: I758678e1c589b15ec2d07c43e4921663e919b47b Reviewed-on: https://skia-review.googlesource.com/4657 Commit-Queue: Kevin Lubick <kjlubick@google.com> Reviewed-by: Kevin Lubick <kjlubick@google.com>
-rwxr-xr-xtools/skpbench/sheet.py (renamed from tools/skpbench/parseskpbench.py)18
-rwxr-xr-xtools/skpbench/skiaperf.py71
-rwxr-xr-xtools/skpbench/skpbench.py36
3 files changed, 98 insertions, 27 deletions
diff --git a/tools/skpbench/parseskpbench.py b/tools/skpbench/sheet.py
index 800c1ca124..d7cf1e2fca 100755
--- a/tools/skpbench/parseskpbench.py
+++ b/tools/skpbench/sheet.py
@@ -20,7 +20,7 @@ import webbrowser
__argparse = ArgumentParser(description="""
-Parses output files from skpbench.py into csv.
+Formats skpbench.py outputs as csv.
This script can also be used to generate a Google sheet:
@@ -34,18 +34,18 @@ This script can also be used to generate a Google sheet:
""")
__argparse.add_argument('-r', '--result',
- choices=['accum', 'median', 'max', 'min'], default='accum',
- help="result to use for cell values")
+ choices=['accum', 'median', 'max', 'min'], default='accum',
+ help="result to use for cell values")
__argparse.add_argument('-f', '--force',
- action='store_true', help='silently ignore warnings')
+ action='store_true', help='silently ignore warnings')
__argparse.add_argument('-o', '--open',
- action='store_true',
- help="generate a temp file and open it (theoretically in a web browser)")
+ action='store_true',
+ help="generate a temp file and open it (theoretically in a web browser)")
__argparse.add_argument('-n', '--name',
- default='skpbench_%s' % datetime.now().strftime('%Y-%m-%d_%H.%M.%S.csv'),
- help="if using --open, a name for the temp file")
+ default='skpbench_%s' % datetime.now().strftime('%Y-%m-%d_%H.%M.%S.csv'),
+ help="if using --open, a name for the temp file")
__argparse.add_argument('sources',
- nargs='+', help="source files with skpbench results ('-' for stdin)")
+ nargs='+', help="source files that contain skpbench results ('-' for stdin)")
FLAGS = __argparse.parse_args()
diff --git a/tools/skpbench/skiaperf.py b/tools/skpbench/skiaperf.py
new file mode 100755
index 0000000000..cfbd49d6c1
--- /dev/null
+++ b/tools/skpbench/skiaperf.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+
+# Copyright 2016 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from __future__ import print_function
+from _benchresult import BenchResult
+from argparse import ArgumentTypeError, ArgumentParser
+from collections import defaultdict
+import json
+import sys
+
+__argparse = ArgumentParser(description="""
+
+Formats skpbench.py outputs for Skia Perf.
+
+""")
+
+__argparse.add_argument('sources',
+ nargs='+', help="source files that contain skpbench results")
+__argparse.add_argument('--properties',
+ nargs='*', default=list(),
+ help="space-separated key/value pairs identifying the run")
+__argparse.add_argument('--key',
+ nargs='*', default=list(),
+ help="space-separated key/value pairs identifying the builder")
+__argparse.add_argument('-o', '--outfile',
+ default='-', help="output file ('-' for stdout)")
+
+FLAGS = __argparse.parse_args()
+
+def parse_key_value_pairs(args):
+ if not args:
+ return dict()
+ if len(args) % 2:
+ raise ArgumentTypeError("uneven number of key/value arguments.")
+ return {k:v for k,v in zip(args[::2], args[1::2])}
+
+def skiaperf_result(benchresult):
+ result = {x:benchresult.get_string(x) for x in ('accum', 'median')}
+ result['options'] = {x:benchresult.get_string(x)
+ for x in ('clock', 'metric', 'sample_ms')}
+ return result
+
+def emit_as_json(data, outfile):
+ json.dump(data, outfile, indent=4, separators=(',', ' : '), sort_keys=True)
+ print('', file=outfile)
+
+def main():
+ data = parse_key_value_pairs(
+ FLAGS.properties + [
+ 'key', parse_key_value_pairs(FLAGS.key),
+ 'results', defaultdict(dict)])
+
+ for src in FLAGS.sources:
+ with open(src, mode='r') as infile:
+ for line in infile:
+ match = BenchResult.match(line)
+ if match:
+ data['results'][match.bench][match.config] = skiaperf_result(match)
+
+ if FLAGS.outfile != '-':
+ with open(FLAGS.outfile, 'w+') as outfile:
+ emit_as_json(data, outfile)
+ else:
+ emit_as_json(data, sys.stdout)
+
+if __name__ == '__main__':
+ main()
diff --git a/tools/skpbench/skpbench.py b/tools/skpbench/skpbench.py
index a21312365f..7cc0a231e9 100755
--- a/tools/skpbench/skpbench.py
+++ b/tools/skpbench/skpbench.py
@@ -30,37 +30,37 @@ unacceptable stddev.
""")
__argparse.add_argument('skpbench',
- help="path to the skpbench binary")
+ help="path to the skpbench binary")
__argparse.add_argument('--adb',
- action='store_true', help="execute skpbench over adb")
+ action='store_true', help="execute skpbench over adb")
__argparse.add_argument('-s', '--device-serial',
- help="if using adb, ID of the specific device to target "
- "(only required if more than 1 device is attached)")
+ help="if using adb, ID of the specific device to target "
+ "(only required if more than 1 device is attached)")
__argparse.add_argument('-m', '--max-stddev',
- type=float, default=4,
- help="initial max allowable relative standard deviation")
+ type=float, default=4,
+ help="initial max allowable relative standard deviation")
__argparse.add_argument('-x', '--suffix',
- help="suffix to append on config (e.g. '_before', '_after')")
+ help="suffix to append on config (e.g. '_before', '_after')")
__argparse.add_argument('-w','--write-path',
- help="directory to save .png proofs to disk.")
+ help="directory to save .png proofs to disk.")
__argparse.add_argument('-v','--verbosity',
- type=int, default=1, help="level of verbosity (0=none to 5=debug)")
+ type=int, default=1, help="level of verbosity (0=none to 5=debug)")
__argparse.add_argument('-d', '--duration',
- type=int, help="number of milliseconds to run each benchmark")
+ type=int, help="number of milliseconds to run each benchmark")
__argparse.add_argument('-l', '--sample-ms',
- type=int, help="duration of a sample (minimum)")
+ type=int, help="duration of a sample (minimum)")
__argparse.add_argument('--gpu',
- action='store_true',
- help="perform timing on the gpu clock instead of cpu (gpu work only)")
+ action='store_true',
+ help="perform timing on the gpu clock instead of cpu (gpu work only)")
__argparse.add_argument('--fps',
- action='store_true', help="use fps instead of ms")
+ action='store_true', help="use fps instead of ms")
__argparse.add_argument('-c', '--config',
- default='gpu', help="comma- or space-separated list of GPU configs")
+ default='gpu', help="comma- or space-separated list of GPU configs")
__argparse.add_argument('-a', '--resultsfile',
- help="optional file to append results into")
+ help="optional file to append results into")
__argparse.add_argument('skps',
- nargs='+',
- help=".skp files or directories to expand for .skp files")
+ nargs='+',
+ help=".skp files or directories to expand for .skp files")
FLAGS = __argparse.parse_args()
if FLAGS.adb: