Hardware-backed renderLayer could avoid repainting during a positioned movement layout
https://bugs.webkit.org/show_bug.cgi?id=74370
Reviewed by Simon Fraser.
Source/WebCore:
Tests: compositing/absolute-position-changed-in-composited-layer.html
compositing/absolute-position-changed-with-composited-parent-layer.html
compositing/fixed-position-changed-in-composited-layer.html
compositing/fixed-position-changed-within-composited-parent-layer.html
To be able to properly skip repainting after a positioned movement layout only, we
needed to add more state to the current |setNeedsFullRepaint| method. As part of that
we refactored the callers and internal fields to better match the new meaning.
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::styleDidChange):
Explicitely gave the RepaintStatus to setRepaintStatus.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::RenderLayer):
(WebCore::RenderLayer::removeOnlyThisLayer):
Updated those function after the renamings.
(WebCore::RenderLayer::updateLayerPositions):
Ditto. Also added a sholdRepaintAfterLayout check.
(WebCore::RenderLayer::shouldRepaintAfterLayout):
Heart of the optimization, if we just did a positioned movement layout of composited RenderLayer,
then don't repaint. All the other cases should still trigger a repaint.
* rendering/RenderLayer.h:
(WebCore::RenderLayer::setRepaintStatus):
Renamed setNeedsFullRepaint to setRepaintStatus. Also added a new enum RepaintStatus.
* rendering/RenderObject.cpp:
(WebCore::RenderObject::setLayerNeedsFullRepaint):
Updated after the renamings.
(WebCore::RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout):
New method that pass a new value to the RenderLayer.
* rendering/RenderObject.h:
(WebCore::RenderObject::setNeedsPositionedMovementLayout):
Switched the call to the dedicated method.
LayoutTests:
I did not find any test covering positioned movement layout with composited layers
so I added some testing.
* compositing/absolute-position-changed-in-composited-layer-expected.png: Added.
* compositing/absolute-position-changed-in-composited-layer-expected.txt: Added.
* compositing/absolute-position-changed-in-composited-layer.html: Added.
* compositing/absolute-position-changed-with-composited-parent-layer-expected.png: Added.
* compositing/absolute-position-changed-with-composited-parent-layer-expected.txt: Added.
* compositing/absolute-position-changed-with-composited-parent-layer.html: Added.
* compositing/fixed-position-changed-in-composited-layer-expected.png: Added.
* compositing/fixed-position-changed-in-composited-layer-expected.txt: Added.
* compositing/fixed-position-changed-in-composited-layer.html: Added.
* compositing/fixed-position-changed-within-composited-parent-layer-expected.png: Added.
* compositing/fixed-position-changed-within-composited-parent-layer-expected.txt: Added.
* compositing/fixed-position-changed-within-composited-parent-layer.html: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@102952 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/compositing/fixed-position-changed-within-composited-parent-layer-expected.txt b/LayoutTests/compositing/fixed-position-changed-within-composited-parent-layer-expected.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/LayoutTests/compositing/fixed-position-changed-within-composited-parent-layer-expected.txt
@@ -0,0 +1 @@
+