Title: [244469] trunk/Tools
Revision
244469
Author
[email protected]
Date
2019-04-19 14:35:08 -0700 (Fri, 19 Apr 2019)

Log Message

Add script to merge run_benchmark jsons
https://bugs.webkit.org/show_bug.cgi?id=197107

Reviewed by Michael Saboff.

The script basically recursively decends through all json objects until it gets
to an array or JSON primitive and concats or takes the first value, respectively.

This patch also adds +x bits to the compare-results script so it
can be run directly from the command line. I had to add a new line so that svn
will accept the change... yay svn!

* Scripts/compare-results:
* Scripts/merge-result-jsons: Added.
(readJSONFile):
(deepAppend):
(mergeJSONs):
(main):

Modified Paths

Added Paths

Property Changed

Diff

Modified: trunk/Tools/ChangeLog (244468 => 244469)


--- trunk/Tools/ChangeLog	2019-04-19 21:23:05 UTC (rev 244468)
+++ trunk/Tools/ChangeLog	2019-04-19 21:35:08 UTC (rev 244469)
@@ -1,3 +1,24 @@
+2019-04-19  Keith Miller  <[email protected]>
+
+        Add script to merge run_benchmark jsons
+        https://bugs.webkit.org/show_bug.cgi?id=197107
+
+        Reviewed by Michael Saboff.
+
+        The script basically recursively decends through all json objects until it gets
+        to an array or JSON primitive and concats or takes the first value, respectively.
+
+        This patch also adds +x bits to the compare-results script so it
+        can be run directly from the command line. I had to add a new line so that svn
+        will accept the change... yay svn!
+
+        * Scripts/compare-results:
+        * Scripts/merge-result-jsons: Added.
+        (readJSONFile):
+        (deepAppend):
+        (mergeJSONs):
+        (main):
+
 2019-04-18  Ryosuke Niwa  <[email protected]>
 
         Crash in FrameLoader::stopAllLoaders via [WebView dealloc] inside ~ObjCEventListener

Modified: trunk/Tools/Scripts/compare-results (244468 => 244469)


--- trunk/Tools/Scripts/compare-results	2019-04-19 21:23:05 UTC (rev 244468)
+++ trunk/Tools/Scripts/compare-results	2019-04-19 21:35:08 UTC (rev 244469)
@@ -233,6 +233,7 @@
         print "Unknown benchmark type"
         sys.exit(1)
 
+
 if __name__ == "__main__":
     main()
 
Property changes on: trunk/Tools/Scripts/compare-results
___________________________________________________________________

Added: svn:executable

+* \ No newline at end of property

Added: trunk/Tools/Scripts/merge-result-jsons (0 => 244469)


--- trunk/Tools/Scripts/merge-result-jsons	                        (rev 0)
+++ trunk/Tools/Scripts/merge-result-jsons	2019-04-19 21:35:08 UTC (rev 244469)
@@ -0,0 +1,82 @@
+#!/usr/bin/env python -u
+
+# Copyright (C) 2019 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+# 3.  Neither the name of Apple Inc. ("Apple") nor the names of
+#     its contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import argparse
+import json
+
+
+def readJSONFile(path):
+    with open(path, 'r') as contents:
+        return json.load(contents)
+
+
+def deepAppend(value1, value2, currentKey=None):
+    if type(value1) != type(value2):
+        raise TypeError("values have different types for key: {}, {} and {}".format(currentKey, type(value1), type(value2)))
+    if isinstance(value1, list):
+        return value1 + value2
+
+    result = {};
+    for key in (value1.keys() + value2.keys()):
+        if key not in result:
+            result[key] = deepAppend(value1[key], value2[key], key)
+    return result
+
+def mergeJSONs(jsons):
+    if len(jsons) == 0:
+        raise TypeError("no jsons to merge")
+
+    last = jsons.pop()
+    return reduce(deepAppend, jsons, last)
+
+def main():
+    parser = argparse.ArgumentParser(description="Merge the resulting json files from multiple invocations of the run_benchmark script.")
+
+    parser.add_argument("-o",
+        type=str,
+        required=False,
+        help="File to put the merged json into prints to standard out if nothing is passed")
+    parser.add_argument("jsons",
+        type=str,
+        nargs='+',
+        help="The json files to be merged.")
+
+    # parse_args will error on our list of incomming JSON files...
+    args = parser.parse_args()
+
+    result = mergeJSONs(list(map(readJSONFile, args.jsons)))
+
+    if args.o:
+        with open(args.o, 'w') as f:
+            json.dump(result, f)
+    else:
+        print(json.dumps(result))
+
+
+if __name__ == "__main__":
+    main()
Property changes on: trunk/Tools/Scripts/merge-result-jsons
___________________________________________________________________

Added: svn:executable

+* \ No newline at end of property
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to