summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/HTMLCanvasElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/HTMLCanvasElement.cpp')
-rw-r--r--Source/WebCore/html/HTMLCanvasElement.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/Source/WebCore/html/HTMLCanvasElement.cpp b/Source/WebCore/html/HTMLCanvasElement.cpp
index 681fb93ca..143d33475 100644
--- a/Source/WebCore/html/HTMLCanvasElement.cpp
+++ b/Source/WebCore/html/HTMLCanvasElement.cpp
@@ -443,6 +443,22 @@ bool HTMLCanvasElement::shouldAccelerate(const IntSize& size) const
#endif
}
+bool HTMLCanvasElement::shouldDefer() const
+{
+#if USE(SKIA)
+ if (m_context && !m_context->is2d())
+ return false;
+
+ Settings* settings = document()->settings();
+ if (!settings || !settings->deferred2dCanvasEnabled())
+ return false;
+
+ return true;
+#else
+ return false;
+#endif
+}
+
void HTMLCanvasElement::createImageBuffer() const
{
ASSERT(!m_imageBuffer);
@@ -471,7 +487,8 @@ void HTMLCanvasElement::createImageBuffer() const
#else
Unaccelerated;
#endif
- m_imageBuffer = ImageBuffer::create(bufferSize, ColorSpaceDeviceRGB, renderingMode);
+ DeferralMode deferralMode = shouldDefer() ? Deferred : NonDeferred;
+ m_imageBuffer = ImageBuffer::create(bufferSize, ColorSpaceDeviceRGB, renderingMode, deferralMode);
if (!m_imageBuffer)
return;
m_imageBuffer->context()->scale(FloatSize(bufferSize.width() / logicalSize.width(), bufferSize.height() / logicalSize.height()));