Make JetStream 2
[WebKit-https.git] / PerformanceTests / JetStream2 / cdjs / benchmark.js
1 // Copyright (c) 2001-2010, Purdue University. All rights reserved.
2 // Copyright (C) 2015-2016 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 are met:
6 //  * Redistributions of source code must retain the above copyright
7 //    notice, this list of conditions and the following disclaimer.
8 //  * Redistributions in binary form must reproduce the above copyright
9 //    notice, this list of conditions and the following disclaimer in the
10 //    documentation and/or other materials provided with the distribution.
11 //  * Neither the name of the Purdue University nor the
12 //    names of its contributors may be used to endorse or promote products
13 //    derived from this software without specific prior written permission.
14 // 
15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
19 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26 function benchmarkImpl(configuration) {
27     var verbosity = configuration.verbosity;
28     var numAircraft = configuration.numAircraft;
29     var numFrames = configuration.numFrames;
30     var expectedCollisions = configuration.expectedCollisions;
31     var exclude = configuration.exclude;
32
33     var simulator = new Simulator(numAircraft);
34     var detector = new CollisionDetector();
35     var lastTime = currentTime();
36     var results = [];
37     for (var i = 0; i < numFrames; ++i) {
38         var time = i / 10;
39         
40         var collisions = detector.handleNewFrame(simulator.simulate(time));
41         
42         var before = lastTime;
43         var after = currentTime();
44         lastTime = after;
45         var result = {
46             time: after - before,
47             numCollisions: collisions.length
48         };
49         if (verbosity >= 2)
50             print("CDjs: " + result.time);
51         if (verbosity >= 3)
52             result.collisions = collisions;
53         results.push(result);
54     }
55     
56     results.splice(0, exclude);
57
58     if (verbosity >= 1) {
59         for (var i = 0; i < results.length; ++i) {
60             var string = "Frame " + i + ": " + results[i].time + " ms.";
61             if (results[i].numCollisions)
62                 string += " (" + results[i].numCollisions + " collisions.)";
63             print(string);
64             if (verbosity >= 2 && results[i].collisions.length)
65                 print("    Collisions: " + results[i].collisions);
66         }
67     }
68
69     // Check results.
70     var actualCollisions = 0;
71     for (var i = 0; i < results.length; ++i)
72         actualCollisions += results[i].numCollisions;
73     if (actualCollisions != expectedCollisions) {
74         throw new Error("Bad number of collisions: " + actualCollisions + " (expected " + expectedCollisions + ")");
75     }
76 }
77
78 function benchmark() {
79     return benchmarkImpl({
80         verbosity: 0,
81         numAircraft: 1000,
82         numFrames: 18,
83         expectedCollisions: 1336,
84         exclude: 0
85     });
86 }
87
88 class Benchmark {
89     runIteration() {
90         benchmark();
91     }
92 }