Unreviewed, rolling out r194510.
[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     this._size = Point.elementClientSize(element).subtract(Insets.elementPadding(element).size);
39 }
40
41 Stage.prototype =
42 {
43     get size()
44     {
45         return this._size
46     },
47     
48     random: function(min, max)
49     {
50         return (Math.random() * (max - min)) + min;
51     },
52     
53     randomBool: function()
54     {
55         return !!Math.round(this.random(0, 1));
56     },
57
58     randomInt: function(min, max)
59     {
60         return Math.round(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, options)
116 {
117     Animator.call(this, benchmark, options);
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, 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._progressBar = progressBar;
144 }
145
146 StageBenchmark.prototype = Object.create(Benchmark.prototype);
147 StageBenchmark.prototype.constructor = StageBenchmark;
148
149 StageBenchmark.prototype.createStage = function(element)
150 {
151     return new Stage(element, this._options);
152 }
153
154 StageBenchmark.prototype.createAnimator = function()
155 {
156     return new StageAnimator(this, this._options);
157 }
158
159 StageBenchmark.prototype.tune = function(count)
160 {
161     return this._stage.tune(count);
162 }
163
164 StageBenchmark.prototype.clear = function()
165 {
166     return this._stage.clear();
167 }
168
169 StageBenchmark.prototype.showResults = function(progress, message)
170 {
171     if (!this._progressBar || !this._test)
172         return;
173
174     this._progressBar.setPos(progress);
175 }