6d6ed24c60ba091ccb2ddece16d0583189543eb0
[WebKit-https.git] / PerformanceTests / Animometer / tests / resources / stage.js
1 function Rotater(rotateInterval)
2 {
3     this._timeDelta = 0;
4     this._rotateInterval = rotateInterval;
5 }
6
7 Rotater.prototype =
8 {
9     get interval()
10     {
11         return this._rotateInterval;
12     },
13     
14     next: function(timeDelta)
15     {
16         this._timeDelta = (this._timeDelta + timeDelta) % this._rotateInterval;
17     },
18     
19     degree: function()
20     {
21         return (360 * this._timeDelta) / this._rotateInterval;
22     },
23     
24     rotateZ: function()
25     {
26         return "rotateZ(" + Math.floor(this.degree()) + "deg)";
27     },
28     
29     rotate: function(center)
30     {
31         return "rotate(" + Math.floor(this.degree()) + ", " + center.x + "," + center.y + ")";
32     }
33 }
34
35 function Stage(element, options)
36 {
37     this.element = element;
38 }
39
40 Stage.prototype =
41 {
42     get size()
43     {
44         var styles = window.getComputedStyle(this.element);
45         var padding = new Insets(
46             parseFloat(styles.paddingTop),
47             parseFloat(styles.paddingRight),
48             parseFloat(styles.paddingBottom),
49             parseFloat(styles.paddingTop));
50         return new Point(this.element.clientWidth - padding.width, this.element.clientHeight - padding.height);
51     },
52     
53     random: function(min, max)
54     {
55         return (Math.random() * (max - min)) + min;
56     },
57     
58     randomInt: function(min, max)
59     {
60         return Math.floor(this.random(min, max));
61     },
62     
63     randomPosition: function(maxPosition)
64     {
65         return new Point(this.randomInt(0, maxPosition.x), this.randomInt(0, maxPosition.y));
66     },
67     
68     randomSquareSize: function(min, max)
69     {
70         var side = this.random(min, max);
71         return new Point(side, side);
72     },
73     
74     randomVelocity: function(maxVelocity)
75     {
76         return this.random(maxVelocity / 8, maxVelocity);
77     },
78     
79     randomAngle: function()
80     {
81         return this.random(0, Math.PI * 2);
82     },
83     
84     randomColor: function()
85     {
86         var min = 32;
87         var max = 256 - 32;
88         return "#"
89             + this.randomInt(min, max).toString(16)
90             + this.randomInt(min, max).toString(16)
91             + this.randomInt(min, max).toString(16);
92     },
93     
94     randomRotater: function()
95     {
96         return new Rotater(this.random(1000, 10000));
97     },
98
99     tune: function()
100     {
101         throw "Not implemented";
102     },
103     
104     animate: function()
105     {
106         throw "Not implemented";
107     },
108     
109     clear: function()
110     {
111         return this.tune(-this.tune(0));
112     }
113 }
114
115 function StageAnimator(benchmark)
116 {
117     Animator.call(this, benchmark);
118 };
119
120 StageAnimator.prototype = Object.create(Animator.prototype);
121 StageAnimator.prototype.constructor = StageAnimator;
122
123 StageAnimator.prototype.animate = function()
124 {
125     if (!Animator.prototype.animate.call(this))
126         return false;
127     this._benchmark._stage.animate(this.timeDelta());
128     return true;
129 }
130
131 function StageBenchmark(suite, test, options, recordTable, progressBar)
132 {
133     Benchmark.call(this, options);
134     
135     var element = document.getElementById("stage");
136     element.setAttribute("width", document.body.offsetWidth);
137     element.setAttribute("height", document.body.offsetHeight);
138     
139     this._stage = this.createStage(element);
140     this._animator = this.createAnimator();
141     this._suite = suite;
142     this._test = test;
143     this._recordTable = recordTable;
144     this._progressBar = progressBar;
145 }
146
147 StageBenchmark.prototype = Object.create(Benchmark.prototype);
148 StageBenchmark.prototype.constructor = StageBenchmark;
149
150 StageBenchmark.prototype.createStage = function(element)
151 {
152     return new Stage(element, this._options);
153 }
154
155 StageBenchmark.prototype.createAnimator = function()
156 {
157     return new StageAnimator(this);
158 }
159
160 StageBenchmark.prototype.tune = function(count)
161 {
162     return this._stage.tune(count);
163 }
164
165 StageBenchmark.prototype.clear = function()
166 {
167     return this._stage.clear();
168 }
169
170 StageBenchmark.prototype.showResults = function(message, progress)
171 {
172     if (!this._recordTable || !this._progressBar || !this._suite || !this._test)
173         return;
174
175     if (this.options.showRunningResults)
176         this._recordTable.showRecord(this._suite, this._test, this._sampler, message);
177
178     this._progressBar.setPos(progress);
179 }