Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(541)

Unified Diff: tools/perf/page_sets/tough_canvas_cases/rendering_throughput/canvas_lines.js

Issue 2047773002: Added telemetry pages for the canvas element. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Some formatting Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/perf/page_sets/tough_canvas_cases/rendering_throughput/canvas_lines.js
diff --git a/tools/perf/page_sets/tough_canvas_cases/rendering_throughput/canvas_lines.js b/tools/perf/page_sets/tough_canvas_cases/rendering_throughput/canvas_lines.js
new file mode 100644
index 0000000000000000000000000000000000000000..a59ff14a8b71a16b7f087f57b1ce9ede236662a0
--- /dev/null
+++ b/tools/perf/page_sets/tough_canvas_cases/rendering_throughput/canvas_lines.js
@@ -0,0 +1,109 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// This code in inspired by the canvas lines test on the animometer
+// benchmark (https://trac.webkit.org/export/HEAD/trunk/PerformanceTests/Animometer/developer.html).
+// Javascript code: https://pr.gg/animometer/tests/master/resources/canvas-tests.js
+
+function CanvasLine() {
+
+ this.init = function(circle_x, circle_y, circle_radius, min_length,
+ max_length, theta, omega, color, width) {
+ this.theta = theta; // orientation angle
+ this.omega = omega; // speed; oscillations/second
+
+ this.color = color;
+
+ this.min_length = min_length;
+ this.max_length = max_length;
+
+ this.x = circle_x + circle_radius * Math.cos(theta);
+ this.y = circle_y + circle_radius * Math.sin(theta);
+ this.direction = Math.floor(Math.random() * 2) * 2 - 1; // 1 or -1
+
+ this.width = width;
+ this.init_time = Date.now();
+ }
+
+ this.draw = function(context) {
+ var seconds = (Date.now() - this.init_time) / 1000;
+ var length = this.min_length +
+ (this.max_length - this.min_length) *
+ Math.abs(Math.sin(seconds * this.omega * 2 * Math.PI));
+
+ context.strokeStyle = this.color;
+ context.lineWidth = this.width;
+
+ context.beginPath();
+ context.moveTo(this.x, this.y);
+ context.lineTo(this.x + this.direction * length * Math.cos(this.theta),
+ this.y + this.direction * length * Math.sin(this.theta));
+ context.stroke();
+ }
+}
+
+var stage_lines = (function() {
+ var initialized_lines;
+ var width;
+ var height;
+
+ var circles_x;
+ var circles_y;
+ var circle_radius;
+
+ var stage = {};
+
+ stage.init = function(number_lines, canvas_width, canvas_height) {
+ width = canvas_width;
+ height = canvas_height;
+ initialized_lines = [];
+
+ circle_radius = Math.min(canvas_width / 8,
+ canvas_height / 8);
+ circles_x = [canvas_width * 0.2, canvas_width * 0.4,
+ canvas_width * 0.6, canvas_width * 0.8];
+ circles_y = [canvas_height * 0.3, canvas_height * 0.6,
+ canvas_height * 0.3, canvas_height * 0.6];
+
+ circle_color = ["#e01040", "#10c030", "#744CBA", "#e05010"];
+
+ for(var i = 0; i < number_lines; i++) {
+ var new_line = new CanvasLine();
+
+ var circle_number = Math.floor(Math.random() * circles_x.length);
+ var theta = Math.random() * 2 * Math.PI;
+ var omega = Math.random() / 2 + 0.2;
+ var width = Math.random() * 8 + 1
+ var max_length = Math.random() * canvas_width / 15;
+ var min_length =
+ Math.min(Math.random() * canvas_width / 30, max_length /3)
+
+ new_line.init(circles_x[circle_number], circles_y[circle_number],
+ circle_radius, min_length, max_length, theta, omega,
+ circle_color[circle_number], width);
+ initialized_lines.push(new_line)
+ }
+
+ };
+
+ stage.draw = function(context) {
+ // draw the circles
+ for (var i = 0; i < circles_x.length; i++) {
+ context.strokeStyle = circle_color[i];
+ context.beginPath();
+ context.arc(circles_x[i], circles_y[i], circle_radius, 0, 2 * Math.PI);
+ context.stroke();
+ context.fillStyle = "#000000";
+ context.fill();
+ }
+
+ // draw all initialized_lines on the context
+ for(var i = 0; i < initialized_lines.length; i++) {
+ initialized_lines[i].draw(context);
+ }
+ };
+
+ return stage;
+})();
+
+

Powered by Google App Engine
This is Rietveld 408576698