Add a detailed summary page for JetStream 2
authorsbarati@apple.com <sbarati@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Mar 2019 20:33:57 +0000 (20:33 +0000)
committersbarati@apple.com <sbarati@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Mar 2019 20:33:57 +0000 (20:33 +0000)
https://bugs.webkit.org/show_bug.cgi?id=195014

Rubber-stamped by Darin Adler.

* JetStream2/JetStream.css:
(a:link, a:visited):
* JetStream2/in-depth.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242373 268f45cc-cd09-0410-ab3c-d52691b4dbfc

PerformanceTests/ChangeLog
PerformanceTests/JetStream2/JetStream.css
PerformanceTests/JetStream2/in-depth.html [new file with mode: 0644]

index d6d6313..ef440de 100644 (file)
@@ -1,3 +1,14 @@
+2019-03-04  Saam Barati  <sbarati@apple.com>
+
+        Add a detailed summary page for JetStream 2
+        https://bugs.webkit.org/show_bug.cgi?id=195014
+
+        Rubber-stamped by Darin Adler.
+
+        * JetStream2/JetStream.css:
+        (a:link, a:visited):
+        * JetStream2/in-depth.html: Added.
+
 2019-02-08  Saam barati  <sbarati@apple.com>
 
         Update JetStream2 CLI to not print "ms" since we now just print the score values
index 50f8d3d..dfe346a 100644 (file)
@@ -167,7 +167,7 @@ dd {
 }
 
 a:link, a:visited {
-    color: black;
+    color: blue;
     text-decoration: none;
 }
 
