summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjunov@chromium.org <junov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-21 15:16:28 +0000
committerjunov@chromium.org <junov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-21 15:16:28 +0000
commitb932a3f3bf4e891f44660c6d02152cd8c3c61d6d (patch)
tree4b1ba95ea47133f028e1266f27bc85407082e864
parent91583716c93529a5012e841905970ffa797d9744 (diff)
downloadchromium_src-b932a3f3bf4e891f44660c6d02152cd8c3c61d6d.zip
chromium_src-b932a3f3bf4e891f44660c6d02152cd8c3c61d6d.tar.gz
chromium_src-b932a3f3bf4e891f44660c6d02152cd8c3c61d6d.tar.bz2
Adding test content to the throughput tests to measure 2d canvas
blitting performance BUG=http://code.google.com/p/chromium/issues/detail?id=97666 TEST=throughput tests Review URL: https://chromiumcodereview.appspot.com/9355016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122824 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls.html29
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls.js173
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_aligned_canvas.js18
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_aligned_image_data.js19
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_canvas.js18
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_image.js13
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_canvas_sprite.js41
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_image.js20
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_image_with_shadow.js24
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_rect.js18
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/chromium.pngbin0 -> 1790 bytes
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/kiddie_logo.pngbin0 -> 1801 bytes
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/parse_url.js26
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_draw_from_canvas/index.html7
-rw-r--r--chrome/test/data/perf/rendering/throughput/canvas2d_balls_with_shadow/index.html7
-rw-r--r--chrome/test/perf/rendering/throughput_tests.cc16
16 files changed, 429 insertions, 0 deletions
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls.html b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls.html
new file mode 100644
index 0000000..a7574f8
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <script src="parse_url.js"></script>
+ <script src="bouncing_balls.js"></script>
+ <style>
+ html, body {
+ width: 100%;
+ height: 100%;
+ margin: 0px;
+ padding: 0px;
+ overflow: hidden;
+ }
+ </style>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Canvas 2D frame rate test: bouncing balls</title>
+</head>
+<body>
+
+<canvas id="canvas" width="500" height="500">
+</canvas>
+<img id="ballImage" src="chromium.png" height="0" width="0"></img>
+<img id="backImage" src="kiddie_logo.png" height="0" width="0"></img>
+<script>
+ var canvas = document.getElementById('canvas');
+ var canvasContext = canvas.getContext('2d');
+</script>
+</body>
+</html>
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls.js
new file mode 100644
index 0000000..53596ee
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls.js
@@ -0,0 +1,173 @@
+// Copyright (c) 2012 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.
+
+// demo parameters
+// maybe overridden in test file
+var numBalls = 500;
+var ballDiameter = 30;
+var gravity = 0.5; //screen heights per second^2
+var maxInitVelocity = 0.2;
+var maxAngularVelocity = 5; // rad per second
+var elasticity = 0.7;
+var joltInterval = 1.5;
+
+// globals
+var balls = [];
+var canvasWidth;
+var canvasHeight;
+var borderX;
+var borderY;
+var timeOfLastJolt = 0;
+
+function include(filename) {
+ var head = document.getElementsByTagName('head')[0];
+ var script = document.createElement('script');
+ script.src = filename;
+ script.type = 'text/javascript';
+ head.appendChild(script)
+}
+
+include("bouncing_balls_draw_ball_as_" + getArgValue('ball') + ".js");
+include("bouncing_balls_draw_back_as_" + getArgValue('back') + ".js");
+
+window.requestAnimFrame = (function(){
+ return window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function( callback ){
+ window.setTimeout(callback, 1000 / 60);
+ };
+})();
+
+window.onload = init;
+
+function init(){
+ handleResize();
+ for (var i = 0; i < numBalls; i++) {
+ balls.push(new Ball());
+ }
+ window.addEventListener("resize", handleResize, false);
+ drawBallInit(ballDiameter); // externally defined
+ window.requestAnimFrame(updateFrame);
+}
+
+function handleResize() {
+ canvasWidth = window.innerWidth;
+ canvasHeight = window.innerHeight;
+ canvas.setAttribute('width', canvasWidth);
+ canvas.setAttribute('height', canvasHeight);
+ borderX = ballDiameter/canvasWidth;
+ borderY = ballDiameter/canvasHeight;
+ prepareBackground(); // externally defined
+}
+
+function updateFrame() {
+ var now = new Date().getTime() / 1000;
+ var jolt = false;
+ if (now - timeOfLastJolt > joltInterval) {
+ jolt = true;
+ timeOfLastJolt = now;
+ }
+ drawBackground(); // externally defined
+ for (var i = 0; i < numBalls; i++) {
+ balls[i].step(jolt);
+ }
+ window.requestAnimFrame(updateFrame);
+}
+
+function Ball(){
+ var x = borderX + Math.random()*(1-2*borderX);
+ var y = borderY + Math.random()*(1-2*borderY);
+ var angle = Math.PI * 2 * Math.random();
+ var velocityY = Math.random()*maxInitVelocity*2 - maxInitVelocity;
+ var velocityX = Math.random()*maxInitVelocity*2 - maxInitVelocity;
+ var angularVelocity = Math.random()*maxAngularVelocity*2 -
+ maxAngularVelocity;
+ var previousFrameTime = new Date().getTime();
+ var previousBounceTime = 0;
+ var alive = true;
+ function step(jolt) {
+ var curTime = new Date().getTime();
+ var timeStep = (curTime - previousFrameTime) / 1000;
+ previousFrameTime = curTime;
+
+ // handle balls that are no longer bouncing
+ if (!alive) {
+ if (jolt) {
+ // If a jolt is applied, bump the rollong balls enough for them to
+ // reach between 0.75x and 1x the height of the window
+ velocityY = -Math.sqrt(2 * gravity * (1-2 * borderY) * (0.75 + 0.25 *
+ Math.random()))
+ velocityX = Math.random()*maxInitVelocity*2 - maxInitVelocity;
+ angularVelocity = Math.random()*maxAngularVelocity*2 -
+ maxAngularVelocity;
+ alive = true;
+ } else {
+ // rolling on the ground
+ angularVelocity = velocityX*canvasWidth/ballRadius;
+ }
+ }
+
+ // Compute angular motion
+ angle += timeStep*angularVelocity;
+ // Compute horizontal motion
+ var remainingTime = timeStep;
+ var deltaX = velocityX*remainingTime;
+ while ((x+deltaX) < borderX || (x+deltaX) > (1-borderX)){
+ if ((x+deltaX) < borderX) {
+ // left side bounce
+ remainingTime -= (borderX - x)/velocityX;
+ x = borderX;
+ } else {
+ // right side bounce
+ remainingTime -= ((1-borderX) - x)/velocityX;
+ x = 1 - borderX;
+ }
+ velocityX = -elasticity*velocityX;
+ deltaX = velocityX*remainingTime;
+ }
+ x += deltaX;
+
+ // Compute vertical motion
+ remainingTime = timeStep;
+ var deltaY = alive ? velocityY*timeStep+gravity*timeStep*timeStep/2 : 0;
+ //Handle floor bounces
+ //To make sure the floor is air tight, we must be able to process multiple
+ //bounces per time step to avoid the "tunnel effect".
+ while ((y + deltaY) > (1 - borderY) && alive) {
+ // time to hit floor
+ var c = y-(1-borderY);
+ var b = velocityY;
+ var a = gravity/2;
+ // The greater root is always the right one
+ var subStep = (-b + Math.sqrt(b*b-4*a*c))/(2*a);
+ //velocity after floor hit
+ velocityY = -elasticity*(velocityY + gravity*subStep);
+ remainingTime -= subStep;
+ var bounceTime = curTime - remainingTime;
+ if (bounceTime - previousBounceTime < 0.005){
+ // The number of iterations may not be finite within a timestep
+ // with elasticity < 1. This is due to power series convergence.
+ // To gard against hanging, we treat the ball as rolling on the ground
+ // once time between bounces is less than 5ms
+ alive = false;
+ deltaY = 0;
+ } else {
+ deltaY = velocityY*remainingTime+gravity*remainingTime*remainingTime/2;
+ }
+ previousBounceTime = bounceTime;
+ y = (1 - borderY);
+ }
+ y += deltaY;
+ velocityY += gravity*remainingTime;
+
+ drawBall(x * canvasWidth, y * canvasHeight, angle); // externally defined
+ }
+
+ return {
+ step: step
+ }
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_aligned_canvas.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_aligned_canvas.js
new file mode 100644
index 0000000..79b1b19
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_aligned_canvas.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 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.
+
+var backImageCanvas;
+
+function prepareBackground() {
+ var backImage = document.getElementById('backImage');
+ backImageCanvas = document.createElement('canvas');
+ backImageCanvas.width = canvasWidth;
+ backImageCanvas.height = canvasHeight;
+ var backContext = backImageCanvas.getContext('2d');
+ backContext.drawImage(backImage, 0, 0, canvasWidth, canvasHeight);
+}
+
+function drawBackground() {
+ canvasContext.drawImage(backImageCanvas, 0, 0);
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_aligned_image_data.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_aligned_image_data.js
new file mode 100644
index 0000000..94fabf6
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_aligned_image_data.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 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.
+
+var backImageData;
+
+function prepareBackground() {
+ var backImage = document.getElementById('backImage');
+ var backImageCanvas = document.createElement('canvas');
+ backImageCanvas.width = canvasWidth;
+ backImageCanvas.height = canvasHeight;
+ var backContext = backImageCanvas.getContext('2d');
+ backContext.drawImage(backImage, 0, 0, canvasWidth, canvasHeight);
+ backImageData = backContext.getImageData(0, 0, canvasWidth, canvasHeight)
+}
+
+function drawBackground() {
+ canvasContext.putImageData(backImageData, 0, 0);
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_canvas.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_canvas.js
new file mode 100644
index 0000000..0b5b93c
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_canvas.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 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.
+
+var backImageCanvas;
+
+function prepareBackground() {
+ var backImage = document.getElementById('backImage');
+ backImageCanvas = document.createElement('canvas');
+ backImageCanvas.width = backImage.naturalWidth;
+ backImageCanvas.height = backImage.naturalHeight;
+ var backContext = backImageCanvas.getContext('2d');
+ backContext.drawImage(backImage, 0, 0);
+}
+
+function drawBackground() {
+ canvasContext.drawImage(backImageCanvas, 0, 0, canvasWidth, canvasHeight);
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_image.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_image.js
new file mode 100644
index 0000000..925dcad
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_back_as_image.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 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.
+
+var backImage;
+
+function prepareBackground() {
+ backImage = document.getElementById('backImage');
+}
+
+function drawBackground() {
+ canvasContext.drawImage(backImage, 0, 0, canvasWidth, canvasHeight);
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_canvas_sprite.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_canvas_sprite.js
new file mode 100644
index 0000000..549564f
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_canvas_sprite.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 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.
+
+var spriteMap;
+var ballRadius;
+var spriteMapSize = 50;
+
+function drawBallInit(diameter) {
+ ballRadius = diameter / 2;
+ var ballImage = document.getElementById('ballImage');
+ spriteMap = document.createElement("canvas");
+ spriteMap.setAttribute('width', ballDiameter*spriteMapSize + 2);
+ spriteMap.setAttribute('height', ballDiameter + 2);
+ ctx = spriteMap.getContext("2d");
+ ctx.clearRect(0,0, ballDiameter*spriteMapSize + 2, ballDiameter + 2);
+ ctx.translate(ballRadius + 1, ballRadius + 1);
+ for (var i = 0; i < spriteMapSize; i++) {
+ ctx.save();
+ ctx.rotate(i * 2 * Math.PI / spriteMapSize );
+ ctx.drawImage(ballImage, -ballRadius, -ballRadius, ballDiameter,
+ ballDiameter);
+ ctx.restore();
+ ctx.translate(ballDiameter, 0);
+ }
+}
+
+function safeMod(a, b) {
+ var q = Math.floor(a / b);
+ return a - q*b;
+}
+
+function drawBall(x, y, angle) {
+ canvasContext.save();
+ canvasContext.translate(x, y);
+ var idx = safeMod(Math.floor(angle * spriteMapSize / (2 * Math.PI)),
+ spriteMapSize);
+ canvasContext.drawImage(spriteMap, idx*ballDiameter + 1, 1, ballDiameter,
+ ballDiameter, -ballRadius, -ballRadius, ballDiameter, ballDiameter);
+ canvasContext.restore();
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_image.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_image.js
new file mode 100644
index 0000000..7be8bc6
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_image.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 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.
+
+var ballImage;
+var ballRadius;
+
+function drawBallInit(diameter) {
+ ballRadius = diameter / 2;
+ ballImage = document.getElementById('ballImage');
+}
+
+function drawBall(x, y, angle) {
+ canvasContext.save();
+ canvasContext.translate(x, y);
+ canvasContext.rotate(angle);
+ canvasContext.drawImage(ballImage, -ballRadius, -ballRadius, ballDiameter,
+ ballDiameter);
+ canvasContext.restore();
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_image_with_shadow.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_image_with_shadow.js
new file mode 100644
index 0000000..0c30e66
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_image_with_shadow.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 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.
+
+var ballImage;
+var ballRadius;
+
+function drawBallInit(diameter) {
+ ballRadius = diameter / 2;
+ ballImage = document.getElementById('ballImage');
+}
+
+function drawBall(x, y, angle) {
+ canvasContext.save();
+ canvasContext.shadowColor = 'black';
+ canvasContext.shadowOffsetX = -ballRadius;
+ canvasContext.shadowOffsetY = ballRadius;
+ canvasContext.shadowBlur = ballRadius;
+ canvasContext.translate(x, y);
+ canvasContext.rotate(angle);
+ canvasContext.drawImage(ballImage, -ballRadius, -ballRadius, ballDiameter,
+ ballDiameter);
+ canvasContext.restore();
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_rect.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_rect.js
new file mode 100644
index 0000000..e4e058b
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/bouncing_balls_draw_ball_as_rect.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 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.
+
+var ballRadius;
+
+function drawBallInit(diameter) {
+ ballRadius = diameter / 2;
+}
+
+function drawBall(x, y, angle) {
+ canvasContext.save();
+ canvasContext.fillStyle = 'blue';
+ canvasContext.translate(x, y);
+ canvasContext.rotate(angle);
+ canvasContext.fillRect(-ballRadius, -ballRadius, ballDiameter, ballDiameter);
+ canvasContext.restore();
+}
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/chromium.png b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/chromium.png
new file mode 100644
index 0000000..9085a79
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/chromium.png
Binary files differ
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/kiddie_logo.png b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/kiddie_logo.png
new file mode 100644
index 0000000..61c7068
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/kiddie_logo.png
Binary files differ
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/parse_url.js b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/parse_url.js
new file mode 100644
index 0000000..5173e34
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_common/parse_url.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 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.
+
+function getArgValue(argname)
+{
+ var url = window.location.href;
+ var parts = url.split("?");
+ if (parts.length == 0)
+ {
+ return "";
+ }
+ var arglist = parts[1];
+ var args = arglist.split("&");
+ for (i=0;i<args.length;i++)
+ {
+ var parts = args[i].split("=");
+ if (parts[0] == argname)
+ {
+ value = parts[1];
+ value = unescape(value);
+ return value;
+ }
+ }
+ return "";
+} \ No newline at end of file
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_draw_from_canvas/index.html b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_draw_from_canvas/index.html
new file mode 100644
index 0000000..7537fec
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_draw_from_canvas/index.html
@@ -0,0 +1,7 @@
+<html>
+<head>
+<meta http-equiv="REFRESH" content="0;url=../canvas2d_balls_common/bouncing_balls.html?ball=canvas_sprite&back=canvas">
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/chrome/test/data/perf/rendering/throughput/canvas2d_balls_with_shadow/index.html b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_with_shadow/index.html
new file mode 100644
index 0000000..aa93994
--- /dev/null
+++ b/chrome/test/data/perf/rendering/throughput/canvas2d_balls_with_shadow/index.html
@@ -0,0 +1,7 @@
+<html>
+<head>
+<meta http-equiv="REFRESH" content="0;url=../canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image">
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/chrome/test/perf/rendering/throughput_tests.cc b/chrome/test/perf/rendering/throughput_tests.cc
index b1ba2c22..b6af54f 100644
--- a/chrome/test/perf/rendering/throughput_tests.cc
+++ b/chrome/test/perf/rendering/throughput_tests.cc
@@ -452,4 +452,20 @@ IN_PROC_BROWSER_TEST_F(ThroughputTestGPU, CompositingHugeDivGPU) {
RunTest("compositing_huge_div", kNone);
}
+IN_PROC_BROWSER_TEST_F(ThroughputTestSW, DrawImageShadowSW) {
+ RunTest("canvas2d_balls_with_shadow", kNone);
+}
+
+IN_PROC_BROWSER_TEST_F(ThroughputTestGPU, DrawImageShadowGPU) {
+ RunTest("canvas2d_balls_with_shadow", kNone);
+}
+
+IN_PROC_BROWSER_TEST_F(ThroughputTestSW, CanvasToCanvasDrawSW) {
+ RunTest("canvas2d_balls_draw_from_canvas", kNone);
+}
+
+IN_PROC_BROWSER_TEST_F(ThroughputTestGPU, CanvasToCanvasDrawGPU) {
+ RunTest("canvas2d_balls_draw_from_canvas", kNone);
+}
+
} // namespace