test/script/basic/run-octane.js

Sat, 16 Nov 2013 00:23:46 +0100

author
hannesw
date
Sat, 16 Nov 2013 00:23:46 +0100
changeset 678
a165c0fb5be6
parent 298
e6193dcfe36c
child 693
18edd7a1b166
permissions
-rw-r--r--

8028210: Missing conversions on array index expression
Reviewed-by: attila, jlaskey, lagergren

jlaskey@3 1 /*
jlaskey@7 2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
jlaskey@3 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
jlaskey@3 4 *
jlaskey@3 5 * This code is free software; you can redistribute it and/or modify it
jlaskey@3 6 * under the terms of the GNU General Public License version 2 only, as
jlaskey@3 7 * published by the Free Software Foundation.
jlaskey@3 8 *
jlaskey@3 9 * This code is distributed in the hope that it will be useful, but WITHOUT
jlaskey@3 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
jlaskey@3 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
jlaskey@3 12 * version 2 for more details (a copy is included in the LICENSE file that
jlaskey@3 13 * accompanied this code).
jlaskey@3 14 *
jlaskey@3 15 * You should have received a copy of the GNU General Public License version
jlaskey@3 16 * 2 along with this work; if not, write to the Free Software Foundation,
jlaskey@3 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
jlaskey@3 18 *
jlaskey@3 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
jlaskey@3 20 * or visit www.oracle.com if you need additional information or have any
jlaskey@3 21 * questions.
jlaskey@3 22 */
jlaskey@3 23
jlaskey@3 24 /**
jlaskey@3 25 * @subtest
jlaskey@3 26 */
jlaskey@3 27
jlaskey@3 28 var tests = [
lagergren@295 29 {file:"box2d",suite:"Box2DBenchmark"},
lagergren@295 30 {file:"code-load",suite:"CodeLoad"},
lagergren@295 31 {file:"crypto",suite:"Crypto"},
lagergren@295 32 {file:"deltablue",suite:"DeltaBlue"},
lagergren@295 33 {file:"earley-boyer", suite:"EarleyBoyer"},
lagergren@295 34 {file:"gbemu", suite:"GameboyBenchmark"},
lagergren@295 35 {file:"mandreel", suite:"MandreelBenchmark"},
lagergren@295 36 {file:"navier-stokes", suite:"NavierStokes"},
lagergren@295 37 {file:"pdfjs", suite:"PdfJS"},
lagergren@295 38 {file:"raytrace", suite:"RayTrace"},
lagergren@295 39 {file:"regexp", suite:"RegExpSuite"},
lagergren@295 40 {file:"richards", suite:"Richards"},
lagergren@295 41 {file:"splay", suite:"Splay"}
jlaskey@3 42 ];
jlaskey@3 43 var dir = (typeof(__DIR__) == 'undefined') ? "test/script/basic/" : __DIR__;
jlaskey@3 44
jlaskey@3 45 // TODO: why is this path hard coded when it's defined in project properties?
sundar@19 46 var path = dir + "../external/octane/";
jlaskey@3 47
jlaskey@3 48 var runtime = "";
jlaskey@3 49 var verbose = false;
jlaskey@3 50
jlaskey@3 51 var numberOfIterations = 5;
jlaskey@3 52
jlaskey@3 53 function endsWith(str, suffix) {
jlaskey@3 54 return str.indexOf(suffix, str.length - suffix.length) !== -1;
jlaskey@3 55 }
jlaskey@3 56
lagergren@139 57 function should_compile_only(name) {
lagergren@295 58 return (typeof compile_only !== 'undefined')
lagergren@139 59 }
lagergren@139 60
jlaskey@3 61 function run_one_benchmark(arg, iters) {
jlaskey@3 62 var file_name;
lagergren@295 63 var file = (arg.file + ".js").split('/');
lagergren@295 64
lagergren@295 65 file_name = path + file[file.length - 1];
lagergren@295 66
lagergren@139 67 var compile_and_return = should_compile_only(file_name);
lagergren@139 68 if (compile_and_return) {
lagergren@139 69 if (typeof compile_only === 'undefined') { //for a run, skip compile onlies, don't even compile them
lagergren@139 70 return;
lagergren@139 71 }
lagergren@57 72 }
lagergren@295 73
lagergren@295 74 print_verbose("Loading... " + file_name);
lagergren@295 75 load(file_name);
jlaskey@3 76
lagergren@139 77 if (compile_and_return) {
lagergren@295 78 print_always("Compiled OK: " + arg.file);
jlaskey@3 79 return;
jlaskey@3 80 }
jlaskey@3 81
jlaskey@3 82 var success = true;
jlaskey@3 83 var current_name;
jlaskey@3 84
jlaskey@3 85 if (iters == undefined) {
jlaskey@3 86 iters = numberOfIterations;
jlaskey@3 87 } else {
jlaskey@3 88 numberOfIterations = iters;
jlaskey@3 89 }
lagergren@295 90
lagergren@295 91 var benchmarks = eval(arg.suite + ".benchmarks");
lagergren@295 92 var min_score = 1e9;
lagergren@295 93 var max_score = 0;
lagergren@295 94 var mean_score = 0;
lagergren@298 95
lagergren@298 96 try {
lagergren@298 97 for (var x = 0; x < benchmarks.length ; x++) {
lagergren@298 98 benchmarks[x].Setup();
lagergren@298 99 }
lagergren@298 100 print_verbose("Running '" + arg.file + "' for " + iters + " iterations of no less than " + min_time + " seconds (" + runtime + ")");
lagergren@298 101
lagergren@298 102 var scores = [];
lagergren@298 103
lagergren@298 104 var min_time_ms = min_time * 1000;
lagergren@298 105 var len = benchmarks.length;
lagergren@298 106
lagergren@298 107 for (var it = 0; it < iters + 1; it++) {
lagergren@298 108 //every iteration must take a minimum of 10 secs
lagergren@298 109 var ops = 0;
lagergren@298 110 var elapsed = 0;
lagergren@298 111 var start = new Date;
lagergren@298 112 do {
lagergren@298 113 for (var i = 0; i < len; i++) {
lagergren@298 114 benchmarks[i].run();
lagergren@298 115 }
lagergren@298 116 ops += len;
lagergren@298 117 elapsed = new Date - start;
lagergren@298 118 } while (elapsed < min_time * 1000);
lagergren@298 119
lagergren@298 120 var score = ops / elapsed * 1000 * 60;
lagergren@298 121 scores.push(score);
lagergren@298 122 var name = it == 0 ? "warmup" : "iteration " + it;
lagergren@298 123 print_verbose("[" + arg.file + "] " + name + " finished " + score.toFixed(0) + " ops/minute");
lagergren@298 124 }
lagergren@298 125
lagergren@298 126 for (var x = 0; x < benchmarks.length ; x++) {
lagergren@298 127 benchmarks[x].TearDown();
lagergren@298 128 }
lagergren@298 129
lagergren@298 130 for (var x = 1; x < iters + 1 ; x++) {
lagergren@298 131 mean_score += scores[x];
lagergren@298 132 min_score = Math.min(min_score, scores[x]);
lagergren@298 133 max_score = Math.max(max_score, scores[x]);
lagergren@298 134 }
lagergren@298 135 mean_score /= iters;
lagergren@298 136
lagergren@298 137 } catch (e) {
lagergren@298 138 print_always("*** Aborted and setting score to zero. Reason: " + e);
lagergren@298 139 mean_score = min_score = max_score = 0;
lagergren@298 140 scores = [0];
lagergren@295 141 }
lagergren@298 142
lagergren@295 143 var res = "[" + arg.file + "] " + mean_score.toFixed(0);
lagergren@295 144 if (verbose) {
lagergren@295 145 res += " ops/minute (" + min_score.toFixed(0) + "-" + max_score.toFixed(0) + "), warmup=" + scores[0].toFixed(0);
lagergren@295 146 }
lagergren@295 147 print_always(res);
lagergren@295 148 }
jlaskey@3 149
lagergren@295 150 function print_always(x) {
lagergren@295 151 print(x);
lagergren@295 152 }
jlaskey@3 153
lagergren@295 154 function print_verbose(x) {
lagergren@295 155 if (verbose) {
lagergren@295 156 print(x);
jlaskey@3 157 }
jlaskey@3 158 }
jlaskey@3 159
jlaskey@3 160 function run_suite(tests, iters) {
jlaskey@3 161 for (var idx = 0; idx < tests.length; idx++) {
lagergren@139 162 run_one_benchmark(tests[idx], iters);
jlaskey@3 163 }
jlaskey@3 164 }
jlaskey@3 165
jlaskey@3 166 runtime = "command line";
jlaskey@3 167
jlaskey@3 168 var args = [];
lagergren@298 169
jlaskey@3 170 if (typeof $ARGS !== 'undefined') {
jlaskey@3 171 args = $ARGS;
jlaskey@3 172 } else if (typeof arguments !== 'undefined' && arguments.length != 0) {
jlaskey@3 173 args = arguments;
jlaskey@3 174 }
jlaskey@3 175
jlaskey@3 176 var new_args = [];
jlaskey@3 177 for (i in args) {
jlaskey@3 178 if (args[i].toString().indexOf(' ') != -1) {
jlaskey@3 179 args[i] = args[i].replace(/\/$/, '');
jlaskey@3 180 var s = args[i].split(' ');
jlaskey@3 181 for (j in s) {
jlaskey@3 182 new_args.push(s[j]);
jlaskey@3 183 }
jlaskey@3 184 } else {
jlaskey@3 185 new_args.push(args[i]);
jlaskey@3 186 }
jlaskey@3 187 }
jlaskey@3 188
jlaskey@3 189 if (new_args.length != 0) {
jlaskey@3 190 args = new_args;
jlaskey@3 191 }
jlaskey@3 192
jlaskey@3 193 var tests_found = [];
jlaskey@3 194 var iters = undefined;
lagergren@295 195 var min_time = 5;
jlaskey@3 196
jlaskey@3 197 for (var i = 0; i < args.length; i++) {
jlaskey@3 198 arg = args[i];
jlaskey@3 199 if (arg == "--iterations") {
jlaskey@3 200 iters = +args[++i];
jlaskey@3 201 } else if (arg == "--runtime") {
jlaskey@3 202 runtime = args[++i];
jlaskey@3 203 } else if (arg == "--verbose") {
jlaskey@3 204 verbose = true;
lagergren@295 205 } else if (arg == "--min-time") {
lagergren@295 206 min_time = +args[++i];
jlaskey@3 207 } else if (arg == "") {
jlaskey@3 208 continue; //skip
jlaskey@3 209 } else {
lagergren@295 210 var found = false;
lagergren@295 211 for (j in tests) {
lagergren@295 212 if (tests[j].file === arg) {
lagergren@295 213 tests_found.push(tests[j]);
lagergren@295 214 found = true;
lagergren@295 215 break;
lagergren@295 216 }
lagergren@295 217 }
lagergren@295 218 if (!found) {
lagergren@295 219 var str = "unknown test name: '" + arg + "' -- valid names are: ";
lagergren@295 220 for (j in tests) {
lagergren@295 221 if (j != 0) {
lagergren@295 222 str += ", ";
lagergren@295 223 }
lagergren@295 224 str += "'" + tests[j].file + "'";
lagergren@295 225 }
lagergren@295 226 throw str;
lagergren@295 227 }
jlaskey@3 228 }
jlaskey@3 229 }
jlaskey@3 230
jlaskey@3 231 if (tests_found.length == 0) {
jlaskey@3 232 for (i in tests) {
lagergren@295 233 tests_found.push(tests[i]);
jlaskey@3 234 }
jlaskey@3 235 }
jlaskey@3 236
jlaskey@3 237 tests_found.sort();
jlaskey@3 238
lagergren@295 239 load(path + 'base.js');
jlaskey@3 240 run_suite(tests_found, iters);
jlaskey@3 241
jlaskey@3 242
jlaskey@3 243

mercurial