summaryrefslogtreecommitdiffstats
path: root/third_party/webkit/PerformanceTests/MotionMark/tests/master/resources/canvas-stage.js
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webkit/PerformanceTests/MotionMark/tests/master/resources/canvas-stage.js')
-rw-r--r--third_party/webkit/PerformanceTests/MotionMark/tests/master/resources/canvas-stage.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/MotionMark/tests/master/resources/canvas-stage.js b/third_party/webkit/PerformanceTests/MotionMark/tests/master/resources/canvas-stage.js
new file mode 100644
index 0000000000..22002eccd6
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/MotionMark/tests/master/resources/canvas-stage.js
@@ -0,0 +1,52 @@
+SimpleCanvasStage = Utilities.createSubclass(Stage,
+ function(canvasObject)
+ {
+ Stage.call(this);
+ this._canvasObject = canvasObject;
+ this.objects = [];
+ this.offsetIndex = 0;
+ }, {
+
+ initialize: function(benchmark, options)
+ {
+ Stage.prototype.initialize.call(this, benchmark, options);
+ this.context = this.element.getContext("2d");
+ },
+
+ tune: function(count)
+ {
+ if (count == 0)
+ return;
+
+ if (count < 0) {
+ this.offsetIndex = Math.min(this.offsetIndex - count, this.objects.length);
+ return;
+ }
+
+ var newIndex = this.offsetIndex - count;
+ if (newIndex < 0) {
+ this.offsetIndex = 0;
+ newIndex = -newIndex;
+ for (var i = 0; i < newIndex; ++i) {
+ if (this._canvasObject.constructor === Array)
+ this.objects.push(new (Stage.randomElementInArray(this._canvasObject))(this));
+ else
+ this.objects.push(new this._canvasObject(this));
+ }
+ } else
+ this.offsetIndex = newIndex;
+ },
+
+ animate: function()
+ {
+ var context = this.context;
+ context.clearRect(0, 0, this.size.x, this.size.y);
+ for (var i = this.offsetIndex, length = this.objects.length; i < length; ++i)
+ this.objects[i].draw(context);
+ },
+
+ complexity: function()
+ {
+ return this.objects.length - this.offsetIndex;
+ }
+});