Add basic canvas tests
[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     randomBool: function()
59     {
60         return !!Math.round(this.random(0, 1));
61     },
62
63     randomInt: function(min, max)
64     {
65         return Math.round(this.random(min, max));
66     },
67     
68     randomPosition: function(maxPosition)
69     {
70         return new Point(this.randomInt(0, maxPosition.x), this.randomInt(0, maxPosition.y));
71     },
72     
73     randomSquareSize: function(min, max)
74     {
75         var side = this.random(min, max);
76         return new Point(side, side);
77     },
78     
79     randomVelocity: function(maxVelocity)
80     {
81         return this.random(maxVelocity / 8, maxVelocity);
82     },
83     
84     randomAngle: function()
85     {
86         return this.random(0, Math.PI * 2);
87     },
88     
89     randomColor: function()
90     {
91         var min = 32;
92         var max = 256 - 32;
93         return "#"
94             + this.randomInt(min, max).toString(16)
95             + this.randomInt(min, max).toString(16)
96             + this.randomInt(min, max).toString(16);
97     },
98     
99     randomRotater: function()
100     {
101         return new Rotater(this.random(1000, 10000));
102     },
103
104     tune: function()
105     {
106         throw "Not implemented";
107     },
108     
109     animate: function()
110     {
111         throw "Not implemented";
112     },
113     
114     clear: function()
115     {
116         return this.tune(-this.tune(0));
117     }
118 }
119
120 function StageAnimator(benchmark)
121 {
122     Animator.call(this, benchmark);
123 };
124
125 StageAnimator.prototype = Object.create(Animator.prototype);
126 StageAnimator.prototype.constructor = StageAnimator;
127
128 StageAnimator.prototype.animate = function()
129 {
130     if (!Animator.prototype.animate.call(this))
131         return false;
132     this._benchmark._stage.animate(this.timeDelta());
133     return true;
134 }
135
136 function StageBenchmark(suite, test, options, recordTable, progressBar)
137 {
138     Benchmark.call(this, options);
139     
140     var element = document.getElementById("stage");
141     element.setAttribute("width", document.body.offsetWidth);
142     element.setAttribute("height", document.body.offsetHeight);
143     
144     this._stage = this.createStage(element);
145     this._animator = this.createAnimator();
146     this._suite = suite;
147     this._test = test;
148     this._recordTable = recordTable;
149     this._progressBar = progressBar;
150 }
151
152 StageBenchmark.prototype = Object.create(Benchmark.prototype);
153 StageBenchmark.prototype.constructor = StageBenchmark;
154
155 StageBenchmark.prototype.createStage = function(element)
156 {
157     return new Stage(element, this._options);
158 }
159
160 StageBenchmark.prototype.createAnimator = function()
161 {
162     return new StageAnimator(this);
163 }
164
165 StageBenchmark.prototype.tune = function(count)
166 {
167     return this._stage.tune(count);
168 }
169
170 StageBenchmark.prototype.clear = function()
171 {
172     return this._stage.clear();
173 }
174
175 StageBenchmark.prototype.showResults = function(message, progress)
176 {
177     if (!this._recordTable || !this._progressBar || !this._suite || !this._test)
178         return;
179
180     if (this.options.showRunningResults)
181         this._recordTable.showRecord(this._suite, this._test, this._sampler, message);
182
183     this._progressBar.setPos(progress);
184 }