Avoid using backing store for compositing layers that just need to clip
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Apr 2012 18:32:13 +0000 (18:32 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Apr 2012 18:32:13 +0000 (18:32 +0000)
commitb7cec681c9cca1190db0f437a187b07c1a8b2767
tree54a5ba5e16dfecc04b97db8553b0efb7fd066e0d
parente2afcfe99bcff8b3dd274d615f574e61b018f18a
Avoid using backing store for compositing layers that just need to clip
https://bugs.webkit.org/show_bug.cgi?id=40547

Source/WebCore:

Reviewed by Dean Jackson.

If a layer becomes composited because it needs to clip composited
descendants, or if it has perspective, then it doesn't actually
needs its own backing store; its contents can be painted by an
ancestor, and we can just have an empty layer that does the clipping
or applies the perspective transform.

This saves backing store memory on some pages.

Tests: compositing/backing/no-backing-for-clip-overlap.html
       compositing/backing/no-backing-for-clip.html
       compositing/backing/no-backing-for-perspective.html

* rendering/RenderLayer.cpp:
(WebCore):
(WebCore::RenderLayer::enclosingCompositingLayerForRepaint):
(WebCore::RenderLayer::paintLayer):
* rendering/RenderLayer.h:
(RenderLayer):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::RenderLayerBacking):
(WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
(WebCore::RenderLayerBacking::containsPaintedContent):
(WebCore::RenderLayerBacking::setContentsNeedDisplay):
(WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
(WebCore::RenderLayerBacking::paintIntoLayer):
* rendering/RenderLayerBacking.h:
(RenderLayerBacking):
(WebCore::RenderLayerBacking::paintsIntoCompositedAncestor):
(WebCore::RenderLayerBacking::setRequiresOwnBackingStore):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::layerWillBeRemoved):
(WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):
(WebCore::RenderLayerCompositor::requiresCompositingLayer):
(WebCore::RenderLayerCompositor::requiresOwnBackingStore):
(WebCore):
* rendering/RenderLayerCompositor.h:
* rendering/RenderObject.cpp:
(WebCore::RenderObject::containerForRepaint):
* rendering/RenderTreeAsText.cpp:
(WebCore::write):
* rendering/RenderView.cpp:
(WebCore::RenderView::paintBoxDecorations):

LayoutTests:

Reviewed by Dean Jackson.

New tests for backing store elimination with clip or perspective.

New results for some tests that no longer have backing store on some
layers.

* compositing/backing/no-backing-for-clip-expected.txt: Added.
* compositing/backing/no-backing-for-clip-overlap-expected.txt: Added.
* compositing/backing/no-backing-for-clip-overlap.html: Added.
* compositing/backing/no-backing-for-clip.html: Added.
* compositing/backing/no-backing-for-perspective-expected.txt: Added.
* compositing/backing/no-backing-for-perspective.html: Added.
* compositing/geometry/preserve-3d-switching-expected.txt:
* compositing/visibility/layer-visible-content-expected.png:
* compositing/visibility/layer-visible-content-expected.txt:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@114283 268f45cc-cd09-0410-ab3c-d52691b4dbfc
20 files changed:
LayoutTests/ChangeLog
LayoutTests/compositing/backing/no-backing-for-clip-expected.txt [new file with mode: 0644]
LayoutTests/compositing/backing/no-backing-for-clip-overlap-expected.txt [new file with mode: 0644]
LayoutTests/compositing/backing/no-backing-for-clip-overlap.html [new file with mode: 0644]
LayoutTests/compositing/backing/no-backing-for-clip.html [new file with mode: 0644]
LayoutTests/compositing/backing/no-backing-for-perspective-expected.txt [new file with mode: 0644]
LayoutTests/compositing/backing/no-backing-for-perspective.html [new file with mode: 0644]
LayoutTests/compositing/geometry/preserve-3d-switching-expected.txt
LayoutTests/compositing/visibility/layer-visible-content-expected.png
LayoutTests/compositing/visibility/layer-visible-content-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderLayer.h
Source/WebCore/rendering/RenderLayerBacking.cpp
Source/WebCore/rendering/RenderLayerBacking.h
Source/WebCore/rendering/RenderLayerCompositor.cpp
Source/WebCore/rendering/RenderLayerCompositor.h
Source/WebCore/rendering/RenderObject.cpp
Source/WebCore/rendering/RenderTreeAsText.cpp
Source/WebCore/rendering/RenderView.cpp