test/script/basic/run-octane.js

Wed, 12 Feb 2014 11:16:35 -0800

author
asaha
date
Wed, 12 Feb 2014 11:16:35 -0800
changeset 806
7e11bf43f4a2
parent 693
18edd7a1b166
child 952
6d5471a497fb
child 962
ac62e33a99b0
permissions
-rw-r--r--

Added tag jdk8u11-b00 for changeset d88b60cdc8f3

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@693 29 {name:"box2d", files:["box2d.js"], suite:"Box2DBenchmark"},
lagergren@693 30 {name:"code-load", files:["code-load.js"], suite:"CodeLoad"},
lagergren@693 31 {name:"crypto", files:["crypto.js"], suite:"Crypto"},
lagergren@693 32 {name:"deltablue", files:["deltablue.js"], suite:"DeltaBlue"},
lagergren@693 33 {name:"earley-boyer", files:["earley-boyer.js"], suite:"EarleyBoyer"},
lagergren@693 34 {name:"gbemu", files:["gbemu-part1.js", "gbemu-part2.js"], suite:"GameboyBenchmark"},
lagergren@693 35 {name:"mandreel", files:["mandreel.js"], suite:"MandreelBenchmark"},
lagergren@693 36 {name:"navier-stokes", files:["navier-stokes.js"], suite:"NavierStokes"},
lagergren@693 37 {name:"pdfjs", files:["pdfjs.js"], suite:"PdfJS"},
lagergren@693 38 {name:"raytrace", files:["raytrace.js"], suite:"RayTrace"},
lagergren@693 39 {name:"regexp", files:["regexp.js"], suite:"RegExpSuite"},
lagergren@693 40 {name:"richards", files:["richards.js"], suite:"Richards"},
lagergren@693 41 {name:"splay", files:["splay.js"], suite:"Splay"},
lagergren@693 42 {name:"typescript", files:["typescript.js", "typescript-input.js", "typescript-compiler.js"], suite:"typescript"}
lagergren@693 43 //zlib currently disabled - requires read
lagergren@693 44 // {name:"zlib", files:["zlib.js", "zlib-data.js"], suite:"zlib"},
jlaskey@3 45 ];
jlaskey@3 46 var dir = (typeof(__DIR__) == 'undefined') ? "test/script/basic/" : __DIR__;
jlaskey@3 47
jlaskey@3 48 // TODO: why is this path hard coded when it's defined in project properties?
sundar@19 49 var path = dir + "../external/octane/";
jlaskey@3 50
jlaskey@3 51 var runtime = "";
jlaskey@3 52 var verbose = false;
jlaskey@3 53
jlaskey@3 54 var numberOfIterations = 5;
jlaskey@3 55
jlaskey@3 56 function endsWith(str, suffix) {
jlaskey@3 57 return str.indexOf(suffix, str.length - suffix.length) !== -1;
jlaskey@3 58 }
jlaskey@3 59
lagergren@139 60 function should_compile_only(name) {
lagergren@295 61 return (typeof compile_only !== 'undefined')
lagergren@139 62 }
lagergren@139 63
lagergren@693 64 function load_bench(arg) {
lagergren@693 65
lagergren@693 66 for (var idx = 0; idx < arg.files.length; idx++) {
lagergren@693 67 var f = arg.files[idx];
lagergren@693 68 var file = f.split('/');
lagergren@693 69 var file_name = path + file[file.length - 1];
lagergren@693 70
lagergren@693 71 var compile_and_return = should_compile_only(file_name);
lagergren@693 72 if (compile_and_return) {
lagergren@693 73 if (typeof compile_only === 'undefined') { //for a run, skip compile onlies, don't even compile them
lagergren@693 74 return true;
lagergren@693 75 }
lagergren@693 76 }
lagergren@693 77
lagergren@693 78 print_verbose(arg, "loading '" + arg.name + "' [" + f + "]...");
lagergren@693 79 load(file_name);
lagergren@693 80 }
lagergren@693 81
lagergren@693 82 if (compile_and_return) {
lagergren@693 83 print_always(arg, "Compiled OK");
lagergren@693 84 }
lagergren@693 85 return !compile_and_return;
lagergren@693 86
lagergren@693 87 }
lagergren@693 88
jlaskey@3 89 function run_one_benchmark(arg, iters) {
lagergren@693 90
lagergren@693 91 if (!load_bench(arg)) {
jlaskey@3 92 return;
lagergren@693 93 }
jlaskey@3 94
jlaskey@3 95 var success = true;
jlaskey@3 96 var current_name;
jlaskey@3 97
jlaskey@3 98 if (iters == undefined) {
jlaskey@3 99 iters = numberOfIterations;
jlaskey@3 100 } else {
jlaskey@3 101 numberOfIterations = iters;
jlaskey@3 102 }
lagergren@295 103
lagergren@295 104 var benchmarks = eval(arg.suite + ".benchmarks");
lagergren@295 105 var min_score = 1e9;
lagergren@295 106 var max_score = 0;
lagergren@295 107 var mean_score = 0;
lagergren@298 108
lagergren@298 109 try {
lagergren@298 110 for (var x = 0; x < benchmarks.length ; x++) {
lagergren@693 111 //do warmup run
lagergren@693 112 //reset random number generator needed as of octane 9 before each run
lagergren@693 113 BenchmarkSuite.ResetRNG();
lagergren@298 114 benchmarks[x].Setup();
lagergren@298 115 }
lagergren@693 116 BenchmarkSuite.ResetRNG();
lagergren@693 117 print_verbose(arg, "running '" + arg.name + "' for " + iters + " iterations of no less than " + min_time + " seconds (" + runtime + ")");
lagergren@298 118
lagergren@298 119 var scores = [];
lagergren@298 120
lagergren@298 121 var min_time_ms = min_time * 1000;
lagergren@298 122 var len = benchmarks.length;
lagergren@298 123
lagergren@298 124 for (var it = 0; it < iters + 1; it++) {
lagergren@298 125 //every iteration must take a minimum of 10 secs
lagergren@298 126 var ops = 0;
lagergren@298 127 var elapsed = 0;
lagergren@298 128 var start = new Date;
lagergren@298 129 do {
lagergren@298 130 for (var i = 0; i < len; i++) {
lagergren@298 131 benchmarks[i].run();
lagergren@693 132 //important - no timing here like elapsed = new Date() - start, as in the
lagergren@693 133 //original harness. This will make timing very non-deterministic.
lagergren@693 134 //NOTHING else must live in this loop
lagergren@298 135 }
lagergren@298 136 ops += len;
lagergren@298 137 elapsed = new Date - start;
lagergren@298 138 } while (elapsed < min_time * 1000);
lagergren@298 139
lagergren@298 140 var score = ops / elapsed * 1000 * 60;
lagergren@298 141 scores.push(score);
lagergren@298 142 var name = it == 0 ? "warmup" : "iteration " + it;
lagergren@693 143 print_verbose(arg, name + " finished " + score.toFixed(0) + " ops/minute");
lagergren@298 144 }
lagergren@298 145
lagergren@298 146 for (var x = 0; x < benchmarks.length ; x++) {
lagergren@298 147 benchmarks[x].TearDown();
lagergren@298 148 }
lagergren@298 149
lagergren@298 150 for (var x = 1; x < iters + 1 ; x++) {
lagergren@298 151 mean_score += scores[x];
lagergren@298 152 min_score = Math.min(min_score, scores[x]);
lagergren@298 153 max_score = Math.max(max_score, scores[x]);
lagergren@298 154 }
lagergren@298 155 mean_score /= iters;
lagergren@298 156
lagergren@298 157 } catch (e) {
lagergren@298 158 print_always("*** Aborted and setting score to zero. Reason: " + e);
lagergren@298 159 mean_score = min_score = max_score = 0;
lagergren@298 160 scores = [0];
lagergren@295 161 }
lagergren@298 162
lagergren@693 163 var res = mean_score.toFixed(0);
lagergren@295 164 if (verbose) {
lagergren@295 165 res += " ops/minute (" + min_score.toFixed(0) + "-" + max_score.toFixed(0) + "), warmup=" + scores[0].toFixed(0);
lagergren@295 166 }
lagergren@693 167 print_always(arg, res);
lagergren@295 168 }
jlaskey@3 169
lagergren@693 170 function print_always(arg, x) {
lagergren@693 171 print("[" + arg.name + "] " + x);
lagergren@295 172 }
jlaskey@3 173
lagergren@693 174 function print_verbose(arg, x) {
lagergren@295 175 if (verbose) {
lagergren@693 176 print_always(arg, x)
jlaskey@3 177 }
jlaskey@3 178 }
jlaskey@3 179
jlaskey@3 180 function run_suite(tests, iters) {
jlaskey@3 181 for (var idx = 0; idx < tests.length; idx++) {
lagergren@139 182 run_one_benchmark(tests[idx], iters);
jlaskey@3 183 }
jlaskey@3 184 }
jlaskey@3 185
jlaskey@3 186 runtime = "command line";
jlaskey@3 187
jlaskey@3 188 var args = [];
lagergren@298 189
jlaskey@3 190 if (typeof $ARGS !== 'undefined') {
jlaskey@3 191 args = $ARGS;
jlaskey@3 192 } else if (typeof arguments !== 'undefined' && arguments.length != 0) {
jlaskey@3 193 args = arguments;
jlaskey@3 194 }
jlaskey@3 195
jlaskey@3 196 var new_args = [];
jlaskey@3 197 for (i in args) {
jlaskey@3 198 if (args[i].toString().indexOf(' ') != -1) {
jlaskey@3 199 args[i] = args[i].replace(/\/$/, '');
jlaskey@3 200 var s = args[i].split(' ');
jlaskey@3 201 for (j in s) {
jlaskey@3 202 new_args.push(s[j]);
jlaskey@3 203 }
jlaskey@3 204 } else {
jlaskey@3 205 new_args.push(args[i]);
jlaskey@3 206 }
jlaskey@3 207 }
jlaskey@3 208
jlaskey@3 209 if (new_args.length != 0) {
jlaskey@3 210 args = new_args;
jlaskey@3 211 }
jlaskey@3 212
jlaskey@3 213 var tests_found = [];
jlaskey@3 214 var iters = undefined;
lagergren@295 215 var min_time = 5;
jlaskey@3 216
jlaskey@3 217 for (var i = 0; i < args.length; i++) {
jlaskey@3 218 arg = args[i];
jlaskey@3 219 if (arg == "--iterations") {
jlaskey@3 220 iters = +args[++i];
jlaskey@3 221 } else if (arg == "--runtime") {
jlaskey@3 222 runtime = args[++i];
jlaskey@3 223 } else if (arg == "--verbose") {
jlaskey@3 224 verbose = true;
lagergren@295 225 } else if (arg == "--min-time") {
lagergren@295 226 min_time = +args[++i];
jlaskey@3 227 } else if (arg == "") {
jlaskey@3 228 continue; //skip
jlaskey@3 229 } else {
lagergren@295 230 var found = false;
lagergren@295 231 for (j in tests) {
lagergren@693 232 if (tests[j].name === arg) {
lagergren@295 233 tests_found.push(tests[j]);
lagergren@295 234 found = true;
lagergren@295 235 break;
lagergren@295 236 }
lagergren@295 237 }
lagergren@295 238 if (!found) {
lagergren@295 239 var str = "unknown test name: '" + arg + "' -- valid names are: ";
lagergren@295 240 for (j in tests) {
lagergren@295 241 if (j != 0) {
lagergren@295 242 str += ", ";
lagergren@295 243 }
lagergren@693 244 str += "'" + tests[j].name + "'";
lagergren@295 245 }
lagergren@295 246 throw str;
lagergren@295 247 }
jlaskey@3 248 }
jlaskey@3 249 }
jlaskey@3 250
jlaskey@3 251 if (tests_found.length == 0) {
jlaskey@3 252 for (i in tests) {
lagergren@295 253 tests_found.push(tests[i]);
jlaskey@3 254 }
jlaskey@3 255 }
jlaskey@3 256
jlaskey@3 257 tests_found.sort();
jlaskey@3 258
lagergren@295 259 load(path + 'base.js');
jlaskey@3 260 run_suite(tests_found, iters);
jlaskey@3 261
jlaskey@3 262
jlaskey@3 263

mercurial