Reviewed by Eric.
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Mar 2006 01:44:42 +0000 (01:44 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Mar 2006 01:44:42 +0000 (01:44 +0000)
        Added run-testkjs and compare-timing-files scripts, to support super
        accurate JS iBench.

        * Scripts/compare-timing-files: Added.
        * Scripts/run-testkjs: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@13320 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKitTools/ChangeLog
WebKitTools/Scripts/compare-timing-files [new file with mode: 0755]
WebKitTools/Scripts/run-testkjs [new file with mode: 0755]

index eef054f669161c1cef98ea5b2a865333e1e25b47..80b5239f8f9262384cb60bdb74d899733cac325c 100644 (file)
@@ -1,3 +1,13 @@
+2006-03-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Eric.
+
+        Added run-testkjs and compare-timing-files scripts, to support super
+        accurate JS iBench.
+
+        * Scripts/compare-timing-files: Added.
+        * Scripts/run-testkjs: Added.
+
 2006-03-14  Eric Seidel  <eseidel@apple.com>
 
         Reviewed by mjs.
         Added display of "-w3c.png" baseline images for SVG.
         http://bugzilla.opendarwin.org/show_bug.cgi?id=4581
 
->>>>>>> 1.80
 2005-08-20  Eric Seidel  <eseidel@apple.com>
 
         * Scripts/run-webkit-tests:
diff --git a/WebKitTools/Scripts/compare-timing-files b/WebKitTools/Scripts/compare-timing-files
new file mode 100755 (executable)
index 0000000..11b470b
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/perl
+
+# Copyright (C) 2006 Apple Computer, 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 Computer, 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.
+
+# This script takes two files that are lists of timings and compares them.
+
+use warnings;
+use strict;
+use Getopt::Long;
+
+my $usage = "compare-timing-files [-c|--count results] oldFile newFile";
+
+my $count = 1;
+GetOptions("c|count=i" => \$count);
+
+my ($file1, $file2) = @ARGV;
+die "$usage\n" unless ($file1 && $file2 && @ARGV == 2);
+
+my ($oldAverage, $oldRange, $oldRangePercent) = parseResults($file1);
+my ($newAverage, $newRange, $newRangePercent) = parseResults($file2);
+
+print "\n===== $file1 =====\n";
+if ($count == 1) {
+    print("fastest run: $oldAverage\n");
+} else {
+    print("average of fastest $count runs: $oldAverage\n");
+    printf("range of fastest $count runs: %.2f%% (%d)\n", $oldRangePercent, $oldRange);
+}
+
+print "\n===== $file2 =====\n";
+if ($count == 1) {
+    print("fastest run: $newAverage\n");
+} else {
+    print("average of fastest $count runs: $newAverage\n");
+    printf("range of fastest $count runs: %.2f%% (%d)\n", $newRangePercent, $newRange);
+}
+
+my $gainOrLoss = $newAverage <= $oldAverage ? "GAIN" : "LOSS";
+my $difference = abs($newAverage - $oldAverage);
+my $differencePercent = $difference / $oldAverage * 100;
+printf("\nperformance %s of %.2f%% (%.1f / %.1f)\n", $gainOrLoss, $differencePercent, $difference, $oldAverage);
+print "\n";
+
+sub parseResults
+{
+    my ($file) = @_;
+    
+    open(FILE, $file) or die "Couldn't open file: $file";
+    my @results = <FILE>;
+    close(FILE);
+
+    @results = sort(@results);
+    my $total = 0;
+    for (my $i = 0; $i < $count; $i++) {
+        $results[$i] =~ s/\D*//; # cut out non-digits
+        $total += $results[$i]; 
+    }
+    my $average = $total / $count;
+    my $range = $results[$count - 1] - $results[0];
+    my $rangePercent = $range / $results[$count - 1] * 100;
+
+    return ($average, $range, $rangePercent);
+}
+
diff --git a/WebKitTools/Scripts/run-testkjs b/WebKitTools/Scripts/run-testkjs
new file mode 100755 (executable)
index 0000000..8f78e5d
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+# Copyright (C) 2006 Apple Computer, 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 Computer, 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.
+
+# This script runs a list of scripts through testkjs a specified number of times.
+
+use strict;
+use warnings;
+use FindBin;
+use lib $FindBin::Bin;
+use Getopt::Long;
+use webkitdirs;
+
+my $usage = "Usage: run-testkjs [-c|--count run_count] file1 [file2...]";
+
+my $count = 1;
+GetOptions("count|c=i" => \$count);
+die "$usage\n" if (@ARGV < 1);
+
+my $testkjs = productDir() . "/testkjs";
+
+print STDERR "Running $count times: \"$testkjs @ARGV\"\n"; 
+while ($count--) {
+    system($testkjs, @ARGV) and last;
+}
+