JavaScriptCore:
[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 open PREFIX, ">/tmp/sunspider-test-prefix.js";
70 print PREFIX $prefix;
71 close PREFIX;
72
73 my $discard = `$jsshell -f /tmp/sunspider-test-prefix.js -f resources/sunspider-standalone-driver.js 2> /dev/null`;
74
75 print "Discarded first run.\n";
76
77 my $result;
78 my $count = 0;
79 my @results = ();
80 my $total = 0;
81 while ($count++ < $max) {
82     $result = `$jsshell -f /tmp/sunspider-test-prefix.js -f resources/sunspider-standalone-driver.js 2> /dev/null`;
83     chomp $result;
84     push @results, $result;
85     print $result . "\n";
86 }
87
88 my $output = "var output = [\n" . join(",\n", @results) . "\n];\n";
89
90 open(OUTPUT, ">/tmp/sunspider-results.js");
91 print OUTPUT $output;
92 close(OUTPUT);
93
94 system("$jsshell -f /tmp/sunspider-test-prefix.js -f /tmp/sunspider-results.js -f resources/sunspider-analyze-results.js");
95