Index: Source/core/rendering/RenderLayerRepainter.cpp |
diff --git a/Source/core/rendering/RenderLayerRepainter.cpp b/Source/core/rendering/RenderLayerRepainter.cpp |
index 141d303d802851ee0aca4d1b0bb7a6d7cd5cb6cc..c0030d9df2902cc6ba23e9d0a453089cd9d60b9c 100644 |
--- a/Source/core/rendering/RenderLayerRepainter.cpp |
+++ b/Source/core/rendering/RenderLayerRepainter.cpp |
@@ -45,6 +45,7 @@ |
#include "core/rendering/RenderLayerRepainter.h" |
#include "core/rendering/FilterEffectRenderer.h" |
+#include "core/rendering/LayoutRectRecorder.h" |
#include "core/rendering/RenderLayer.h" |
#include "core/rendering/RenderView.h" |
#include "core/rendering/compositing/CompositedLayerMapping.h" |
@@ -59,6 +60,9 @@ RenderLayerRepainter::RenderLayerRepainter(RenderLayerModelObject* renderer) |
void RenderLayerRepainter::repaintAfterLayout(RenderGeometryMap* geometryMap, bool shouldCheckForRepaint) |
{ |
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
+ return; |
+ |
// FIXME: really, we're in the repaint phase here, and the following queries are legal. |
// Until those states are fully fledged, I'll just disable the ASSERTS. |
DisableCompositingQueryAsserts disabler; |
@@ -107,16 +111,30 @@ void RenderLayerRepainter::clearRepaintRects() |
void RenderLayerRepainter::computeRepaintRects(const RenderLayerModelObject* repaintContainer, const RenderGeometryMap* geometryMap) |
{ |
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
+ return; |
+ |
m_repaintRect = m_renderer->clippedOverflowRectForRepaint(repaintContainer); |
m_outlineBox = m_renderer->outlineBoundsForRepaint(repaintContainer, geometryMap); |
} |
void RenderLayerRepainter::computeRepaintRectsIncludingDescendants() |
{ |
- // FIXME: computeRepaintRects() has to walk up the parent chain for every layer to compute the rects. |
- // We should make this more efficient. |
- // FIXME: it's wrong to call this when layout is not up-to-date, which we do. |
- computeRepaintRects(m_renderer->containerForRepaint()); |
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) { |
+ // FIXME: We want RenderLayerRepainter to go away when |
+ // repaint-after-layout is on by default so we need to figure out how to |
+ // handle this update. |
+ // |
+ // This is a little silly as we create and immediately destroy the RAII |
+ // object but it makes sure we correctly set all of the repaint flags. |
+ LayoutRectRecorder recorder(*m_renderer); |
+ |
+ } else { |
+ // FIXME: computeRepaintRects() has to walk up the parent chain for every layer to compute the rects. |
+ // We should make this more efficient. |
+ // FIXME: it's wrong to call this when layout is not up-to-date, which we do. |
+ computeRepaintRects(m_renderer->containerForRepaint()); |
+ } |
for (RenderLayer* layer = m_renderer->layer()->firstChild(); layer; layer = layer->nextSibling()) |
layer->repainter().computeRepaintRectsIncludingDescendants(); |
@@ -124,6 +142,9 @@ void RenderLayerRepainter::computeRepaintRectsIncludingDescendants() |
inline bool RenderLayerRepainter::shouldRepaintLayer() const |
{ |
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
+ return false; |
+ |
if (m_repaintStatus != NeedsFullRepaintForPositionedMovementLayout) |
return true; |
@@ -145,7 +166,12 @@ void RenderLayerRepainter::repaintIncludingNonCompositingDescendants(RenderLayer |
LayoutRect RenderLayerRepainter::repaintRectIncludingNonCompositingDescendants() const |
{ |
- LayoutRect repaintRect = m_repaintRect; |
+ LayoutRect repaintRect; |
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
+ repaintRect = m_renderer->newRepaintRect(); |
+ else |
+ repaintRect = m_repaintRect; |
+ |
for (RenderLayer* child = m_renderer->layer()->firstChild(); child; child = child->nextSibling()) { |
// Don't include repaint rects for composited child layers; they will paint themselves and have a different origin. |
if (child->hasCompositedLayerMapping()) |