diff --git a/PerformanceTests/JetStream2/in-depth.html b/PerformanceTests/JetStream2/in-depth.html
new file mode 100644 (file)
index 0000000..7443f6d
--- /dev/null
@@ -0,0 +1,688 @@
+<html>
+<head>
+    <title>JetStream 2 &mdash; In Depth Analysis</title>
+    <link rel="stylesheet" href="JetStream.css">
+</head>
+<body>
+<main>
+    <a href="index.html">
+        <h1> JetStream 2 </h1>
+    </a>
+
+    <h1>In Depth Analysis</h1>
+
+    <p>
+    JetStream 2 combines together a variety of JavaScript and Web Assembly benchmarks, covering a variety of
+    advanced workloads and programming techniques, and reports a single score that
+    balances them using a geometric mean.
+    </p>
+
+    <p>
+    Each benchmark measures a distinct workload, and no single optimization
+    technique is sufficient to speed up all benchmarks. Some benchmarks demonstrate tradeoffs, and
+    aggressive or specialized optimizations for one benchmark might make another benchmark slower.
+    JetStream 2 rewards browsers that start up quickly, execute code quickly, and continue running smoothly.
+    </p>
+    
+    <p>
+    Each benchmark in JetStream 2 computes its own individual score. JetStream 2 weighs each
+    benchmark equally, taking the geometric mean over each individual benchmark's score to compute
+    the overall JetStream 2 score.
+    </p>
+
+    <p>
+    It's not enough to just measure the total running time of a workload.
+    Browsers may perform differently for the same JavaScript workload depending on how many times it
+    has run. For example, garbage collection runs periodically, making some iterations take longer than
+    others. Code that runs repeatedly gets optimized by the browser, so the first iteration
+    of any workload is usually more expensive than the rest.
+    </p>
+
+    <p>
+    For most of the JavaScript benchmarks in JetStream 2, individual scores
+    equally weigh startup performance, worst case performance, and average case
+    performance. These three metrics are crucial to running performant JavaScript
+    in the browser. Fast startup times lead browsers to loading pages more quickly. Good
+    worst case performance ensures web applications can run without hiccups. Fast average
+    case performance makes it so that the most advanced web applications can run at all.
+    </p>
+    
+    <p>
+    For JetStream 2's Web Assembly benchmarks, individual scores equally weigh startup time and
+    total execution time. An important component of JetStream 1 were the asm.js subset of benchmarks. With the release
+    of Web Assembly, the importance of asm.js has lessened since many users of asm.js are
+    now using Web Assembly. JetStream 2 has converted many of the asm.js benchmarks from
+    JetStream 1 into Web Assembly.
+    </p>
+    
+    <p>
+    All but one of JetStream'2 JavaScript benchmarks run for N iterations, where
+    N is usually 120. JetStream 2 reports the startup score as the time it takes to run the first iteration.
+    The worst case score is the average of the worst M iterations, excluding the first iteration.
+    M is always less than N, and is usually 4. The average case score is the average
+    of all but the first iteration. These three scores are weighed equally using the geometric
+    mean.
+    </p>
+
+    <p>
+    JetStream 2 also includes a JavaScript benchmark named WSL. WSL is an implementation of a
+    GPU shading language written in JavaScript. WSL does not use the above mechanism for scoring
+    because it has a long running time. Instead, the WSL benchmark computes its score as the
+    geometric mean over two metrics: the time it takes to compile the WSL standard library, and the time
+    it takes to run through the WSL specification test suite.
+    </p>
+
+    <p>
+    JetStream 2 includes parts of these benchmark suites that came before it: <a href="https://webkit.org/perf/sunspider/sunspider.html">SunSpider</a>,
+    <a href="https://developers.google.com/octane/">Octane 2</a>, <a href="https://browserbench.org/JetStream/">JetStream 1</a>,
+    <a href="https://browserbench.org/ARES-6/">ARES-6</a>, and <a href="https://v8.github.io/web-tooling-benchmark/">Web Tooling Benchmark</a>.
+    JetStream 2 also includes new benchmarks inspired by <a href="https://krakenbenchmark.mozilla.org">Kraken</a>.
+    JetStream 2 also includes a new set of benchmarks that measure the performance of Web Assembly, Web Workers,
+    Promises, async iteration, unicode regular expressions, and JavaScript parsing.
+    </p>
+    
+    <p>
+    Note that scores from JetStream 2 are not comparable to scores to other versions
+    of any JetStream benchmark.
+    </p>
+
+    <h3>
+    JetStream 2 has 64 subtests:
+    </h3>
+    
+    <dl>
+
+    <a name="WSL">
+    <dt>WSL</dt>
+    <dd>
+     WSL is an implementation of a GPU shading language written in JavaScript. 
+     WSL measures the time it takes to compile the WSL standard library and the time
+     it takes to run through the WSL specification test suite.
+     Source code: <a href="WSL">WSL</a>
+    </dd>
+
+    <a name="UniPoker">
+    <dt>UniPoker</dt>
+    <dd>
+     UniPoker is a 5 card stud poker simulation using the Unicode playing card code points, U+1F0A1..U+1F0DE,
+     as the card representation in code. Scoring of hands is done with three regular expressions, one to check
+     for a flush, one to check for straights, and one to check for pairs, three of a kind, and four of a kind.
+     Source code: <a href="RexBench/UniPoker/poker.js">poker.js</a>
+    </dd>
+
+    <a name="uglify-js-wtb">
+    <dt>uglify-js-wtb</dt>
+    <dd>
+     <a href="https://github.com/mishoo/UglifyJS2">UglifyJS</a> is a JavaScript parser, minifier, compressor, and beautifier toolkit. It is commonly
+     used to minimize JavaScript bundles.
+     This benchmark runs UglifyJS on test JavaScript programs.
+     This benchmark stresses string manipulation and regular expression performance.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">uglify.js</a>
+    </dd>
+
+    <a name="typescript">
+    <dt>typescript</dt>
+    <dd>
+     Tests how quickly Microsoft's <a href="http://www.typescriptlang.org">TypeScript</a> compiler can
+     compile itself. More than anything else, this tests how quickly a JavaScript runtime can optimize
+     a large pile of code.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/typescript.js">typescript.js</a>
+    </dd>
+
+    <a name="tsf-wasm">
+    <dt>tsf-wasm</dt>
+    <dd>
+     Runs Filip Pizlo's &mdash; of the WebKit team &mdash; implementation of a <a href="http://www.filpizlo.com/tsf/"> Typed Stream Format </a>
+     in Web Assembly. The original code is compiled from C to Web Assembly using <a href="https://emscripten.org">Emscripten</a>.
+     Source code: <a href="wasm/TSF">TSF</a>
+    </dd>
+    
+    <a name="tagcloud-SP">
+    <dt>tagcloud-SP</dt>
+    <dd>
+     Parses JSON and generates markup for a <a href="http://en.wikipedia.org/wiki/Tag_cloud">tag
+     cloud</a> view of the data. Written by Maciej Stachowiak of the WebKit team. Exercises string
+     parsing and manipulation. A similar version of this benchmark was originally published in SunSpider.
+     Source code: <a href="SunSpider/tagcloud.js">tagcloud.js</a>
+    </dd>
+
+    <a name="string-unpack-code-SP">
+    <dt>string-unpack-code-SP</dt>
+    <dd>
+     This benchmark unpacks various minified JavaScript libraries. It stresses the speed of various string manipulation
+     operations.
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/string-unpack-code.js">string-unpack-code.js</a>
+    </dd>
+
+    <a name="stanford-crypto-sha256">
+    <dt>stanford-crypto-sha256</dt>
+    <dd>
+     Measures the performance of the <a href="https://en.wikipedia.org/wiki/SHA-2">SHA256</a> hashing algorithm as implemented by the <a href="https://crypto.stanford.edu/sjcl/">Stanford JavaScript Crypto Library</a>. This benchmark stresses numeric analysis and array access.
+     This benchmark was inspired by a similar benchmark in the Kraken benchmark suite.
+     Source code: <a href="SeaMonster/stanford-crypto-sha256.js">stanford-crypto-sha256.js</a>
+    </dd>
+
+    <a name="stanford-crypto-pbkdf2">
+    <dt>stanford-crypto-pbkdf2</dt>
+    <dd>
+     Measures the performance of the <a href="https://en.wikipedia.org/wiki/PBKDF2">PBKDF2</a> hashing algorithm as implemented by the <a href="https://crypto.stanford.edu/sjcl/">Stanford JavaScript Crypto Library</a>. This benchmark stresses numeric analysis and array access.
+     This benchmark was inspired by a similar benchmark in the Kraken benchmark suite.
+     Source code: <a href="SeaMonster/stanford-crypto-pbkdf2.js">stanford-crypto-pbkdf2.js</a>
+    </dd>
+
+    <a name="stanford-crypto-aes">
+    <dt>stanford-crypto-aes</dt>
+    <dd>
+    Measures the performance of the <a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES</a> hashing algorithm as implemented by the <a href="https://crypto.stanford.edu/sjcl/">Stanford JavaScript Crypto Library</a>. This benchmark stresses numeric analysis and array access.
+     This benchmark was inspired by a similar benchmark in the Kraken benchmark suite.
+     Source code: <a href="SeaMonster/stanford-crypto-aes.js">stanford-crypto-aes.js</a>
+    </dd>
+
+    <a name="splay">
+    <dt>splay</dt>
+    <dd>
+      Tests the manipulation of <a href="http://en.wikipedia.org/wiki/Splay_tree">splay trees</a>
+      represented using plain JavaScript objects. This benchmark stresses the performance of the garbage collector.
+      A similar version of this benchmark was previously published in Octane version 2.
+      Source code: <a href="Octane/splay.js">splay.js</a>
+    </dd>
+    
+    <a name="segmentation">
+    <dt>segmentation</dt>
+    <dd>
+     Uses Web Workers to parallelize the computation of a <a href="https://en.wikipedia.org/wiki/Time-series_segmentation">
+     time series segmentation</a> algorithm over a sample data set. This code is adapted from an algorithm used in the <a href="https://perf.webkit.org/v3/">
+     WebKit performance dashboard.</a>
+     Source code: <a href="worker/segmentation.js">segmentation.js</a>
+    </dd>
+
+    <a name="richards">
+    <dt>richards</dt>
+    <dd>
+     Martin Richard's <a href="http://www.cl.cam.ac.uk/~mr10/Bench.html">system language
+     benchmark</a> ported to JavaScript. Tests object property access performance.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/richards.js">richards.js</a>
+    </dd>
+
+    <a name="richards-wasm">
+    <dt>richards-wasm</dt>
+    <dd>
+     Martin Richard's <a href="http://www.cl.cam.ac.uk/~mr10/Bench.html">system language
+     benchmark</a> compiled to a hybrid of Web Assembly and JavaScript. It stresses how quickly
+     JavaScript can call into Web Assembly code.
+     Source code: <a href="wasm/richards.c">richards.c</a>, <a href="wasm/richards.js">richards.js</a>
+    </dd>
+
+    <a name="regexp">
+    <dt>regexp</dt>
+    <dd>
+     Collection of regular expressions found by the V8 team in 2010, curated into a benchmark.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/regexp.js">regexp.js</a>
+    </dd>
+
+    <a name="regex-dna-SP">
+    <dt>regex-dna-SP</dt>
+    <dd>
+     Regular-expression-based solution to DNA manipulation from
+     <a href="https://en.wikipedia.org/wiki/The_Computer_Language_Benchmarks_Game">The Great Computer Language Shootout</a>,
+     contributed by Jesse Millikan.
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/regex-dna.js">regex-dna.js</a>
+    </dd>
+
+    <a name="raytrace">
+    <dt>raytrace</dt>
+    <dd>
+    <a href="https://en.wikipedia.org/wiki/Ray_tracing_(graphics)">Ray tracer</a> written in JavaScript using prototype.js. Tests object construction performance
+     and floating point math.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/raytrace.js">raytrace.js</a>
+    </dd>
+
+    <a name="quicksort-wasm">
+    <dt>quicksort-wasm</dt>
+    <dd>
+     Quicksort benchmark, compiled to Web Assembly with <a href="https://emscripten.org">Emscripten</a>.
+     The original C version of this benchmark was previously published in the LLVM test suite.
+     Source code: <a href="wasm/quicksort.c">quicksort.c</a>, <a href="wasm/quicksort.js">quicksort.js</a>
+    </dd>
+    
+    <a name="prepack-wtb">
+    <dt>prepack-wtb</dt>
+    <dd>
+    <a href="https://prepack.io">Prepack</a> is a tool that optimizes JavaScript source code by performing computations at compile
+     time instead of run time where possible.
+     This benchmark runs Prepack on test JavaScript programs.
+     This benchmark stresses string manipulation and regular expression performance.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">prepack.js</a>
+    </dd>
+
+    <a name="pdfjs">
+    <dt>pdfjs</dt>
+    <dd>
+     Mozilla's <a href="http://mozilla.github.io/pdf.js/">PDF reader written in JavaScript</a>.
+     This benchmark emphasizes array manipulation and bit operations.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/pdfjs.js">pdfjs.js</a>
+    </dd>
+
+    <a name="OfflineAssembler">
+    <dt>OfflineAssembler</dt>
+    <dd>
+    Offline Assembler is the lexer, parser, and AST layer of the offline assembler for <a href="https://trac.webkit.org/wiki/JavaScriptCore">JavaScriptCore</a>. 
+     It has been ported to JavaScript from the original Ruby implementation. This test stresses regular expression
+     performance.
+     Source code: <a href="RexBench/OfflineAssembler/parser.js">OfflineAssembler.js</a>
+    </dd>
+    
+    <a name="octane-zlib">
+    <dt>octane-zlib</dt>
+    <dd>
+     A benchmark based on compiling <a href="http://zlib.net">zlib</a> to JavaScript using
+     <a href="https://emscripten.org">Emscripten</a>. Based on the
+     <a href="https://github.com/kripken/emscripten/tree/master/tests/zlib">zlib emscripten test</a>
+     but modified to restrict code caching opportunities. 
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/zlib.js">zlib.js</a>
+    </dd>
+
+    <a name="octane-code-load">
+    <dt>octane-code-load</dt>
+    <dd>
+     Test of code load speed of the jQuery and Closure libraries. Because this test allows
+     caching, this is representative of revisiting the same website. 
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/code-first-load.js">code-load.js</a>
+    </dd>
+    
+    <a name="navier-stokes">
+    <dt>navier-stokes</dt>
+    <dd>
+     Fluid simulation written by <a href="https://nerget.com">Oliver Hunt</a>. Emphasizes floating point array performance.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/navier-stokes.js">navier-stokes.js</a>
+    </dd>
+
+    <a name="n-body-SP">
+    <dt>n-body-SP</dt>
+    <dd>
+     Classic solar system simulation benchmark from
+     <a href="https://en.wikipedia.org/wiki/The_Computer_Language_Benchmarks_Game">The Great Computer Language Shootout</a>,
+     contributed by Isaac Guy. Tests math and object access performance. 
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/n-body.js">n-body.js</a>
+    </dd>
+    
+    <a name="multi-inspector-code-load">
+    <dt>multi-inspector-code-load</dt>
+    <dd>
+     Measures the repeated parsing of a modern JavaScript code base: WebKit's Web Inspector.
+     Because this test allows caching, this is representative of revisiting the same website.
+     Source code: <a href="code-load/code-multi-load.js">code-multi-load.js</a>
+    </dd>
+
+    <a name="ML">
+    <dt>ML</dt>
+    <dd>
+     ML is an implementation of a <a href="https://en.wikipedia.org/wiki/Feedforward_neural_network"> feedforward neural network.</a>
+     The benchmark trains several networks using different <a href="https://en.wikipedia.org/wiki/Activation_function">activation functions</a>
+     and several sample data sets. ML makes heavy use of classes. It relies on the ml-matrix library and does non-trivial matrix math.
+     This benchmark was previously published in ARES-6.
+     Source code: <a href="ARES-6/ml">ML</a>
+    </dd>
+    
+    <a name="mandreel">
+    <dt>mandreel</dt>
+    <dd>
+     Tests the <a href="http://bulletphysics.org/">Bullet</a> physics engine.
+     The physics engine is compiled to JavaScript with <a href="http://www.mandreel.com">Mandreel</a>.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/mandreel.js">mandreel.js</a>
+    </dd>
+
+    <a name="lebab-wtb">
+    <dt>lebab-wtb</dt>
+    <dd>
+     <a href="https://github.com/lebab/lebab">Lebab</a> transpiles ES5 code into ES6/ES7.
+     This benchmark runs Lebab on test JavaScript programs.
+     This benchmark stresses string manipulation and regular expression performance.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">lebab.js</a>
+    </dd>
+
+    <a name="json-stringify-inspector">
+    <dt>json-stringify-inspector</dt>
+    <dd>
+     Measures JSON.stringify performance on a set of objects that WebKit's Web Inspector
+     stringifies when communicating between the UI and web pages.
+     This benchmark was inspired by a similar benchmark in the Kraken benchmark suite.
+     Source code: <a href="SeaMonster/json-stringify-inspector.js">json-stringify-inspector.js</a>
+    </dd>
+
+    <a name="json-parse-inspector">
+    <dt>json-parse-inspector</dt>
+    <dd>
+     Measures JSON.parse performance on a set of objects that WebKit's Web Inspector
+     parses when communicating between the UI and web pages.
+     This benchmark was inspired by a similar benchmark in the Kraken benchmark suite.
+     Source code: <a href="SeaMonster/json-parse-inspector.js">json-parse-inspector.js</a>
+    </dd>
+
+    <a name="jshint-wtb">
+    <dt>jshint-wtb</dt>
+    <dd>
+     <a href="https://jshint.com">JSHint</a> is a static analysis tool that warns about errors
+    and potential problems in JavaScript programs.
+     This benchmark runs JSHint on test JavaScript programs.
+     This benchmark stresses string manipulation and regular expression performance.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">jshint.js</a>
+    </dd>
+
+    <a name="HashSet-wasm">
+    <dt>HashSet-wasm</dt>
+    <dd>
+     A Web Assembly benchmark replaying a set of hash table operations performed in WebKit when loading
+     a web page. This benchmark was compiled from C++ to Web Assembly using <a href="https://emscripten.org">Emscripten</a>.
+     Source code: <a href="wasm/HashSet.cpp">HashSet.cpp</a>, <a href="wasm/HashSet.js">HashSet.js</a>
+    </dd>
+
+    <a name="hash-map">
+    <dt>hash-map</dt>
+    <dd>
+     Apache Harmony java.util.HashMap implementation ported to JavaScript and benchmarked by
+     doing hash table insertions, queries, and then iterating the associated entrySet. Tests
+     object-oriented JavaScript idioms and object construction. A similar JavaScript version
+     of this benchmark was originally published as part of the WebKit test suite.
+     Source code: <a href="simple/hash-map.js">hash-map.js</a>
+    </dd>
+    
+    <a name="gcc-loops-wasm">
+    <dt>gcc-loops-wasm</dt>
+    <dd>
+     Example loops used to tune the GCC and LLVM vectorizers, compiled to Web Assembly with
+     <a href="https://emscripten.org">Emscripten</a>. The original C++ version of this benchmark was previously published in the LLVM test suite.
+     Source code: <a href="wasm/gcc-loops.cpp">gcc-loops.cpp</a>, <a href="wasm/gcc-loops.js">gcc-loops.js</a>
+    </dd>
+    
+    <a name="gbemu">
+    <dt>gbemu</dt>
+    <dd>
+     Gameboy emulator written in JavaScript. Tests typed array and
+     property access performance. 
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/gbemu-part1.js">gbemu-part1.js</a>, <a href="Octane/gbemu-part2.js">gbemu-part2.js</a>
+    </dd>
+    
+    <a name="gaussian-blur">
+    <dt>gaussian-blur</dt>
+    <dd>
+     Tests the performance of a JavaScript implementation of <a href="https://en.wikipedia.org/wiki/Gaussian_blur">gaussian
+     blur</a> on a test image. Tests numeric analysis speed and uses typed arrays.
+     This benchmark was inspired by a similar benchmark in the Kraken benchmark suite.
+     Source code: <a href="SeaMonster/gaussian-blur.js">gaussian-blur.js</a>
+    </dd>
+
+    <a name="float-mm.c">
+    <dt>float-mm.c</dt>
+    <dd>
+     Floating point matrix multiply benchmark, compiled to JavaScript with <a href="https://emscripten.org">Emscripten</a>.
+     The original C version of this benchmark was previously published in the LLVM test suite.
+     Source code: <a href="simple/float-mm.c">float-mm.c</a>, <a href="simple/float-mm.c.js">float-mm.c.js</a>
+    </dd>
+
+    <a name="FlightPlanner">
+    <dt>FlightPlanner</dt>
+    <dd>
+      Flight Planner is a benchmark taken from a flight management web application.
+      Flight Planner parses aircraft flight plans and computes distance, courses, and elapsed times for legs of flight plans.
+      It uses FAA data for airports, navigation aids, and airways. The flight management app was originally written to help
+      compete in a flying proficiency event. It stresses regular expression performance.
+     Source code: <a href="RexBench/FlightPlanner/flight_planner.js">flight_planner.js</a>
+    </dd>
+
+    <a name="first-inspector-code-load">
+    <dt>first-inspector-code-load</dt>
+    <dd>
+     Measures the first-time parsing of a modern JavaScript code base: WebKit's Web Inspector.
+     This models the parsing time of visiting a web site for the first time.
+     Source code: <a href="code-load/code-first-load.js">code-first-load.js</a>
+    </dd>
+
+    <a name="espree-wtb">
+    <dt>espree-wtb</dt>
+    <dd>
+    <a href="https://github.com/eslint/espree">Espree</a> is a JavaScript parser written in JavaScript.
+     This benchmark runs Espree on test JavaScript programs.
+     This benchmark stresses string manipulation and regular expression performance.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">espree.js</a>
+    </dd>
+
+    <a name="earley-boyer">
+    <dt>earley-boyer</dt>
+    <dd>
+     Tests two classic Scheme benchmarks translated to JavaScript using scheme2js. The first
+     benchmark is Earley, is a chart parser algorithm created by Jay Earley. The second is
+     Boyer, a logic programming benchmark by Bob Boyer. Measures variadic functions and object
+     construction.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/earley-boyer.js">earley-boyer.js</a>
+    </dd>
+    
+    <a name="delta-blue">
+    <dt>delta-blue</dt>
+    <dd>
+     The classic DeltaBlue benchmark derived from a Smalltalk implementation by Maloney and
+     Wolczko. Tests devirtualization of JavaScript code that uses an idiomatic class hierarchy
+     construction.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/deltablue.js">deltablue.js</a>
+    </dd>
+
+    <a name="date-format-xparb-SP">
+    <dt>date-format-xparb-SP</dt>
+    <dd>
+     Sophisticated date formatting and parsing library test, based on code by Barin Schwartz.
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/date-format-xparb.js">date-format-xparb.js</a>
+    </dd>
+    
+    <a name="date-format-tofte-SP">
+    <dt>date-format-tofte-SP</dt>
+    <dd>
+     Date and time formatting test, based on code by Svend Tofte. Involves an interesting use
+     of <code>eval</code> and also covers string manipulation and JavaScript library functions.
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/date-format-tofte.js">date-format-tofte.js</a>
+    </dd>
+    
+    <a name="crypto-sha1-SP">
+    <dt>crypto-sha1-SP</dt>
+    <dd>
+     <a href="http://en.wikipedia.org/wiki/Sha1">SHA-1</a> implementation in JavaScript by
+     Paul Johnston and others. Tests interesting integer math idioms. 
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/crypto-sha1.js">crypto-sha1.js</a>
+    </dd>
+    
+    <a name="crypto-md5-SP">
+    <dt>crypto-md5-SP</dt>
+    <dd>
+     <a href="http://en.wikipedia.org/wiki/Md5">MD5</a> implementation in JavaScript by
+     Paul Johnston and others. Tests interesting integer math idioms. 
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/crypto-md5.js">crypto-md5.js</a>
+    </dd>
+    
+    <a name="crypto-aes-SP">
+    <dt>crypto-aes-SP</dt>
+    <dd>
+     <a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard"> AES</a> implementation
+     in JavaScript by Chris Veness. A newer version can be
+     found <a href="http://www.movable-type.co.uk/scripts/aes.html">here</a>. Tests integer math.
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/crypto-aes.js">crypto-aes.js</a>
+    </dd>
+    
+    <a name="crypto">
+    <dt>crypto</dt>
+    <dd>
+     RSA cypher implemented in JavaScript by Tom Wu. Tests integer math and arrays.
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/crypto.js">crypto.js</a>
+    </dd>
+    
+    <a name="coffeescript-wtb">
+    <dt>coffeescript-wtb</dt>
+    <dd>
+     <a href="http://coffeescript.org/">CoffeeScript</a> is a programming language that attempts to expose the
+     good parts of JavaScript in a simple way.
+     This benchmark tests the CoffeeScript compiler on test programs.
+     This benchmark stresses string manipulation and regular expression performance.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">coffeescript.js</a>
+    </dd>
+
+    <a name="chai-wtb">
+    <dt>chai-wtb</dt>
+    <dd>
+     <a href="http://chaijs.com/">Chai</a> is a <a href="https://codeutopia.net/blog/2015/03/01/unit-testing-tdd-and-bdd/">BDD / TDD</a> assertion library for
+     node.js and the browser. It is commonly used to write unit and integration tests.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">chai.js</a>
+    </dd>
+    
+    <a name="cdjs">
+    <dt>cdjs</dt>
+    <dd>
+     JavaScript implementation of the <a href="https://www.cs.purdue.edu/sss/projects/cdx/">CDx collision detection
+     benchmark</a>. Measures the performance of over 200 collision detection runs.
+     Source code: <a href="cdjs">cdjs</a>
+    </dd>
+    
+    <a name="box2d">
+    <dt>box2d</dt>
+    <dd>
+     The Box2D physics engine <a href="https://code.google.com/p/box2dweb/">ported to JavaScript</a>. Tests floating
+     point math and data structures. 
+     A similar version of this benchmark was previously published in Octane version 2.
+     Source code: <a href="Octane/box2d.js">box2d.js</a>
+    </dd>
+
+    <a name="bomb-workers">
+    <dt>bomb-workers</dt>
+    <dd>
+     Tests running various subtests of the SunSpider benchmark in parallel using Web Workers.
+     Stresses the browser's ability to run JavaScript code in parallel.
+     Source code: <a href="worker/bomb.js">bomb.js</a>
+    </dd>
+
+    <a name="Basic">
+    <dt>Basic</dt>
+    <dd>
+     Basic is an ES2015 implementation of the <a href="http://www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-55,%201st%20Edition,%20January%201978.pdf">ECMA-55 BASIC standard</a>. 
+     Basic stresses performance of generator functions, classes, Map, and WeakMap.
+     The benchmark runs a handful of simple programs, the most complex of which finds prime numbers.
+     This benchmark was previously published in ARES-6.
+     Source code: <a href="ARES-6/Basic">Basic</a>
+    </dd>
+
+    <a name="base64-SP">
+    <dt>base64-SP</dt>
+    <dd>
+     Base64 encoder/decoder written in JavaScript, originally from the Mozilla XML-RPC client component.
+     Tests string manipulation. 
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/base64.js">base64.js</a>
+    </dd>
+
+    <a name="babylon-wtb">
+    <dt>babylon-wtb</dt>
+    <dd>
+     <a href="https://github.com/babel/babel/tree/master/packages/babel-parser">Babylon</a> is the frontend for the Babel transpiler.
+     It is a JavaScript parser written in JavaScript. It computes the Abstract Syntax Tree of the input JavaScript program.
+     This benchmark runs Babylon on test JavaScript programs.
+     This benchmark stresses string manipulation and regular expression performance.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">babylon.js</a>
+    </dd>
+
+    <a name="Babylon">
+    <dt>Babylon</dt>
+    <dd>
+     <a href="https://github.com/babel/babylon">Babylon</a> is an implementation of a parser for the JavaScript language.
+     Babylon is the parser used in the <a href="https://babeljs.io/">Babel</a> JavaScript transpiler. The benchmark runs the
+     Babylon parser on four different JavaScript sources. Babylon makes heavy use of classes, does non trivial string processing,
+     and creates non-trivial object graphs.
+     This benchmark was previously published in ARES-6.
+     Source code: <a href="ARES-6/Babylon">Babylon</a>
+    </dd>
+    
+    <a name="async-fs">
+    <dt>async-fs</dt>
+    <dd>
+     This is an implementation of a mock file system that stresses the performance of DataView, Promises, and async
+     iteration. The benchmark simulates adding and removing files, and swapping the byte order of existing files.
+     Source code: <a href="simple/file-system.js">async-fs.js</a>
+    </dd>
+
+    <a name="Air">
+    <dt>Air</dt>
+    <dd>
+     Air is an ES2015 port of the <a href="https://webkit.org/blog/5852/introducing-the-b3-jit-compiler/">WebKit B3 JIT</a>'s <a href="https://trac.webkit.org/changeset/201783">Air::allocateStack phase</a>.
+     This code is a heavy user of Map, Set, classes, spread, and for-of. The benchmark runs allocateStack on hot function
+     bodies from other popular JavaScript benchmarks. This benchmark was previously published in ARES-6.
+     Source code: <a href="ARES-6/Air">Air</a>
+    </dd>
+
+    <a name="ai-astar">
+    <dt>ai-astar</dt>
+    <dd>
+     This benchmark runs a JavaScript implementation of the <a href="https://en.wikipedia.org/wiki/A*_search_algorithm">A*</a> search algorithm
+     written by <a href="https://briangrinstead.com/blog/">Brian Grinstead</a>.
+     This benchmark was inspired by a similar benchmark in the Kraken benchmark suite.
+     Source code: <a href="SeaMonster/ai-astar.js">ai-astar.js</a>
+    </dd>
+
+    <a name="acorn-wtb">
+    <dt>acorn-wtb</dt>
+    <dd>
+     <a href="https://github.com/ternjs/acorn">Acorn</a> is a JavaScript parser written in JavaScript.
+     This benchmark runs Acorn on test JavaScript programs.
+     This benchmark stresses string manipulation and regular expression performance.
+     A similar version of this benchmark was previously published in the Web Tooling Benchmark.
+     Source code: <a href="web-tooling-benchmark/browser.js">acorn.js</a>
+    </dd>
+    
+    <a name="3d-raytrace-SP">
+    <dt>3d-raytrace-SP</dt>
+    <dd>
+    Simple raytracer written by <a href="https://nerget.com">Oliver Hunt</a>. 
+     Tests arrays and floating-point math in relatively short-running code.
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/3d-raytrace.js">3d-raytrace.js</a>
+    </dd>
+    
+    <a name="3d-cube-SP">
+    <dt>3d-cube-SP</dt>
+    <dd>
+     3D cube rotation benchmark by Simon Speich. The original can be found
+     on <a href="http://www.speich.net/computer/moztesting/3d.htm">Simon's
+     web page</a>. Tests arrays and floating-point math in relatively
+     short-running code.
+     A similar version of this benchmark was previously published in SunSpider.
+     Source code: <a href="SunSpider/3d-cube.js">3d-cube.js</a>
+    </dd>
+
+    </dl>
+</main>
+</body>
+</html>
+