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

Unified Diff: tools/perf/page_sets/tough_canvas_cases/rendering_throughput/stroke_shapes.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
« no previous file with comments | « tools/perf/page_sets/tough_canvas_cases/rendering_throughput/stroke_shapes.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/page_sets/tough_canvas_cases/rendering_throughput/stroke_shapes.js
diff --git a/tools/perf/page_sets/tough_canvas_cases/rendering_throughput/stroke_shapes.js b/tools/perf/page_sets/tough_canvas_cases/rendering_throughput/stroke_shapes.js
new file mode 100644
index 0000000000000000000000000000000000000000..05b054fafae92fbe2581dc26d081089363108023
--- /dev/null
+++ b/tools/perf/page_sets/tough_canvas_cases/rendering_throughput/stroke_shapes.js
@@ -0,0 +1,183 @@
+// 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 stroke shapes test on the animometer
+// benchmark (https://trac.webkit.org/export/HEAD/trunk/PerformanceTests/Animometer/developer.html).
+// Javascript code: https://pr.gg/animometer/tests/simple/resources/simple-canvas-paths.js
+
+var shape_types = ["quadratic", "bezier", "arc_to",
+ "arc", "rectangle", "ellipse"];
+
+function CanvasStrokeShape() {
+ this.init = function(canvas_width, canvas_height) {
+ this.shape_type = shape_types[Math.floor(Math.random() * 6)];
+ this.color = get_random_color_string();
+
+ var max_size = Math.floor(Math.random() * 160) + 20;
+
+ var center = new Point(
+ Math.floor(Math.random() * canvas_width),
+ Math.floor(Math.random() * canvas_height));
+
+ this.p1 = new Point(
+ Math.floor(Math.random() * max_size) - max_size/2 + center.x,
+ Math.floor(Math.random() * max_size) - max_size/2 + center.y);
+
+ this.p2 = new Point(
+ Math.floor(Math.random() * max_size) - max_size/2 + center.x,
+ Math.floor(Math.random() * max_size) - max_size/2 + center.y);
+
+ this.p3 = new Point(
+ Math.floor(Math.random() * max_size) - max_size/2 + center.x,
+ Math.floor(Math.random() * max_size) - max_size/2 + center.y);
+
+ this.p4 = new Point(
+ Math.floor(Math.random() * max_size) - max_size/2 + center.x,
+ Math.floor(Math.random() * max_size) - max_size/2 + center.y);
+
+ switch(this.shape_type) {
+ case "quadratic":
+ this.width = Math.floor(Math.random() * 40) + 5;
+ break;
+
+ case "bezier":
+ this.width = Math.floor(Math.random() * 40) + 5;
+ break;
+
+ case "arc_to":
+ this.width = Math.floor(Math.random() * 40) + 5;
+ this.radius = Math.floor(Math.random() * 180) + 20;
+ break;
+
+ case "arc":
+ this.start_angle = Math.random() * 2 * Math.PI;
+ this.end_angle = Math.random() * 2 * Math.PI;
+ this.countclockwise = Math.floor(Math.random * 2);
+
+ this.width = Math.floor(Math.random() * 40) + 5;
+ this.radius = Math.floor(Math.random() * 180) + 20;
+ break;
+
+ case "rectangle":
+ this.width = Math.floor(Math.random() * 180) + 20;
+ this.height = Math.floor(Math.random() * 180) + 20;
+ this.line_width = Math.floor(Math.random() * 15);
+ break;
+
+ case "ellipse":
+ this.radius_w = Math.floor(Math.random() * 180) + 20;
+ this.radius_h = Math.floor(Math.random() * 180) + 20;
+
+ this.countclockwise = Math.floor(Math.random * 2);
+ this.line_width = Math.floor(Math.random() * 15);
+
+ this.rotation = Math.random() * 2 * Math.PI;
+ this.start_angle = Math.random() * 2 * Math.PI;
+ this.end_angle = Math.random() * 2 * Math.PI;
+
+ break;
+ }
+ }
+
+ this.draw_quadratic_segment = function(context) {
+ context.strokeStyle = this.color;
+ context.lineWidth = this.width;
+ context.beginPath();
+ context.moveTo(this.p1.x, this.p1.y);
+ context.quadraticCurveTo(this.p2.x, this.p2.y, this.p3.x, this.p3.y);
+ context.stroke();
+ }
+
+ this.draw_bezier_segment = function(context) {
+ context.strokeStyle = this.color;
+ context.lineWidth = this.width;
+ context.beginPath();
+ context.moveTo(this.p1.x, this.p1.y);
+ context.bezierCurveTo(this.p2.x, this.p2.y, this.p3.x,
+ this.p3.y, this.p4.x, this.p4.y);
+ context.stroke()
+ }
+
+ this.draw_arc_to_segment = function(context) {
+ context.strokeStyle = this.color;
+ context.lineWidth = this.width;
+ context.beginPath();
+ context.moveTo(this.p1.x, this.p1.y);
+ context.arcTo(this.p2.x, this.p2.y, this.p3.x, this.p3.y, this.radius);
+ context.stroke();
+ }
+
+ this.draw_arc_segment = function(context) {
+ context.strokeStyle = this.color;
+ context.lineWidth = this.width;
+ context.beginPath();
+ context.arc(this.p1.x, this.p1.y, this.radius, this.start_angle,
+ this.end_angle, this.counterclockwise);
+ context.stroke();
+ }
+
+ this.draw_rectangle = function(context) {
+ context.strokeStyle = this.color;
+ context.lineWidth = this.line_width;
+ context.beginPath();
+ context.rect(this.p1.x, this.p1.y, this.width, this.height);
+ context.stroke();
+ }
+
+ this.draw_ellipse = function(context) {
+ context.strokeStyle = this.color;
+ context.lineWidth = this.line_width;
+ context.beginPath();
+ context.ellipse(this.p1.x, this.p1.y, this.radius_w, this.radius_h,
+ this.rotation, this.start_angle, this.end_angle,
+ this.counterclockwise);
+ context.stroke();
+ }
+
+ this.draw = function(context) {
+ switch(this.shape_type) {
+ case "quadratic":
+ this.draw_quadratic_segment(context);
+ break;
+ case "bezier":
+ this.draw_bezier_segment(context);
+ break;
+ case "arc_to":
+ this.draw_arc_to_segment(context);
+ break;
+ case "arc":
+ this.draw_arc_segment(context);
+ break;
+ case "rectangle":
+ this.draw_rectangle(context);
+ break;
+ case "ellipse":
+ this.draw_ellipse(context);
+ break;
+ }
+ }
+}
+
+var stage_stroke_shapes = (function() {
+ var stage = {};
+ var shapes;
+
+ stage.init = function(number_shapes, canvas_width, canvas_height) {
+ shapes = []
+ for (var i = 0; i < number_shapes; i++) {
+ var shape = new CanvasStrokeShape();
+ shape.init(canvas_width, canvas_height);
+ shapes.push(shape);
+ }
+ };
+
+ stage.draw = function(context) {
+ for (var i = 0; i < shapes.length; i++) {
+ shapes[i].draw(context);
+ }
+ };
+
+ return stage;
+})();
+
+
« no previous file with comments | « tools/perf/page_sets/tough_canvas_cases/rendering_throughput/stroke_shapes.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698