Index: Source/core/html/HTMLCanvasElement.cpp |
diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp |
index 8b0d798af50c69d4d865d79bbb35a37064fa7925..5b5505bdcb2eb191bcb6596d88e81c9c5f9fed4d 100644 |
--- a/Source/core/html/HTMLCanvasElement.cpp |
+++ b/Source/core/html/HTMLCanvasElement.cpp |
@@ -43,6 +43,7 @@ |
#include "core/html/canvas/WebGLContextAttributes.h" |
#include "core/html/canvas/WebGLContextEvent.h" |
#include "core/html/canvas/WebGLRenderingContext.h" |
+#include "core/page/ChromeClient.h" |
#include "core/rendering/RenderHTMLCanvas.h" |
#include "platform/MIMETypeRegistry.h" |
#include "platform/graphics/Canvas2DImageBufferSurface.h" |
@@ -431,8 +432,9 @@ bool HTMLCanvasElement::shouldAccelerate(const IntSize& size) const |
if (!settings || !settings->accelerated2dCanvasEnabled()) |
return false; |
- // Do not use acceleration for small canvas. |
- if (size.width() * size.height() < settings->minimumAccelerated2dCanvasSize()) |
+ // Do not use acceleration for small canvases, unless GPU rasterization is available. |
+ // GPU raterization is a heuristic to avoid difficult content & whitelist targeted content. |
+ if (!document().frame()->chromeClient().usesGpuRasterization() && size.width() * size.height() < settings->minimumAccelerated2dCanvasSize()) |
return false; |
if (!blink::Platform::current()->canAccelerate2dCanvas()) |