Index: Source/core/rendering/RenderObject.h |
diff --git a/Source/core/rendering/RenderObject.h b/Source/core/rendering/RenderObject.h |
index 451e9587e61ede081e787c1f417f4b2b340bfb79..c207d54f0653ccc9ebe8096fd8f1d6803e7bcf7d 100644 |
--- a/Source/core/rendering/RenderObject.h |
+++ b/Source/core/rendering/RenderObject.h |
@@ -67,6 +67,7 @@ class RenderNamedFlowThread; |
class RenderSVGResourceContainer; |
class RenderTable; |
class RenderTheme; |
+class RenderView; |
class TransformState; |
struct PaintInfo; |
@@ -677,6 +678,9 @@ public: |
void forceLayout(); |
void forceChildLayout(); |
+ // True if we can abort layout, leaving a partially laid out tree. |
+ virtual bool supportsPartialLayout() const { return false; } |
+ |
// used for element state updates that cannot be fixed with a |
// repaint and do not need a relayout |
virtual void updateFromElement() { } |
@@ -1076,6 +1080,7 @@ private: |
#ifndef NDEBUG |
void checkBlockPositionedObjectsNeedLayout(); |
+ void checkNotInPartialLayout(); |
#endif |
RefPtr<RenderStyle> m_style; |
@@ -1246,6 +1251,9 @@ inline bool RenderObject::isBeforeOrAfterContent() const |
inline void RenderObject::setNeedsLayout(MarkingBehavior markParents, SubtreeLayoutScope* layouter) |
{ |
+#ifndef NDEBUG |
+ checkNotInPartialLayout(); |
+#endif |
ASSERT(!isSetNeedsLayoutForbidden()); |
bool alreadyNeededLayout = m_bitfields.needsLayout(); |
m_bitfields.setNeedsLayout(true); |
@@ -1259,6 +1267,9 @@ inline void RenderObject::setNeedsLayout(MarkingBehavior markParents, SubtreeLay |
inline void RenderObject::clearNeedsLayout() |
{ |
+#ifndef NDEBUG |
+ checkNotInPartialLayout(); |
+#endif |
m_bitfields.setNeedsLayout(false); |
setEverHadLayout(true); |
setPosChildNeedsLayout(false); |