950b584dc58a928cbc7a62d1678be506a9d25f5e
[WebKit-https.git] / PerformanceTests / ARES-6 / index.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4     <link rel="stylesheet" href="styles.css">    
5 </head>
6 <body>
7     <script>
8     window.onerror = function(message, url, lineNumber)
9     {
10         document.getElementById("error").innerHTML = "ERROR: " + url + ":" + lineNumber + ": " + message;
11     }
12
13     const isInBrowser = true;
14     </script>
15     <script src="driver.js"></script>
16     <script src="results.js"></script>
17     <script src="stats.js"></script>
18     
19     <header>
20         <h1 class="logo"><img src="ARES-6.svg" title="ARES-6" alt="ARES-6"></h1>
21         <button id="trigger" class="start">
22             <span id="status">Start</span>
23         </button>
24         <div id="error" class="error"></div>
25     </header>
26
27     <main>
28     
29     <p>ARES-6 measures the execution time of JavaScript's newest features. <a href="#about">Read more details &#9658;</a></p>
30
31     <div id="about" class="flip">
32     <div class="testing">
33             
34     <div class="overall">
35         <h2>Overall</h2>
36         <div class="score">
37             <span id="Geomean">
38                 <span class="value">&#10074;&#10074;.&#10074;&#10074;</span><span class="units">ms</span>
39             </span>
40         </div>
41     </div>    
42     
43     <div class="tests">
44         
45         <div class="air test">
46             <div id="AirMessage" class="indicator">.</div>
47             <h2>Air</h2> 
48
49             <div class="score">
50                 <label>First Iteration</label>
51                 <span id="AirFirstIteration">
52                     <span class="value">&#10074;&#10074;.&#10074;&#10074;</span><span class="units">ms</span>
53                 </span>
54             </div>
55  
56             <div class="score">
57                 <label>Worst 2%</label>
58                 <span id="AirAverageWorstCase">
59                     <span class="value">&#10074;&#10074;.&#10074;&#10074;</span><span class="units">ms</span>
60                 </span>
61             </div>
62
63             <div class="score">
64                 <label>Average</label>
65                 <span id="AirSteadyState">
66                     <span class="value">&#10074;&#10074;.&#10074;&#10074;</span><span class="units">ms</span>
67                 </span>
68             </div>
69             
70         </div>
71     
72         <div class="basic test">
73             <div id="BasicMessage" class="indicator">.</div>
74             <h2>Basic</h2> 
75             
76             <div class="score">
77                 <label>First Iteration</label>
78                 <span id="BasicFirstIteration">
79                     <span class="value">&#10074;&#10074;.&#10074;&#10074;</span><span class="units">ms</span>                    
80                 </span>
81             </div>
82  
83             <div class="score">
84                 <label>Worst 2%</label>
85                 <span id="BasicAverageWorstCase">
86                     <span class="value">&#10074;&#10074;.&#10074;&#10074;</span><span class="units">ms</span>                    
87                 </span>
88             </div>
89
90             <div class="score">
91                 <label>Average</label>
92                 <span id="BasicSteadyState">
93                     <span class="value">&#10074;&#10074;.&#10074;&#10074;</span><span class="units">ms</span>                    
94                 </span>
95             </div>
96             
97         </div>
98         
99     </div>
100     </div>
101     
102     <div class="about">
103         <h2>About</h2>
104         
105         <p>ARES-6 measures the execution time of JavaScript&#8217;s newest features, including symbols, for-of, arrow functions, Map/Set/WeakMap, let/const, classes, proxies, string interpolation, destructuring, default arguments, spread, tail calls, and generators.</p>
106
107         <p>Air is an ES2015 port of the <a href="https://webkit.org/blog/5852/introducing-the-b3-jit-compiler/">WebKit B3 JIT</a>&#8217;s <a href="https://trac.webkit.org/changeset/201783"><code>Air::allocateStack</code> phase</a>. This code is a heavy user of Map, Set, classes, spread, and for-of. The benchmark runs <code>allocateStack</code> on hot function bodies from other popular JavaScript benchmarks: <code>executeIteration</code> from <a href="https://developers.google.com/octane/">Octane</a>/Gameboy, <code>gaussianBlur</code> from <a href="http://krakenbenchmark.mozilla.org">Kraken</a>, and <code>scanIdentifier</code> from Octane/Typescript. Because metacircularity, the benchmark also runs <code>allocateStack</code> on the largest hot function in Air. <a href="https://trac.webkit.org/browser/trunk/PerformanceTests/ARES-6/Air?rev=211697">Browse the source.</a></p>
108
109         <p>Basic is an <a href="https://trac.webkit.org/changeset/202446">ES2015 implementation</a> 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 was an interactive language from the start, so our implementation uses generator functions for the entire interpreter. When the BASIC program says <code>INPUT</code>, our interpreter says <code>yield</code>. This allows users of the interpreter to easily integrate it into a runloop. Basic also uses classes, Map, and WeakMap. The benchmark runs a handful of simple programs, the most complex of which finds prime numbers. <a href="https://trac.webkit.org/browser/trunk/PerformanceTests/ARES-6/Basic?rev=211697&order=name">Browse the source.</a></p>
110         
111         <p>ARES-6 rewards browsers that start up quickly and run smoothly. It's not enough to just measure the total running time of a workload. Browsers may perform differently for the same workload depending on how many times it has run. 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 more expensive than the rest. ARES-6 runs these benchmarks for 200 iterations and reports the execution time of the first iteration, the average of the worst 2% iterations, and the overall geometric mean. Each of these values is given an equal weight when computing the ovarall time. ARES-6 equally rewards fast start-up, low jank, and sophisticated adaptive optimizations for long-running code.</p>
112         
113         <p>Each ARES-6 sample has 200 iterations of Air and 200 iterations of Basic. ARES-6 runs 10 samples, and reports the average with 95% confidence intervals. Each sample runs in a fresh <code>iframe</code> to simulate some of the effects of page navigation.</p>
114
115         <p>We like making JavaScript run faster, but we didn&#8217;t have any ES2015 code to optimize. ARES-6 is a collection of sample ES2015 code written by the WebKit JavaScript team, which we used to bootstrap our ES2015 optimization efforts.</p>
116         
117         <p><a href="#">&#9700; Return to Testing</a></p>
118     </div>
119
120     </div>
121     </main>
122     
123     <iframe id="magic" frameBorder=0></iframe>
124     <script src="air_benchmark.js"></script>
125     <script src="basic_benchmark.js"></script>
126     <script src="glue.js"></script>
127         
128 </body>
129 </html>