Add basic canvas tests
[WebKit-https.git] / PerformanceTests / Animometer / tests / simple / resources / simple-canvas-paths.js
1 // === PAINT OBJECTS ===
2
3 function CanvasQuadraticSegment(stage) {
4     var maxSize = stage.randomInt(20, 200);
5     var toCenter = stage.randomPosition(stage.size).subtract(new Point(maxSize/2, maxSize/2));
6
7     this._point1 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
8     this._point2 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
9     this._point3 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
10     this._color = stage.randomColor();
11     this._lineWidth = stage.randomInt(1, 50);
12 };
13 CanvasQuadraticSegment.prototype.draw = function(context) {
14     context.strokeStyle = this._color;
15     context.lineWidth = this._lineWidth;
16     context.beginPath();
17     context.moveTo(this._point1.x, this._point1.y);
18     context.quadraticCurveTo(this._point2.x, this._point2.y, this._point3.x, this._point3.y);
19     context.stroke();
20 };
21
22 function CanvasBezierSegment(stage) {
23     var maxSize = stage.randomInt(20, 200);
24     var toCenter = stage.randomPosition(stage.size).subtract(new Point(maxSize/2, maxSize/2));
25
26     this._point1 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
27     this._point2 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
28     this._point3 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
29     this._point4 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
30     this._color = stage.randomColor();
31     this._lineWidth = stage.randomInt(1, 50);
32 };
33 CanvasBezierSegment.prototype.draw = function(context) {
34     context.strokeStyle = this._color;
35     context.lineWidth = this._lineWidth;
36     context.beginPath();
37     context.moveTo(this._point1.x, this._point1.y);
38     context.bezierCurveTo(this._point2.x, this._point2.y, this._point3.x, this._point3.y, this._point4.x, this._point4.y);
39     context.stroke();
40 };
41
42 function CanvasArcToSegment(stage) {
43     var maxSize = stage.randomInt(20, 200);
44     var toCenter = stage.randomPosition(stage.size).subtract(new Point(maxSize/2, maxSize/2));
45
46     this._point1 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
47     this._point2 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
48     this._point3 = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
49     this._radius = stage.randomInt(20, 200);
50     this._color = stage.randomColor();
51     this._lineWidth = stage.randomInt(1, 50);
52 };
53 CanvasArcToSegment.prototype.draw = function(context) {
54     context.strokeStyle = this._color;
55     context.lineWidth = this._lineWidth;
56     context.beginPath();
57     context.moveTo(this._point1.x, this._point1.y);
58     context.arcTo(this._point2.x, this._point2.y, this._point3.x, this._point3.y, this._radius);
59     context.stroke();
60 };
61
62 function CanvasArcSegment(stage) {
63     var maxSize = stage.randomInt(20, 200);
64     var toCenter = stage.randomPosition(stage.size).subtract(new Point(maxSize/2, maxSize/2));
65
66     this._point = stage.randomPosition(new Point(maxSize, maxSize)).add(toCenter);
67     this._radius = stage.randomInt(20, 200);
68     this._startAngle = stage.randomAngle();
69     this._endAngle = stage.randomAngle();
70     this._counterclockwise = stage.randomBool();
71     this._color = stage.randomColor();
72     this._lineWidth = stage.randomInt(1, 50);
73 };
74 CanvasArcSegment.prototype.draw = function(context) {
75     context.strokeStyle = this._color;
76     context.lineWidth = this._lineWidth;
77     context.beginPath();
78     context.arc(this._point.x, this._point.y, this._radius, this._startAngle, this._endAngle, this._counterclockwise);
79     context.stroke();
80 };
81
82 function CanvasRect(stage) {
83     this._width = stage.randomInt(20, 200);
84     this._height = stage.randomInt(20, 200);
85     this._point = stage.randomPosition(stage.size).subtract(new Point(this._width/2, this._height/2));
86     this._color = stage.randomColor();
87     this._lineWidth = stage.randomInt(1, 20);
88 }
89 CanvasRect.prototype.draw = function(context) {
90     context.strokeStyle = this._color;
91     context.lineWidth = this._lineWidth;
92     context.beginPath();
93     context.rect(this._point.x, this._point.y, this._width, this._height);
94     context.stroke();
95 };
96
97 function CanvasRectFill(stage) {
98     CanvasRect.call(this, stage);
99 }
100 CanvasRectFill.prototype.draw = function(context) {
101     context.fillStyle = this._color;
102     context.beginPath();
103     context.rect(this._point.x, this._point.y, this._width, this._height);
104     context.fill();
105 };
106
107 // === BENCHMARK ===
108
109 function CanvasPathBenchmark(suite, test, options, recordTable, progressBar) {
110     SimpleCanvasBenchmark.call(this, suite, test, options, recordTable, progressBar);
111 }
112 CanvasPathBenchmark.prototype = Object.create(SimpleCanvasBenchmark.prototype);
113 CanvasPathBenchmark.prototype.constructor = CanvasPathBenchmark;
114 CanvasPathBenchmark.prototype.createStage = function(element)
115 {
116     switch (this._options["pathType"]) {
117     case "quadratic":
118         return new SimpleCanvasStage(element, this._options, CanvasQuadraticSegment);
119     case "bezier":
120         return new SimpleCanvasStage(element, this._options, CanvasBezierSegment);
121     case "arcTo":
122         return new SimpleCanvasStage(element, this._options, CanvasArcToSegment);
123     case "arc":
124         return new SimpleCanvasStage(element, this._options, CanvasArcSegment);
125     case "rect":
126         return new SimpleCanvasStage(element, this._options, CanvasRect);
127     case "arcToFill":
128         return new SimpleCanvasStage(element, this._options, CanvasArcToSegmentFill);
129     case "arcFill":
130         return new SimpleCanvasStage(element, this._options, CanvasArcSegmentFill);
131     case "rectFill":
132         return new SimpleCanvasStage(element, this._options, CanvasRectFill);
133     }
134 }
135
136 window.benchmarkClient.create = function(suite, test, options, recordTable, progressBar) {
137     return new CanvasPathBenchmark(suite, test, options, recordTable, progressBar);
138 }