OLD | NEW |
| (Empty) |
1 # Copyright 2013 the V8 project authors. All rights reserved. | |
2 # Redistribution and use in source and binary forms, with or without | |
3 # modification, are permitted provided that the following conditions are | |
4 # met: | |
5 # | |
6 # * Redistributions of source code must retain the above copyright | |
7 # notice, this list of conditions and the following disclaimer. | |
8 # * Redistributions in binary form must reproduce the above | |
9 # copyright notice, this list of conditions and the following | |
10 # disclaimer in the documentation and/or other materials provided | |
11 # with the distribution. | |
12 # * Neither the name of Google Inc. nor the names of its | |
13 # contributors may be used to endorse or promote products derived | |
14 # from this software without specific prior written permission. | |
15 # | |
16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
17 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
18 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
19 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
20 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
27 | |
28 | |
29 import os | |
30 import shutil | |
31 import subprocess | |
32 import tarfile | |
33 | |
34 from testrunner.local import testsuite | |
35 from testrunner.objects import testcase | |
36 | |
37 | |
38 class BenchmarksTestSuite(testsuite.TestSuite): | |
39 | |
40 def __init__(self, name, root): | |
41 super(BenchmarksTestSuite, self).__init__(name, root) | |
42 self.testroot = root | |
43 | |
44 def ListTests(self, context): | |
45 tests = [] | |
46 for test in [ | |
47 "kraken/ai-astar", | |
48 "kraken/audio-beat-detection", | |
49 "kraken/audio-dft", | |
50 "kraken/audio-fft", | |
51 "kraken/audio-oscillator", | |
52 "kraken/imaging-darkroom", | |
53 "kraken/imaging-desaturate", | |
54 "kraken/imaging-gaussian-blur", | |
55 "kraken/json-parse-financial", | |
56 "kraken/json-stringify-tinderbox", | |
57 "kraken/stanford-crypto-aes", | |
58 "kraken/stanford-crypto-ccm", | |
59 "kraken/stanford-crypto-pbkdf2", | |
60 "kraken/stanford-crypto-sha256-iterative", | |
61 | |
62 "octane/box2d", | |
63 "octane/code-load", | |
64 "octane/crypto", | |
65 "octane/deltablue", | |
66 "octane/earley-boyer", | |
67 "octane/gbemu", | |
68 "octane/mandreel", | |
69 "octane/navier-stokes", | |
70 "octane/pdfjs", | |
71 "octane/raytrace", | |
72 "octane/regexp", | |
73 "octane/richards", | |
74 "octane/splay", | |
75 | |
76 "sunspider/3d-cube", | |
77 "sunspider/3d-morph", | |
78 "sunspider/3d-raytrace", | |
79 "sunspider/access-binary-trees", | |
80 "sunspider/access-fannkuch", | |
81 "sunspider/access-nbody", | |
82 "sunspider/access-nsieve", | |
83 "sunspider/bitops-3bit-bits-in-byte", | |
84 "sunspider/bitops-bits-in-byte", | |
85 "sunspider/bitops-bitwise-and", | |
86 "sunspider/bitops-nsieve-bits", | |
87 "sunspider/controlflow-recursive", | |
88 "sunspider/crypto-aes", | |
89 "sunspider/crypto-md5", | |
90 "sunspider/crypto-sha1", | |
91 "sunspider/date-format-tofte", | |
92 "sunspider/date-format-xparb", | |
93 "sunspider/math-cordic", | |
94 "sunspider/math-partial-sums", | |
95 "sunspider/math-spectral-norm", | |
96 "sunspider/regexp-dna", | |
97 "sunspider/string-base64", | |
98 "sunspider/string-fasta", | |
99 "sunspider/string-tagcloud", | |
100 "sunspider/string-unpack-code", | |
101 "sunspider/string-validate-input"]: | |
102 tests.append(testcase.TestCase(self, test)) | |
103 return tests | |
104 | |
105 def GetFlagsForTestCase(self, testcase, context): | |
106 result = [] | |
107 result += context.mode_flags | |
108 if testcase.path.startswith("kraken"): | |
109 result.append(os.path.join(self.testroot, "%s-data.js" % testcase.path)) | |
110 result.append(os.path.join(self.testroot, "%s.js" % testcase.path)) | |
111 elif testcase.path.startswith("octane"): | |
112 result.append(os.path.join(self.testroot, "octane/base.js")) | |
113 result.append(os.path.join(self.testroot, "%s.js" % testcase.path)) | |
114 result += ["-e", "BenchmarkSuite.RunSuites({});"] | |
115 elif testcase.path.startswith("sunspider"): | |
116 result.append(os.path.join(self.testroot, "%s.js" % testcase.path)) | |
117 return testcase.flags + result | |
118 | |
119 def GetSourceForTest(self, testcase): | |
120 filename = os.path.join(self.testroot, testcase.path + ".js") | |
121 with open(filename) as f: | |
122 return f.read() | |
123 | |
124 def _DownloadIfNecessary(self, url, revision, target_dir): | |
125 # Maybe we're still up to date? | |
126 revision_file = "CHECKED_OUT_%s" % target_dir | |
127 checked_out_revision = None | |
128 if os.path.exists(revision_file): | |
129 with open(revision_file) as f: | |
130 checked_out_revision = f.read() | |
131 if checked_out_revision == revision: | |
132 return | |
133 | |
134 # If we have a local archive file with the test data, extract it. | |
135 if os.path.exists(target_dir): | |
136 shutil.rmtree(target_dir) | |
137 archive_file = "downloaded_%s_%s.tar.gz" % (target_dir, revision) | |
138 if os.path.exists(archive_file): | |
139 with tarfile.open(archive_file, "r:gz") as tar: | |
140 tar.extractall() | |
141 with open(revision_file, "w") as f: | |
142 f.write(revision) | |
143 return | |
144 | |
145 # No cached copy. Check out via SVN, and pack as .tar.gz for later use. | |
146 command = "svn co %s -r %s %s" % (url, revision, target_dir) | |
147 code = subprocess.call(command, shell=True) | |
148 if code != 0: | |
149 raise Exception("Error checking out %s benchmark" % target_dir) | |
150 with tarfile.open(archive_file, "w:gz") as tar: | |
151 tar.add("%s" % target_dir) | |
152 with open(revision_file, "w") as f: | |
153 f.write(revision) | |
154 | |
155 def DownloadData(self): | |
156 old_cwd = os.getcwd() | |
157 os.chdir(os.path.abspath(self.root)) | |
158 | |
159 self._DownloadIfNecessary( | |
160 ("http://svn.webkit.org/repository/webkit/trunk/PerformanceTests/" | |
161 "SunSpider/tests/sunspider-1.0/"), | |
162 "153700", "sunspider") | |
163 | |
164 self._DownloadIfNecessary( | |
165 ("http://kraken-mirror.googlecode.com/svn/trunk/kraken/tests/" | |
166 "kraken-1.1/"), | |
167 "8", "kraken") | |
168 | |
169 self._DownloadIfNecessary( | |
170 "http://octane-benchmark.googlecode.com/svn/trunk/", | |
171 "22", "octane") | |
172 | |
173 os.chdir(old_cwd) | |
174 | |
175 def VariantFlags(self): | |
176 # Both --nocrankshaft and --stressopt are very slow. | |
177 return [[]] | |
178 | |
179 | |
180 def GetSuite(name, root): | |
181 return BenchmarksTestSuite(name, root) | |
OLD | NEW |