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

Unified Diff: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp

Issue 2141793002: Improving canvas 2D performance by switching graphics rendering pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor change Created 4 years, 5 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: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
index 9a0fc752c8ccb02c390670963b4a7107c2c4b495..64e2f5ad02a08da3e8de7c7542f4a745fe4b8f32 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
@@ -797,4 +797,56 @@ TEST_F(CanvasRenderingContext2DTest, GetImageDataDisablesAcceleration)
RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled(savedFixedRenderingMode);
}
+TEST_F(CanvasRenderingContext2DTest, IsAccelerationOptimalForCanvasContentHeuristic)
+{
+ createContext(NonOpaque);
+
+ std::unique_ptr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface = wrapUnique(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpaque));
+ canvasElement().createImageBufferUsingSurfaceForTesting(std::move(fakeAccelerateSurface));
+
+ NonThrowableExceptionState exceptionState;
+
+ CanvasRenderingContext2D* context = context2d();
+ EXPECT_TRUE(context->isAccelerationOptimalForCanvasContent());
+
+ context->fillRect(10, 10, 100, 100);
+ EXPECT_FALSE(context->isAccelerationOptimalForCanvasContent());
+
+ context->drawImage(canvasElement().getExecutionContext(), &m_opaqueBitmap, 0, 0, 1, 1, 0, 0, 10, 10, exceptionState);
+ EXPECT_TRUE(context->isAccelerationOptimalForCanvasContent());
+
+ int numReps = 100;
+ for (int i = 0; i < numReps; i++) {
+ context->fillRect(10, 10, 100, 100);
+ }
+ EXPECT_FALSE(context->isAccelerationOptimalForCanvasContent());
+}
+
+TEST_F(CanvasRenderingContext2DTest, DisableAcceleration)
+{
+ createContext(NonOpaque);
+
+ std::unique_ptr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface = wrapUnique(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpaque));
+ canvasElement().createImageBufferUsingSurfaceForTesting(std::move(fakeAccelerateSurface));
+ CanvasRenderingContext2D* context = context2d();
+
+ // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per pixel per buffer,
+ // and 2 is an estimate of num of gpu buffers required
+ EXPECT_EQ(800, getCurrentGPUMemoryUsage());
+ EXPECT_EQ(800, getGlobalGPUMemoryUsage());
+ EXPECT_EQ(1u, getGlobalAcceleratedImageBufferCount());
+
+ context->fillRect(10, 10, 100, 100);
+ EXPECT_TRUE(canvasElement().buffer()->isAccelerated());
+
+ canvasElement().buffer()->disableAcceleration();
+ EXPECT_FALSE(canvasElement().buffer()->isAccelerated());
+
+ context->fillRect(10, 10, 100, 100);
+
+ EXPECT_EQ(0, getCurrentGPUMemoryUsage());
+ EXPECT_EQ(0, getGlobalGPUMemoryUsage());
+ EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount());
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698