summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/rendering
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2012-02-21 16:13:25 -0800
committerNicolas Roard <nicolasroard@google.com>2012-02-21 16:13:25 -0800
commit34c42dc62d0d9894b353fff39eac1862c03af931 (patch)
treec3a8b596a03e55ae71c3cf053d2ad76f7f4c1ae4 /Source/WebCore/rendering
parent048f0f59f7fde542ee8f86e956b92b9d2adbf4cc (diff)
downloadexternal_webkit-34c42dc62d0d9894b353fff39eac1862c03af931.zip
external_webkit-34c42dc62d0d9894b353fff39eac1862c03af931.tar.gz
external_webkit-34c42dc62d0d9894b353fff39eac1862c03af931.tar.bz2
Move Canvas elements to their own composited layer
This drastically improves performances, as invalidating a canvas will only touch that one layer instead of (possibly) invalidating the entire PictureSet. bug:5247823 Change-Id: Iec4de74d25e58e63f0198bbd7558c461d9a11cfd
Diffstat (limited to 'Source/WebCore/rendering')
-rw-r--r--Source/WebCore/rendering/RenderHTMLCanvas.cpp7
-rw-r--r--Source/WebCore/rendering/RenderLayerCompositor.cpp4
2 files changed, 11 insertions, 0 deletions
diff --git a/Source/WebCore/rendering/RenderHTMLCanvas.cpp b/Source/WebCore/rendering/RenderHTMLCanvas.cpp
index de2a2c1..03b406b 100644
--- a/Source/WebCore/rendering/RenderHTMLCanvas.cpp
+++ b/Source/WebCore/rendering/RenderHTMLCanvas.cpp
@@ -47,6 +47,13 @@ RenderHTMLCanvas::RenderHTMLCanvas(HTMLCanvasElement* element)
bool RenderHTMLCanvas::requiresLayer() const
{
+#if PLATFORM(ANDROID)
+ // All Canvas are drawn on their own composited layer
+ // This improves performances a lot (as this simplify
+ // the repaint/inval chain dealing with the PictureSet)
+ return true;
+#endif
+
if (RenderReplaced::requiresLayer())
return true;
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp
index 03f1e41..25a08e7 100644
--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp
@@ -1410,6 +1410,10 @@ bool RenderLayerCompositor::requiresCompositingForAndroidLayers(const RenderLaye
if (layer->isFixed())
return true;
#endif
+
+ if (layer->renderer()->isCanvas())
+ return true;
+
return false;
}
#endif