aboutsummaryrefslogtreecommitdiff
path: root/benchmarks
diff options
context:
space:
mode:
authorlrn@chromium.org <lrn@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>2010-06-30 09:09:34 +0000
committerlrn@chromium.org <lrn@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>2010-06-30 09:09:34 +0000
commit32d961d4454609ab4251a760fc46b19f661da90c (patch)
tree6c3092022b4b981c28cf5911506439f16056c42b /benchmarks
parent40b9da37a45dabf86bd82a39e885f2921f47fc08 (diff)
downloadv8-32d961d4454609ab4251a760fc46b19f661da90c.tar.gz
Version 2.2.21
Fix bug in externalizing some ASCII strings (Chromium issue 47824). Update JSON.stringify to floor the space parameter (issue 753). Update the Mozilla test expectations to the newest version. Update the ES5 Conformance Test expectations to the latest version. Update the V8 benchmark suite. Provide actual breakpoints locations in response to setBreakpoint and listBreakpoints requests. git-svn-id: http://v8.googlecode.com/svn/trunk@4988 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
Diffstat (limited to 'benchmarks')
-rw-r--r--benchmarks/README.txt12
-rw-r--r--benchmarks/base.js40
-rw-r--r--benchmarks/crypto.js2
-rw-r--r--benchmarks/deltablue.js8
-rw-r--r--benchmarks/earley-boyer.js2
-rw-r--r--benchmarks/raytrace.js2
-rw-r--r--benchmarks/regexp.js2
-rw-r--r--benchmarks/revisions.html13
-rw-r--r--benchmarks/richards.js2
-rw-r--r--benchmarks/run.html2
-rw-r--r--benchmarks/splay.js21
11 files changed, 76 insertions, 30 deletions
diff --git a/benchmarks/README.txt b/benchmarks/README.txt
index 8e08159da..800b4f518 100644
--- a/benchmarks/README.txt
+++ b/benchmarks/README.txt
@@ -66,6 +66,12 @@ extensions enabled.
Changes from Version 5 to Version 6
===================================
-Removed dead code from the RayTrace benchmark and changed the Splay
-benchmark to avoid converting the same numeric key to a string over
-and over again.
+Removed dead code from the RayTrace benchmark and fixed a couple of
+typos in the DeltaBlue implementation. Changed the Splay benchmark to
+avoid converting the same numeric key to a string over and over again
+and to avoid inserting and removing the same element repeatedly thus
+increasing pressure on the memory subsystem.
+
+Furthermore, the benchmark runner was changed to run the benchmarks
+for at least a few times to stabilize the reported numbers on slower
+machines.
diff --git a/benchmarks/base.js b/benchmarks/base.js
index ce308419e..0388da684 100644
--- a/benchmarks/base.js
+++ b/benchmarks/base.js
@@ -198,15 +198,33 @@ BenchmarkSuite.prototype.NotifyError = function(error) {
// Runs a single benchmark for at least a second and computes the
// average time it takes to run a single iteration.
-BenchmarkSuite.prototype.RunSingleBenchmark = function(benchmark) {
- var elapsed = 0;
- var start = new Date();
- for (var n = 0; elapsed < 1000; n++) {
- benchmark.run();
- elapsed = new Date() - start;
+BenchmarkSuite.prototype.RunSingleBenchmark = function(benchmark, data) {
+ function Measure(data) {
+ var elapsed = 0;
+ var start = new Date();
+ for (var n = 0; elapsed < 1000; n++) {
+ benchmark.run();
+ elapsed = new Date() - start;
+ }
+ if (data != null) {
+ data.runs += n;
+ data.elapsed += elapsed;
+ }
+ }
+
+ if (data == null) {
+ // Measure the benchmark once for warm up and throw the result
+ // away. Return a fresh data object.
+ Measure(null);
+ return { runs: 0, elapsed: 0 };
+ } else {
+ Measure(data);
+ // If we've run too few iterations, we continue for another second.
+ if (data.runs < 32) return data;
+ var usec = (data.elapsed * 1000) / data.runs;
+ this.NotifyStep(new BenchmarkResult(benchmark, usec));
+ return null;
}
- var usec = (elapsed * 1000) / n;
- this.NotifyStep(new BenchmarkResult(benchmark, usec));
}
@@ -220,6 +238,7 @@ BenchmarkSuite.prototype.RunStep = function(runner) {
var length = this.benchmarks.length;
var index = 0;
var suite = this;
+ var data;
// Run the setup, the actual benchmark, and the tear down in three
// separate steps to allow the framework to yield between any of the
@@ -241,12 +260,13 @@ BenchmarkSuite.prototype.RunStep = function(runner) {
function RunNextBenchmark() {
try {
- suite.RunSingleBenchmark(suite.benchmarks[index]);
+ data = suite.RunSingleBenchmark(suite.benchmarks[index], data);
} catch (e) {
suite.NotifyError(e);
return null;
}
- return RunNextTearDown;
+ // If data is null, we're done with this benchmark.
+ return (data == null) ? RunNextTearDown : RunNextBenchmark();
}
function RunNextTearDown() {
diff --git a/benchmarks/crypto.js b/benchmarks/crypto.js
index 12b88ef29..7e9829dc2 100644
--- a/benchmarks/crypto.js
+++ b/benchmarks/crypto.js
@@ -31,7 +31,7 @@
// The code has been adapted for use as a benchmark by Google.
-var Crypto = new BenchmarkSuite('Crypto', 203037, [
+var Crypto = new BenchmarkSuite('Crypto', 110465, [
new Benchmark("Encrypt", encrypt),
new Benchmark("Decrypt", decrypt)
]);
diff --git a/benchmarks/deltablue.js b/benchmarks/deltablue.js
index 7e25d2e13..4af8387a1 100644
--- a/benchmarks/deltablue.js
+++ b/benchmarks/deltablue.js
@@ -23,13 +23,13 @@
// more like a JavaScript program.
-var DeltaBlue = new BenchmarkSuite('DeltaBlue', 71104, [
+var DeltaBlue = new BenchmarkSuite('DeltaBlue', 30282, [
new Benchmark('DeltaBlue', deltaBlue)
]);
/**
- * A JavaScript implementation of the DeltaBlue constrain-solving
+ * A JavaScript implementation of the DeltaBlue constraint-solving
* algorithm, as described in:
*
* "The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver"
@@ -349,13 +349,13 @@ function BinaryConstraint(var1, var2, strength) {
BinaryConstraint.inheritsFrom(Constraint);
/**
- * Decides if this constratint can be satisfied and which way it
+ * Decides if this constraint can be satisfied and which way it
* should flow based on the relative strength of the variables related,
* and record that decision.
*/
BinaryConstraint.prototype.chooseMethod = function (mark) {
if (this.v1.mark == mark) {
- this.direction = (this.v1.mark != mark && Strength.stronger(this.strength, this.v2.walkStrength))
+ this.direction = (this.v2.mark != mark && Strength.stronger(this.strength, this.v2.walkStrength))
? Direction.FORWARD
: Direction.NONE;
}
diff --git a/benchmarks/earley-boyer.js b/benchmarks/earley-boyer.js
index 3c7f922c4..b1efe4add 100644
--- a/benchmarks/earley-boyer.js
+++ b/benchmarks/earley-boyer.js
@@ -1,7 +1,7 @@
// This file is automatically generated by scheme2js, except for the
// benchmark harness code at the beginning and end of the file.
-var EarleyBoyer = new BenchmarkSuite('EarleyBoyer', 765819, [
+var EarleyBoyer = new BenchmarkSuite('EarleyBoyer', 280581, [
new Benchmark("Earley", function () { BgL_earleyzd2benchmarkzd2(); }),
new Benchmark("Boyer", function () { BgL_nboyerzd2benchmarkzd2(); })
]);
diff --git a/benchmarks/raytrace.js b/benchmarks/raytrace.js
index da4d5924a..eaf61a123 100644
--- a/benchmarks/raytrace.js
+++ b/benchmarks/raytrace.js
@@ -8,7 +8,7 @@
// untouched. This file also contains a copy of parts of the Prototype
// JavaScript framework which is used by the ray tracer.
-var RayTrace = new BenchmarkSuite('RayTrace', 932666, [
+var RayTrace = new BenchmarkSuite('RayTrace', 533115, [
new Benchmark('RayTrace', renderScene)
]);
diff --git a/benchmarks/regexp.js b/benchmarks/regexp.js
index dce15b8e3..f9f816c7b 100644
--- a/benchmarks/regexp.js
+++ b/benchmarks/regexp.js
@@ -35,7 +35,7 @@
// letters in the data are encoded using ROT13 in a way that does not
// affect how the regexps match their input.
-var RegRxp = new BenchmarkSuite('RegExp', 995230, [
+var RegRxp = new BenchmarkSuite('RegExp', 601250, [
new Benchmark("RegExp", runRegExpBenchmark)
]);
diff --git a/benchmarks/revisions.html b/benchmarks/revisions.html
index b03aa126d..1c54f6346 100644
--- a/benchmarks/revisions.html
+++ b/benchmarks/revisions.html
@@ -22,10 +22,15 @@ the benchmark suite.
<div class="subtitle"><h3>Version 6 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v6/run.html">link</a>)</h3></div>
-<p>Removed dead code from the RayTrace benchmark and changed the Splay
-benchmark to avoid converting the same numeric key to a string over
-and over again.
-</p>
+<p>Removed dead code from the RayTrace benchmark and fixed a couple of
+typos in the DeltaBlue implementation. Changed the Splay benchmark to
+avoid converting the same numeric key to a string over and over again
+and to avoid inserting and removing the same element repeatedly thus
+increasing pressure on the memory subsystem.</p>
+
+<p>Furthermore, the benchmark runner was changed to run the benchmarks
+for at least a few times to stabilize the reported numbers on slower
+machines.</p>
<div class="subtitle"><h3>Version 5 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v5/run.html">link</a>)</h3></div>
diff --git a/benchmarks/richards.js b/benchmarks/richards.js
index c9368eff9..b5736f7a2 100644
--- a/benchmarks/richards.js
+++ b/benchmarks/richards.js
@@ -35,7 +35,7 @@
// Martin Richards.
-var Richards = new BenchmarkSuite('Richards', 34886, [
+var Richards = new BenchmarkSuite('Richards', 20687, [
new Benchmark("Richards", runRichards)
]);
diff --git a/benchmarks/run.html b/benchmarks/run.html
index 30036b784..05bfffee0 100644
--- a/benchmarks/run.html
+++ b/benchmarks/run.html
@@ -116,7 +116,7 @@ higher scores means better performance: <em>Bigger is better!</em>
<li><b>RegExp</b><br>Regular expression benchmark generated by extracting regular expression operations from 50 of the most popular web pages
(<i>1614 lines</i>).
</li>
-<li><b>Splay</b><br>Data manipulation benchmark that deals with splay trees and exercises the automatic memory management subsystem (<i>379 lines</i>).</li>
+<li><b>Splay</b><br>Data manipulation benchmark that deals with splay trees and exercises the automatic memory management subsystem (<i>394 lines</i>).</li>
</ul>
<p>
diff --git a/benchmarks/splay.js b/benchmarks/splay.js
index d8c8f0427..d63ab8b82 100644
--- a/benchmarks/splay.js
+++ b/benchmarks/splay.js
@@ -33,7 +33,7 @@
// also has to deal with a lot of changes to the large tree object
// graph.
-var Splay = new BenchmarkSuite('Splay', 126125, [
+var Splay = new BenchmarkSuite('Splay', 21915, [
new Benchmark("Splay", SplayRun, SplaySetup, SplayTearDown)
]);
@@ -231,8 +231,23 @@ SplayTree.prototype.find = function(key) {
/**
+ * @return {SplayTree.Node} Node having the maximum key value.
+ */
+SplayTree.prototype.findMax = function(opt_startNode) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ var current = opt_startNode || this.root_;
+ while (current.right) {
+ current = current.right;
+ }
+ return current;
+};
+
+
+/**
* @return {SplayTree.Node} Node having the maximum key value that
- * is less or equal to the specified key value.
+ * is less than the specified key value.
*/
SplayTree.prototype.findGreatestLessThan = function(key) {
if (this.isEmpty()) {
@@ -243,7 +258,7 @@ SplayTree.prototype.findGreatestLessThan = function(key) {
this.splay_(key);
// Now the result is either the root node or the greatest node in
// the left subtree.
- if (this.root_.key <= key) {
+ if (this.root_.key < key) {
return this.root_;
} else if (this.root_.left) {
return this.findMax(this.root_.left);