mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Update our local copy of the V8 benchmarks to the latest test harness.
This commit is contained in:
parent
4426bcc441
commit
8c3e167f37
@ -1,4 +1,4 @@
|
||||
// Copyright 2008 Google Inc. All Rights Reserved.
|
||||
// Copyright 2008 the V8 project authors. All rights reserved.
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
@ -31,10 +31,15 @@
|
||||
|
||||
|
||||
// A benchmark has a name (string) and a function that will be run to
|
||||
// do the performance measurement.
|
||||
function Benchmark(name, run) {
|
||||
// do the performance measurement. The optional setup and tearDown
|
||||
// arguments are functions that will be invoked before and after
|
||||
// running the benchmark, but the running time of these functions will
|
||||
// not be accounted for in the benchmark score.
|
||||
function Benchmark(name, run, setup, tearDown) {
|
||||
this.name = name;
|
||||
this.run = run;
|
||||
this.Setup = setup ? setup : function() { };
|
||||
this.TearDown = tearDown ? tearDown : function() { };
|
||||
}
|
||||
|
||||
|
||||
@ -73,7 +78,24 @@ BenchmarkSuite.suites = [];
|
||||
// Scores are not comparable across versions. Bump the version if
|
||||
// you're making changes that will affect that scores, e.g. if you add
|
||||
// a new benchmark or change an existing one.
|
||||
BenchmarkSuite.version = '1';
|
||||
BenchmarkSuite.version = '5';
|
||||
|
||||
|
||||
// To make the benchmark results predictable, we replace Math.random
|
||||
// with a 100% deterministic alternative.
|
||||
Math.random = (function() {
|
||||
var seed = 49734321;
|
||||
return function() {
|
||||
// Robert Jenkins' 32 bit integer hash function.
|
||||
seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff;
|
||||
seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;
|
||||
seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff;
|
||||
seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;
|
||||
seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff;
|
||||
seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;
|
||||
return (seed & 0xfffffff) / 0x10000000;
|
||||
};
|
||||
})();
|
||||
|
||||
|
||||
// Runs all registered benchmark suites and optionally yields between
|
||||
@ -96,13 +118,14 @@ BenchmarkSuite.RunSuites = function(runner) {
|
||||
continuation = suite.RunStep(runner);
|
||||
}
|
||||
if (continuation && typeof window != 'undefined' && window.setTimeout) {
|
||||
window.setTimeout(RunStep, 100);
|
||||
window.setTimeout(RunStep, 25);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (runner.NotifyScore) {
|
||||
var score = BenchmarkSuite.GeometricMean(BenchmarkSuite.scores);
|
||||
runner.NotifyScore(Math.round(100 * score));
|
||||
var formatted = BenchmarkSuite.FormatScore(100 * score);
|
||||
runner.NotifyScore(formatted);
|
||||
}
|
||||
}
|
||||
RunStep();
|
||||
@ -131,6 +154,16 @@ BenchmarkSuite.GeometricMean = function(numbers) {
|
||||
}
|
||||
|
||||
|
||||
// Converts a score value to a string with at least three significant
|
||||
// digits.
|
||||
BenchmarkSuite.FormatScore = function(value) {
|
||||
if (value > 100) {
|
||||
return value.toFixed(0);
|
||||
} else {
|
||||
return value.toPrecision(3);
|
||||
}
|
||||
}
|
||||
|
||||
// Notifies the runner that we're done running a single benchmark in
|
||||
// the benchmark suite. This can be useful to report progress.
|
||||
BenchmarkSuite.prototype.NotifyStep = function(result) {
|
||||
@ -146,14 +179,26 @@ BenchmarkSuite.prototype.NotifyResult = function() {
|
||||
var score = this.reference / mean;
|
||||
BenchmarkSuite.scores.push(score);
|
||||
if (this.runner.NotifyResult) {
|
||||
this.runner.NotifyResult(this.name, Math.round(100 * score));
|
||||
var formatted = BenchmarkSuite.FormatScore(100 * score);
|
||||
this.runner.NotifyResult(this.name, formatted);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Notifies the runner that running a benchmark resulted in an error.
|
||||
BenchmarkSuite.prototype.NotifyError = function(error) {
|
||||
if (this.runner.NotifyError) {
|
||||
this.runner.NotifyError(this.name, error);
|
||||
}
|
||||
if (this.runner.NotifyStep) {
|
||||
this.runner.NotifyStep(this.name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Runs a single benchmark for at least a second and computes the
|
||||
// average time it takes to run a single iteration.
|
||||
BenchmarkSuite.prototype.RunSingle = function(benchmark) {
|
||||
BenchmarkSuite.prototype.RunSingleBenchmark = function(benchmark) {
|
||||
var elapsed = 0;
|
||||
var start = new Date();
|
||||
for (var n = 0; elapsed < 1000; n++) {
|
||||
@ -175,13 +220,46 @@ BenchmarkSuite.prototype.RunStep = function(runner) {
|
||||
var length = this.benchmarks.length;
|
||||
var index = 0;
|
||||
var suite = this;
|
||||
function RunNext() {
|
||||
|
||||
// Run the setup, the actual benchmark, and the tear down in three
|
||||
// separate steps to allow the framework to yield between any of the
|
||||
// steps.
|
||||
|
||||
function RunNextSetup() {
|
||||
if (index < length) {
|
||||
suite.RunSingle(suite.benchmarks[index++]);
|
||||
return RunNext;
|
||||
try {
|
||||
suite.benchmarks[index].Setup();
|
||||
} catch (e) {
|
||||
suite.NotifyError(e);
|
||||
return null;
|
||||
}
|
||||
return RunNextBenchmark;
|
||||
}
|
||||
suite.NotifyResult();
|
||||
return null;
|
||||
}
|
||||
return RunNext();
|
||||
|
||||
function RunNextBenchmark() {
|
||||
try {
|
||||
suite.RunSingleBenchmark(suite.benchmarks[index]);
|
||||
} catch (e) {
|
||||
suite.NotifyError(e);
|
||||
return null;
|
||||
}
|
||||
return RunNextTearDown;
|
||||
}
|
||||
|
||||
function RunNextTearDown() {
|
||||
try {
|
||||
suite.benchmarks[index++].TearDown();
|
||||
} catch (e) {
|
||||
suite.NotifyError(e);
|
||||
return null;
|
||||
}
|
||||
return RunNextSetup;
|
||||
}
|
||||
|
||||
// Start out running the setup.
|
||||
return RunNextSetup();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user