V8 Benchmark Suite
==================

This is the V8 benchmark suite: A collection of pure JavaScript
benchmarks that we have used to tune V8. The licenses for the
individual benchmarks are included in the JavaScript files.

In addition to the benchmarks, the suite consists of the benchmark
framework (base.js), which must be loaded before any of the individual
benchmark files, and two benchmark runners: An HTML version (run.html)
and a standalone JavaScript version (run.js).


Changes From Version 1 To Version 2
===================================

For version 2 the crypto benchmark was fixed.  Previously, the
decryption stage was given plaintext as input, which resulted in an
error.  Now, the decryption stage is given the output of the
encryption stage as input.  The result is checked against the original
plaintext.  For this to give the correct results the crypto objects
are reset for each iteration of the benchmark.  In addition, the size
of the plain text has been increased a little and the use of
Math.random() and new Date() to build an RNG pool has been removed.

Other benchmarks were fixed to do elementary verification of the
results of their calculations.  This is to avoid accidentally
obtaining scores that are the result of an incorrect JavaScript engine
optimization.


Changes From Version 2 To Version 3
===================================

Version 3 adds a new benchmark, RegExp.  The RegExp benchmark is
generated by loading 50 of the most popular pages on the web and
logging all regexp operations performed.  Each operation is given a
weight that is calculated from an estimate of the popularity of the
pages where it occurs and the number of times it is executed while
loading each page.  Finally the literal letters in the data are
encoded using ROT13 in a way that does not affect how the regexps
match their input.


Changes from Version 3 to Version 4
===================================

The Splay benchmark is a newcomer in version 4.  It manipulates a
splay tree by adding and removing data nodes, thus exercising the
memory management subsystem of the JavaScript engine.

Furthermore, all the unused parts of the Prototype library were
removed from the RayTrace benchmark. This does not affect the running
of the benchmark.


Changes from Version 4 to Version 5
===================================

Removed duplicate line in random seed code, and changed the name of
the Object.prototype.inherits function in the DeltaBlue benchmark to
inheritsFrom to avoid name clashes when running in Chromium with
extensions enabled.


Changes from Version 5 to Version 6
===================================

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. Changed the RegExp
benchmark to exercise the regular expression engine on different
input strings.

Furthermore, the benchmark runner was changed to run the benchmarks
for at least a few times to stabilize the reported numbers on slower
machines.


Changes from Version 6 to Version 7
===================================

Added the Navier-Stokes benchmark, a 2D differential equation solver
that stresses arithmetic computations on double arrays.
