Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(958)

Unified Diff: Source/core/rendering/RenderObject.cpp

Issue 160903002: Move RenderLayer repainting to repaint-after-layout framework. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/rendering/RenderObject.cpp
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp
index 35f06e3a4147574ce162536bc6ce6959ae9ec2d1..fab4cf3f4bef068f5e7cd6c09573fd70a1a5b3e7 100644
--- a/Source/core/rendering/RenderObject.cpp
+++ b/Source/core/rendering/RenderObject.cpp
@@ -746,13 +746,19 @@ void RenderObject::invalidateContainerPreferredLogicalWidths()
void RenderObject::setLayerNeedsFullRepaint()
{
ASSERT(hasLayer());
- toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(NeedsFullRepaint);
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled())
+ setShouldDoFullRepaintAfterLayout(true);
+ else
+ toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(NeedsFullRepaint);
}
void RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout()
{
ASSERT(hasLayer());
- toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(NeedsFullRepaintForPositionedMovementLayout);
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled())
+ setShouldDoFullRepaintAfterLayout(true);
Julien - ping for review 2014/03/04 18:22:10 This is wrong :-/ It's OK to put a FIXME but this
dsinclair 2014/03/04 19:21:52 Done. Had to store another flag in this case so w
+ else
+ toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(NeedsFullRepaintForPositionedMovementLayout);
}
RenderBlock* RenderObject::containerForFixedPosition(const RenderLayerModelObject* repaintContainer, bool* repaintContainerSkipped) const
@@ -1600,6 +1606,9 @@ void RenderObject::repaintOverflow()
bool RenderObject::checkForRepaint() const
{
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled())
+ return !document().view()->needsFullRepaint() && everHadLayout();
Julien - ping for review 2014/03/04 18:22:10 FYI I think we shouldn't check everHadLayout() her
dsinclair 2014/03/04 19:21:52 Ack.
+
return !document().view()->needsFullRepaint() && !hasLayer() && everHadLayout();
}
@@ -3314,6 +3323,64 @@ bool RenderObject::isRelayoutBoundaryForInspector() const
return objectIsRelayoutBoundary(this);
}
+const LayoutRect RenderObject::newOutlineRect()
+{
+ ASSERT(hasOutline());
Julien - ping for review 2014/03/04 18:22:10 The outline rectangle includes the box shadow too
dsinclair 2014/03/04 19:21:52 So, then the shadow isn't included in the repaint
Julien - ping for review 2014/03/07 18:26:38 It is actually included in the repaint rect (see a
+
+ OutlineRects* outlineRects = view()->outlineRects();
+ OutlineRects::iterator it = outlineRects->find(this);
+ if (it == outlineRects->end())
+ return outlineBoundsForRepaint(containerForRepaint());
+ return it->value.newOutlineRect;
+}
+
+void RenderObject::setNewOutlineRect(const LayoutRect& rect)
+{
+ ASSERT(hasOutline());
+
+ OutlineRects* outlineRects = view()->outlineRects();
+ OutlineRects::iterator it = outlineRects->find(this);
+ if (it == outlineRects->end())
+ outlineRects->set(this, OutlineRectInfo());
+
+ outlineRects->get(this).newOutlineRect = rect;
+}
+
+const LayoutRect RenderObject::oldOutlineRect()
Julien - ping for review 2014/03/04 18:22:10 I don't see the point in making a copy of LayoutRe
dsinclair 2014/03/04 19:21:52 Done.
+{
+ ASSERT(hasOutline());
+
+ OutlineRects* outlineRects = view()->outlineRects();
+ OutlineRects::iterator it = outlineRects->find(this);
+ if (it == outlineRects->end())
+ return LayoutRect();
+ return it->value.oldOutlineRect;
+}
+
+void RenderObject::setOldOutlineRect(const LayoutRect& rect)
+{
+ ASSERT(hasOutline());
+
+ OutlineRects* outlineRects = view()->outlineRects();
+ OutlineRects::iterator it = outlineRects->find(this);
+ if (it == outlineRects->end())
+ outlineRects->set(this, OutlineRectInfo());
+ outlineRects->get(this).oldOutlineRect = rect;
+}
+
+void RenderObject::clearRepaintState()
+{
+ setShouldDoFullRepaintAfterLayout(false);
+ setShouldDoFullRepaintIfSelfPaintingLayer(false);
+ setShouldRepaintOverflowIfNeeded(false);
+ setLayoutDidGetCalled(false);
+
+ OutlineRects* outlineRects = view()->outlineRects();
+ OutlineRects::iterator it = outlineRects->find(this);
+ if (it != outlineRects->end())
+ outlineRects->remove(it);
+}
+
} // namespace WebCore
#ifndef NDEBUG

Powered by Google App Engine
This is Rietveld 408576698