diff options
author | Nicolas Roard <nicolasroard@google.com> | 2012-02-21 16:13:25 -0800 |
---|---|---|
committer | Nicolas Roard <nicolasroard@google.com> | 2012-02-21 16:13:25 -0800 |
commit | 34c42dc62d0d9894b353fff39eac1862c03af931 (patch) | |
tree | c3a8b596a03e55ae71c3cf053d2ad76f7f4c1ae4 /Source/WebCore | |
parent | 048f0f59f7fde542ee8f86e956b92b9d2adbf4cc (diff) | |
download | external_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')
-rw-r--r-- | Source/WebCore/rendering/RenderHTMLCanvas.cpp | 7 | ||||
-rw-r--r-- | Source/WebCore/rendering/RenderLayerCompositor.cpp | 4 |
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 |