diff options
author | Kevin Lubick <kjlubick@google.com> | 2016-11-10 14:19:00 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-11-10 20:00:56 +0000 |
commit | 9c2249f51c861f3d0db089fbba38b8ac1d63d160 (patch) | |
tree | 5a828c25ad3e8a557afb47ecc8ac507fe56fdc1d | |
parent | 399bbd96ac1b68caf91635e2eb4fdbbb30baef3c (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-x | tools/skpbench/sheet.py (renamed from tools/skpbench/parseskpbench.py) | 18 | ||||
-rwxr-xr-x | tools/skpbench/skiaperf.py | 71 | ||||
-rwxr-xr-x | tools/skpbench/skpbench.py | 36 |
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: |