diff options
Diffstat (limited to 'SunSpider/sunspider-compare-results')
-rwxr-xr-x | SunSpider/sunspider-compare-results | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/SunSpider/sunspider-compare-results b/SunSpider/sunspider-compare-results new file mode 100755 index 0000000..f23fb24 --- /dev/null +++ b/SunSpider/sunspider-compare-results @@ -0,0 +1,142 @@ +#!/usr/bin/perl -w + +# Copyright (C) 2007 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. +# +# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 COMPUTER, INC. OR +# 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. + +use strict; +use Getopt::Long; +use File::Basename; + +my $showHelp = 0; +my $jsShellPath; + +my $programName = basename($0); +my $usage = <<EOF; +Usage: $programName --shell=[path] [options] FILE FILE + --help Show this help message + --shell Path to javascript shell +EOF + +GetOptions('shell=s' => \$jsShellPath, + 'help' => \$showHelp); + +if ((scalar @ARGV != 0 && scalar @ARGV != 2) || !$jsShellPath || $showHelp) { + print STDERR $usage; + exit 1; +} + +sub readResultsFile($) +{ + my ($filename) = @_; + open FILE, "<", $filename or die; + my $foundStart = 0; + my $foundOutput = 0; + my $foundEnd = 0; + my $result = ""; + while (<FILE>) { + if (!$foundStart) { + if (/^\[\{$/) { + $foundStart = 1; + $result .= $_; + } elsif (/^var \w+ = \[$/) { + $foundOutput = 1; + } elsif ($foundOutput && /^\{$/) { + $foundOutput = 0; + $foundStart = 1; + $result = "[{\n"; + } + } else { + if (/\];?$/) { + $foundEnd = 1; + chomp; + s/;$//; + $result .= $_; + last; + } else { + $result .= $_; + } + } + } + close FILE; + + die "Cound not find data in ${filename} - needs to start with [{" unless $foundStart; + die "Cound not find data in ${filename} - needs to end with }]" unless $foundEnd; + + return $result; +} + +sub dumpToFile($$) +{ + my ($contents, $path) = @_; + open FILE, ">", $path or die; + print FILE $contents; + close FILE; +} + +sub readFile($) +{ + my ($path) = @_; + open FILE, "<", $path or die; + my $result = <FILE>; + close FILE; + return $result; +} + +sub newestFile($$) +{ + my ($dir, $pattern) = @_; + + my $newestAge; + my $newestFile = ""; + opendir DIR, $dir or die; + for my $file (readdir DIR) { + if ($file =~ $pattern) { + my $age = -M "$dir/$file"; + if (!defined $newestAge || $age < $newestAge) { + $newestFile = $file; + $newestAge = $age; + } + } + } + closedir DIR; + + return "$dir/$newestFile"; +} + +my $file1; +my $file2; + +if (scalar @ARGV == 2) { + $file1 = $ARGV[0]; + $file2 = $ARGV[1]; +} else { + $file1 = readFile("tmp/baseline-filename.txt"); + $file2 = newestFile("tmp", qr/sunspider-results-.+\.js$/); +} + +my $output = "var output1 = " . readResultsFile($file1) . ";\n"; +$output .= "var output2 = " . readResultsFile($file2) . ";\n"; + +dumpToFile($output, "tmp/sunspider-comparison-data.js"); + +system($jsShellPath, "-f", "tmp/sunspider-test-prefix.js", "-f", "tmp/sunspider-comparison-data.js", "-f", "resources/sunspider-compare-results.js", "-f", "resources/sunspider-standalone-compare.js"); |