dc397ef896acddb501230f4f3e2a9302f4ea7215
[WebKit-https.git] / SunSpider / sunspider
1 #!/usr/bin/perl -w
2
3 # Copyright (C) 2007 Apple Inc.  All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1. Redistributions of source code must retain the above copyright
9 #    notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 #    notice, this list of conditions and the following disclaimer in the
12 #    documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25
26 use strict;
27
28 sub usage()
29 {
30     die "Usage: sunspider engine [ max_runs ]\n";
31 }
32
33 if (scalar @ARGV < 1) {
34     usage();
35 }
36
37 my $jsshell = $ARGV[0];
38
39 my $max = $ARGV[1];
40 $max = 5 if !$max;
41
42 if ($max =~ /\D/) {
43     usage();
44 }
45
46 print STDERR "Running SunSpider once for warmup, then $max times\n";
47
48 my @tests = ();
49 my @categories = ();
50 my %uniqueCategories = ();
51
52 open TESTLIST, "<./tests/LIST";
53 while (<TESTLIST>) {
54     chomp;
55     next unless $_;
56     push @tests, $_;
57     my $category = $_;
58     $category =~ s/-.*//;
59     if (!$uniqueCategories{$category}) {
60         push @categories, $category;
61         $uniqueCategories{$category} = $category;
62     }
63 }
64 close TESTLIST;
65
66 my $prefix = "var tests = [ " . join(", ", map { '"' . $_ . '"' } @tests) . " ];\n";
67 $prefix .= "var categories = [ " . join(", ", map { '"' . $_ . '"' } @categories) . " ];\n";
68
69 mkdir "tmp";
70 open PREFIX, ">tmp/sunspider-test-prefix.js";
71 print PREFIX $prefix;
72 close PREFIX;
73
74 my $discard = `"$jsshell" -f tmp/sunspider-test-prefix.js -f resources/sunspider-standalone-driver.js 2> /dev/null`;
75
76 print "Discarded first run.\n";
77
78 my $result;
79 my $count = 0;
80 my @results = ();
81 my $total = 0;
82 while ($count++ < $max) {
83     $result = `"$jsshell" -f tmp/sunspider-test-prefix.js -f resources/sunspider-standalone-driver.js 2> /dev/null`;
84     chomp $result;
85     push @results, $result;
86     print $result . "\n";
87 }
88
89 my $output = "var output = [\n" . join(",\n", @results) . "\n];\n";
90
91 open(OUTPUT, ">tmp/sunspider-results.js");
92 print OUTPUT $output;
93 close(OUTPUT);
94
95 system("$jsshell", "-f", "tmp/sunspider-test-prefix.js", "-f", "tmp/sunspider-results.js", "-f", "resources/sunspider-analyze-results.js");