test/script/basic/run-octane.js

Wed, 09 Jan 2013 22:32:40 +0530

author
sundar
date
Wed, 09 Jan 2013 22:32:40 +0530
changeset 19
4cd65798ec70
parent 7
5a1b0714df0e
child 57
59970b70ebb5
permissions
-rw-r--r--

8005940: provide ant targets to get and update external test scripts
Reviewed-by: jlaskey, lagergren

     1 /*
     2  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  * 
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  * 
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  * 
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  * 
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  */
    24 /**
    25  * @subtest
    26  */
    28 var tests = [
    29     "box2d.js",
    30     "code-load.js",
    31     "crypto.js", 
    32     "deltablue.js", 
    33     "earley-boyer.js", 
    34     "gbemu.js",	     
    35     "navier-stokes.js", 
    36     "pdfjs.js",
    37     "raytrace.js",
    38     "regexp.js", 
    39     "richards.js", 
    40     "splay.js" 
    41 ];
    43 // hack, teardown breaks things defined in the global space, making it impossible
    44 // to do multiple consecutive benchmark runs with the same harness. I think it's a bug
    45 // that the setup and teardown aren't each others constructor and destructor but rather
    46 // that the benchmarks rely on partial global state. For shame, Octane! 
    47 var ignoreTeardown = [
    48     { name: "box2d.js" },
    49     { name: "gbemu.js" },
    50 ];
    52 var dir = (typeof(__DIR__) == 'undefined') ? "test/script/basic/" : __DIR__;
    54 // TODO: why is this path hard coded when it's defined in project properties?
    55 var path = dir + "../external/octane/";
    57 var runtime = "";
    58 var verbose = false;
    60 var numberOfIterations = 5;
    62 function endsWith(str, suffix) {
    63     return str.indexOf(suffix, str.length - suffix.length) !== -1;
    64 }
    66 function run_one_benchmark(arg, iters) {
    68     load(path + 'base.js');
    69     load(arg);
    71     var file_name;
    73     var file = arg.split('/');
    74     if (file.length == 1) {
    75         file = arg.split('\\');
    76     }    
    78     //trim off trailing path separators
    79     while (file[file.length - 1].indexOf(".js") == -1) {
    80 	file.pop();
    81     }
    82     file_name = file[file.length - 1];
    84     if (typeof compile_only !== 'undefined') {
    85 	print("Compiled OK: " + file_name);
    86 	return;
    87     }
    89     var success = true;
    90     var hiscore = 0;
    91     var loscore = 10e8;
    92     var current_name;
    94     function PrintResult(name, result) {
    95 	current_name = name;
    96     }
    98     function PrintError(name, error) {
    99 	current_name = name;
   100 	PrintResult(name, error);
   101 	success = false;
   102     }
   104     function PrintScore(score) {
   105 	if (success) {
   106 	    if (+score >= hiscore) {
   107 		hiscore = +score;
   108 	    }
   109 	    if (+score <= loscore) {
   110 		loscore = +score;
   111 	    }
   112 	}
   114 	if (verbose) {
   115 	    print("Score: " + score);
   116 	}
   117     }
   119     if (iters == undefined) {
   120 	iters = numberOfIterations;
   121     } else {
   122 	numberOfIterations = iters;
   123     }
   125     print(runtime + ": running " + file_name + "...");
   127     for (var i = 0; i < numberOfIterations; i++) {
   128 	var callbacks =
   129 	    { NotifyResult: PrintResult,
   130 	      NotifyError: PrintError,
   131 	      NotifyScore: PrintScore };	
   133 	for (j in ignoreTeardown) {
   134 	    var ignore = ignoreTeardown[j];
   135 	    if (endsWith(arg, ignore.name)) {
   136 		var teardownOverride = ignore.teardown;
   137 		if (!teardownOverride) {
   138 		    teardownOverride = function() {};
   139 		}
   141 		for (k in BenchmarkSuite.suites) {
   142 		    var benchmarks = BenchmarkSuite.suites[k].benchmarks;
   143 		    for (l in benchmarks) {
   144 			benchmarks[l].TearDown = teardownOverride;
   145 		    }
   146                 }
   147 		break;
   148 	    }
   149 	}
   151 	BenchmarkSuite.RunSuites(callbacks);
   152     }
   154     var start = "Score: ";
   155     if (runtime != "") {
   156 	start = runtime + ": ";
   157     } 
   158     print(start + current_name + ' (version ' + BenchmarkSuite.version + '): ' + loscore + '-' + hiscore);
   159 }
   161 function run_suite(tests, iters) {
   162     for (var idx = 0; idx < tests.length; idx++) {
   163 	run_one_benchmark(tests[idx], iters, false);
   164     }
   165 }
   167 runtime = "command line";
   169 var args = [];
   170 if (typeof $ARGS !== 'undefined') {
   171     args = $ARGS;
   172 } else if (typeof arguments !== 'undefined' && arguments.length != 0) {
   173     args = arguments;
   174 }  
   176 var new_args = [];
   177 for (i in args) {
   178     if (args[i].toString().indexOf(' ') != -1) {
   179 	args[i] = args[i].replace(/\/$/, '');
   180 	var s = args[i].split(' ');
   181 	for (j in s) {
   182 	    new_args.push(s[j]);
   183 	}
   184     } else {
   185 	new_args.push(args[i]);
   186     }
   187 }
   189 if (new_args.length != 0) {
   190     args = new_args;
   191 }
   193 var tests_found = [];
   194 var iters = undefined;
   196 for (var i = 0; i < args.length; i++) { 
   197     arg = args[i];
   198     if (arg == "--iterations") {
   199 	iters = +args[++i];
   200     } else if (arg == "--runtime") {
   201 	runtime = args[++i];
   202     } else if (arg == "--verbose") {
   203 	verbose = true;
   204     } else if (arg == "") {
   205 	continue; //skip
   206     } else {
   207 	tests_found.push(arg);
   208     }
   209 }
   211 if (tests_found.length == 0) {    
   212     for (i in tests) {
   213 	tests_found.push(path + tests[i]);
   214     }
   215 } 
   217 tests_found.sort();
   219 run_suite(tests_found, iters);

mercurial