public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc/maskray/unnest] benchtests: Fix validate_benchout.py exceptions
@ 2021-09-23  6:37 Fangrui Song
  0 siblings, 0 replies; only message in thread
From: Fangrui Song @ 2021-09-23  6:37 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=cb5088cfd3030cfe7ea875846d9a8623dcddbf4f

commit cb5088cfd3030cfe7ea875846d9a8623dcddbf4f
Author: Naohiro Tamura <naohirot@fujitsu.com>
Date:   Thu Sep 16 09:19:55 2021 +0530

    benchtests: Fix validate_benchout.py exceptions
    
    This patch fixed validate_benchout.py two exceptions,
    1) AttributeError
       if benchout_strings.schema.json is specified, and
    2) json.decoder.JSONDecodeError
       if benchout file is not JSON.
    
    $ ~/glibc/benchtests/scripts/validate_benchout.py bench-memset.out \
    ~/glibc/benchtests/scripts/benchout_strings.schema.json
    Traceback (most recent call last):
      File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 86, in <module>
        sys.exit(main(sys.argv[1:]))
      File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 69, in main
        bench.parse_bench(args[0], args[1])
      File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 139, in parse_bench
        do_for_all_timings(bench, lambda b, f, v:
      File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 107, in do_for_all_timings
        if 'timings' not in bench['functions'][func][k].keys():
    AttributeError: 'str' object has no attribute 'keys'
    
    $ ~/glibc/benchtests/scripts/validate_benchout.py bench-math-inlines.out \
    ~/glibc/benchtests/scripts/benchout_strings.schema.json
    Traceback (most recent call last):
      File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 86, in <module>
        sys.exit(main(sys.argv[1:]))
      File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 69, in main
        bench.parse_bench(args[0], args[1])
      File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 137, in parse_bench
        bench = json.load(benchfile)
      File "/usr/lib/python3.6/json/__init__.py", line 299, in load
        parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
      File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
        return _default_decoder.decode(s)
      File "/usr/lib/python3.6/json/decoder.py", line 342, in decode
        raise JSONDecodeError("Extra data", s, end)
    json.decoder.JSONDecodeError: Extra data: line 1 column 17 (char 16)
    
    Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

Diff:
---
 benchtests/scripts/compare_bench.py     | 4 ++++
 benchtests/scripts/import_bench.py      | 2 --
 benchtests/scripts/validate_benchout.py | 6 +++++-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/benchtests/scripts/compare_bench.py b/benchtests/scripts/compare_bench.py
index 6fcbd08038..1a497f8bb6 100755
--- a/benchtests/scripts/compare_bench.py
+++ b/benchtests/scripts/compare_bench.py
@@ -163,7 +163,11 @@ def plot_graphs(bench1, bench2):
 
 def main(bench1, bench2, schema, threshold, stats):
     bench1 = bench.parse_bench(bench1, schema)
+    bench.do_for_all_timings(bench1, lambda b, f, v:
+        b['functions'][f][v]['timings'].sort())
     bench2 = bench.parse_bench(bench2, schema)
+    bench.do_for_all_timings(bench2, lambda b, f, v:
+        b['functions'][f][v]['timings'].sort())
 
     plot_graphs(bench1, bench2)
 
diff --git a/benchtests/scripts/import_bench.py b/benchtests/scripts/import_bench.py
index a799b4e1b7..362c990fe1 100644
--- a/benchtests/scripts/import_bench.py
+++ b/benchtests/scripts/import_bench.py
@@ -136,6 +136,4 @@ def parse_bench(filename, schema_filename):
         with open(filename, 'r') as benchfile:
             bench = json.load(benchfile)
             validator.validate(bench, schema)
-            do_for_all_timings(bench, lambda b, f, v:
-                    b['functions'][f][v]['timings'].sort())
             return bench
diff --git a/benchtests/scripts/validate_benchout.py b/benchtests/scripts/validate_benchout.py
index 47df33ed02..00d5fa0ee5 100755
--- a/benchtests/scripts/validate_benchout.py
+++ b/benchtests/scripts/validate_benchout.py
@@ -73,11 +73,15 @@ def main(args):
 
     except bench.validator.ValidationError as e:
         return print_and_exit("Invalid benchmark output: %s" % e.message,
-            os.EX_DATAERR)
+                os.EX_DATAERR)
 
     except bench.validator.SchemaError as e:
         return print_and_exit("Invalid schema: %s" % e.message, os.EX_DATAERR)
 
+    except json.decoder.JSONDecodeError as e:
+        return print_and_exit("Benchmark output in %s is not JSON." % args[0],
+                os.EX_DATAERR)
+
     print("Benchmark output in %s is valid." % args[0])
     return os.EX_OK


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-09-23  6:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-23  6:37 [glibc/maskray/unnest] benchtests: Fix validate_benchout.py exceptions Fangrui Song

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).