Fix ambiguous description text in ARES-6 about the data the benchmark measures
[WebKit-https.git] / Websites / browserbench.org / ARES-6 / Babylon / benchmark.js
1 /*
2  * Copyright (C) 2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 "use strict";
27
28 let currentTime;
29 if (this.performance && performance.now)
30     currentTime = function() { return performance.now() };
31 else if (this.preciseTime)
32     currentTime = function() { return preciseTime() * 1000; };
33 else
34     currentTime = function() { return +new Date(); };
35
36 class BabylonBenchmark {
37     constructor(verbose = 0)
38     {
39         let sources = [];
40
41         const files = [
42             ["./Babylon/air-blob.js", {}]
43             , ["./Babylon/basic-blob.js", {}]
44             , ["./Babylon/inspector-blob.js", {}]
45             , ["./Babylon/babylon-blob.js", {sourceType: "module"}]
46         ];
47
48         for (let [file, options] of files) {
49             function appendSource(s) {
50                 sources.push([file, s, options]);
51             }
52
53             let s;
54             const isInBrowser = typeof window !== "undefined";
55             if (isInBrowser) {
56                 let request = new XMLHttpRequest();
57                 request.open('GET', file, false);
58                 request.send(null);
59                 if (!request.responseText.length)
60                     throw new Error("Expect non-empty sources");
61                 appendSource(request.responseText);
62             } else {
63                 appendSource(read(file));
64             }
65         }
66
67         this.sources = sources;
68     }
69
70     runIteration()
71     {
72         const Parser = parserIndexJS;
73         const { plugins } = parserIndexJS;
74         const { types : tokTypes } = tokenizerTypesJS;
75         const estreePlugin = pluginsEstreeJS;
76         const flowPlugin = pluginsFlowJS;
77         const jsxPlugin = pluginsJsxIndexJS;
78         plugins.estree = estreePlugin;
79         plugins.flow = flowPlugin;
80         plugins.jsx = jsxPlugin;
81
82         function parse(input, options) {
83             return new Parser(options, input).parse();
84         }
85
86         function parseExpression(input, options) {
87             const parser = new Parser(options, input);
88             if (parser.options.strictMode) {
89                 parser.state.strict = true;
90             }
91             return parser.getExpression();
92         }
93
94         for (let [fileName, source, options] of this.sources) {
95             parse(source, options);
96         }
97     }
98 }
99
100 function runBenchmark()
101 {
102     const verbose = 0;
103     const numIterations = 150;
104
105     let before = currentTime();
106
107     let benchmark = new Benchmark(verbose);
108
109     for (let iteration = 0; iteration < numIterations; ++iteration)
110         benchmark.runIteration();
111
112     let after = currentTime();
113     return after - before;
114 }