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

Side by Side Diff: Source/core/rendering/RenderObject.h

Issue 408083002: Revert of Enforce clearing renderers' paint invalidation state (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RenderBox.cpp ('k') | Source/core/rendering/RenderObject.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Antti Koivisto (koivisto@kde.org) 3 * (C) 2000 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2009 Google Inc. All rights reserved. 7 * Copyright (C) 2009 Google Inc. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 #endif 243 #endif
244 ASSERT_WITH_SECURITY_IMPLICATION(!needsLayout()); 244 ASSERT_WITH_SECURITY_IMPLICATION(!needsLayout());
245 } 245 }
246 246
247 void assertSubtreeIsLaidOut() const 247 void assertSubtreeIsLaidOut() const
248 { 248 {
249 for (const RenderObject* renderer = this; renderer; renderer = renderer- >nextInPreOrder()) 249 for (const RenderObject* renderer = this; renderer; renderer = renderer- >nextInPreOrder())
250 renderer->assertRendererLaidOut(); 250 renderer->assertRendererLaidOut();
251 } 251 }
252 252
253 void assertRendererClearedPaintInvalidationState() const
254 {
255 #ifndef NDEBUG
256 if (paintInvalidationStateIsDirty()) {
257 showRenderTreeForThis();
258 ASSERT_NOT_REACHED();
259 }
260 #endif 253 #endif
261 }
262
263 void assertSubtreeClearedPaintInvalidationState() const
264 {
265 for (const RenderObject* renderer = this; renderer; renderer = renderer- >nextInPreOrder()) {
266 renderer->assertRendererClearedPaintInvalidationState();
267
268 // Currently we skip some SVG containers for performance (see Render SVGModelObject::invalidateTreeAfterLayout)
269 // so we just skip the underlying subtree. This is not strictly the condition in the previous function but
270 // it makes little sense to cover SVG subtrees if we know they are s kipped anyway.
271 if (renderer->isSVGContainer())
272 return;
273 }
274 }
275
276 #endif
277 254
278 bool skipInvalidationWhenLaidOutChildren() const; 255 bool skipInvalidationWhenLaidOutChildren() const;
279 256
280 // FIXME: This could be used when changing the size of a renderer without ch ildren to skip some invalidations. 257 // FIXME: This could be used when changing the size of a renderer without ch ildren to skip some invalidations.
281 bool rendererHasNoBoxEffect() const 258 bool rendererHasNoBoxEffect() const
282 { 259 {
283 return !style()->hasVisualOverflowingEffect() && !style()->hasBorder() & & !style()->hasBackground(); 260 return !style()->hasVisualOverflowingEffect() && !style()->hasBorder() & & !style()->hasBackground();
284 } 261 }
285 262
286 // Obtains the nearest enclosing block (including this block) that contribut es a first-line style to our inline 263 // Obtains the nearest enclosing block (including this block) that contribut es a first-line style to our inline
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
1015 992
1016 bool isRelayoutBoundaryForInspector() const; 993 bool isRelayoutBoundaryForInspector() const;
1017 994
1018 const LayoutRect& previousPaintInvalidationRect() const { return m_previousP aintInvalidationRect; } 995 const LayoutRect& previousPaintInvalidationRect() const { return m_previousP aintInvalidationRect; }
1019 void setPreviousPaintInvalidationRect(const LayoutRect& rect) { m_previousPa intInvalidationRect = rect; } 996 void setPreviousPaintInvalidationRect(const LayoutRect& rect) { m_previousPa intInvalidationRect = rect; }
1020 997
1021 const LayoutPoint& previousPositionFromPaintInvalidationContainer() const { return m_previousPositionFromPaintInvalidationContainer; } 998 const LayoutPoint& previousPositionFromPaintInvalidationContainer() const { return m_previousPositionFromPaintInvalidationContainer; }
1022 void setPreviousPositionFromPaintInvalidationContainer(const LayoutPoint& lo cation) { m_previousPositionFromPaintInvalidationContainer = location; } 999 void setPreviousPositionFromPaintInvalidationContainer(const LayoutPoint& lo cation) { m_previousPositionFromPaintInvalidationContainer = location; }
1023 1000
1024 bool shouldDoFullPaintInvalidation() const { return m_bitfields.shouldDoFull PaintInvalidation(); } 1001 bool shouldDoFullPaintInvalidation() const { return m_bitfields.shouldDoFull PaintInvalidation(); }
1025 void setShouldDoFullPaintInvalidation(bool b, MarkingBehavior markBehavior = MarkContainingBlockChain) 1002 void setShouldDoFullPaintInvalidation(bool b) { m_bitfields.setShouldDoFullP aintInvalidation(b); }
1026 {
1027 m_bitfields.setShouldDoFullPaintInvalidation(b);
1028
1029 if (markBehavior == MarkContainingBlockChain && b)
1030 markContainingBlockChainForPaintInvalidation();
1031 }
1032
1033 bool shouldInvalidateOverflowForPaint() const { return m_bitfields.shouldInv alidateOverflowForPaint(); } 1003 bool shouldInvalidateOverflowForPaint() const { return m_bitfields.shouldInv alidateOverflowForPaint(); }
1034 1004
1035 bool shouldDoFullPaintInvalidationIfSelfPaintingLayer() const { return m_bit fields.shouldDoFullPaintInvalidationIfSelfPaintingLayer(); } 1005 bool shouldDoFullPaintInvalidationIfSelfPaintingLayer() const { return m_bit fields.shouldDoFullPaintInvalidationIfSelfPaintingLayer(); }
1036 void setShouldDoFullPaintInvalidationIfSelfPaintingLayer(bool b) 1006 void setShouldDoFullPaintInvalidationIfSelfPaintingLayer(bool b) { m_bitfiel ds.setShouldDoFullPaintInvalidationIfSelfPaintingLayer(b); }
1037 {
1038 m_bitfields.setShouldDoFullPaintInvalidationIfSelfPaintingLayer(b);
1039
1040 if (b)
1041 markContainingBlockChainForPaintInvalidation();
1042 }
1043 1007
1044 bool onlyNeededPositionedMovementLayout() const { return m_bitfields.onlyNee dedPositionedMovementLayout(); } 1008 bool onlyNeededPositionedMovementLayout() const { return m_bitfields.onlyNee dedPositionedMovementLayout(); }
1045 void setOnlyNeededPositionedMovementLayout(bool b) { m_bitfields.setOnlyNeed edPositionedMovementLayout(b); } 1009 void setOnlyNeededPositionedMovementLayout(bool b) { m_bitfields.setOnlyNeed edPositionedMovementLayout(b); }
1046 1010
1047 void clearPaintInvalidationState(); 1011 void clearPaintInvalidationState();
1048 1012
1049 // layoutDidGetCalled indicates whether this render object was re-laid-out 1013 // layoutDidGetCalled indicates whether this render object was re-laid-out
1050 // since the last call to setLayoutDidGetCalled(false) on this object. 1014 // since the last call to setLayoutDidGetCalled(false) on this object.
1051 bool layoutDidGetCalled() const { return m_bitfields.layoutDidGetCalled(); } 1015 bool layoutDidGetCalled() { return m_bitfields.layoutDidGetCalled(); }
1052 void setLayoutDidGetCalled(bool b) { m_bitfields.setLayoutDidGetCalled(b); } 1016 void setLayoutDidGetCalled(bool b) { m_bitfields.setLayoutDidGetCalled(b); }
1053 1017
1054 bool mayNeedPaintInvalidation() const { return m_bitfields.mayNeedPaintInval idation(); } 1018 bool mayNeedPaintInvalidation() { return m_bitfields.mayNeedPaintInvalidatio n(); }
1055 void setMayNeedPaintInvalidation(bool b) 1019 void setMayNeedPaintInvalidation(bool b)
1056 { 1020 {
1057 m_bitfields.setMayNeedPaintInvalidation(b); 1021 m_bitfields.setMayNeedPaintInvalidation(b);
1058 1022
1059 // Make sure our parent is marked as needing invalidation. 1023 // Make sure our parent is marked as needing invalidation.
1060 if (b) 1024 if (b && parent() && !parent()->mayNeedPaintInvalidation())
1061 markContainingBlockChainForPaintInvalidation(); 1025 parent()->setMayNeedPaintInvalidation(b);
1062 } 1026 }
1063 1027
1064 bool neededLayoutBecauseOfChildren() const { return m_bitfields.neededLayout BecauseOfChildren(); } 1028 bool neededLayoutBecauseOfChildren() const { return m_bitfields.neededLayout BecauseOfChildren(); }
1065 void setNeededLayoutBecauseOfChildren(bool b) { m_bitfields.setNeededLayoutB ecauseOfChildren(b); } 1029 void setNeededLayoutBecauseOfChildren(bool b) { m_bitfields.setNeededLayoutB ecauseOfChildren(b); }
1066 1030
1067 bool shouldCheckForPaintInvalidation() 1031 bool shouldCheckForPaintInvalidation()
1068 { 1032 {
1069 return layoutDidGetCalled() || mayNeedPaintInvalidation() || shouldDoFul lPaintInvalidation() || shouldDoFullPaintInvalidationIfSelfPaintingLayer(); 1033 return layoutDidGetCalled() || mayNeedPaintInvalidation();
1070 } 1034 }
1071 1035
1072 bool supportsLayoutStateCachedOffsets() const { return !hasColumns() && !has Transform() && !hasReflection() && !style()->isFlippedBlocksWritingMode(); } 1036 bool supportsLayoutStateCachedOffsets() const { return !hasColumns() && !has Transform() && !hasReflection() && !style()->isFlippedBlocksWritingMode(); }
1073 1037
1074 void setNeedsOverflowRecalcAfterStyleChange(); 1038 void setNeedsOverflowRecalcAfterStyleChange();
1075 void markContainingBlocksForOverflowRecalc(); 1039 void markContainingBlocksForOverflowRecalc();
1076 1040
1077 protected: 1041 protected:
1078 inline bool layerCreationAllowedForSubtree() const; 1042 inline bool layerCreationAllowedForSubtree() const;
1079 1043
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 1109
1146 RenderStyle* cachedFirstLineStyle() const; 1110 RenderStyle* cachedFirstLineStyle() const;
1147 StyleDifference adjustStyleDifference(StyleDifference) const; 1111 StyleDifference adjustStyleDifference(StyleDifference) const;
1148 1112
1149 Color selectionColor(int colorProperty) const; 1113 Color selectionColor(int colorProperty) const;
1150 1114
1151 void removeShapeImageClient(ShapeValue*); 1115 void removeShapeImageClient(ShapeValue*);
1152 1116
1153 #if ENABLE(ASSERT) 1117 #if ENABLE(ASSERT)
1154 void checkBlockPositionedObjectsNeedLayout(); 1118 void checkBlockPositionedObjectsNeedLayout();
1155
1156 bool paintInvalidationStateIsDirty() const
1157 {
1158 return layoutDidGetCalled() || shouldDoFullPaintInvalidation() || should DoFullPaintInvalidationIfSelfPaintingLayer()
1159 || onlyNeededPositionedMovementLayout() || neededLayoutBecauseOfChil dren() || mayNeedPaintInvalidation();
1160 }
1161 #endif 1119 #endif
1162 const char* invalidationReasonToString(InvalidationReason) const; 1120 const char* invalidationReasonToString(InvalidationReason) const;
1163 1121
1164 void markContainingBlockChainForPaintInvalidation()
1165 {
1166 for (RenderObject* container = this->container(); container && !containe r->shouldCheckForPaintInvalidation(); container = container->container())
1167 container->setMayNeedPaintInvalidation(true);
1168 }
1169
1170 static bool isAllowedToModifyRenderTreeStructure(Document&); 1122 static bool isAllowedToModifyRenderTreeStructure(Document&);
1171 1123
1172 RefPtr<RenderStyle> m_style; 1124 RefPtr<RenderStyle> m_style;
1173 1125
1174 Node* m_node; 1126 Node* m_node;
1175 1127
1176 RenderObject* m_parent; 1128 RenderObject* m_parent;
1177 RenderObject* m_previous; 1129 RenderObject* m_previous;
1178 RenderObject* m_next; 1130 RenderObject* m_next;
1179 1131
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 void showTree(const blink::RenderObject*); 1492 void showTree(const blink::RenderObject*);
1541 void showLineTree(const blink::RenderObject*); 1493 void showLineTree(const blink::RenderObject*);
1542 void showRenderTree(const blink::RenderObject* object1); 1494 void showRenderTree(const blink::RenderObject* object1);
1543 // We don't make object2 an optional parameter so that showRenderTree 1495 // We don't make object2 an optional parameter so that showRenderTree
1544 // can be called from gdb easily. 1496 // can be called from gdb easily.
1545 void showRenderTree(const blink::RenderObject* object1, const blink::RenderObjec t* object2); 1497 void showRenderTree(const blink::RenderObject* object1, const blink::RenderObjec t* object2);
1546 1498
1547 #endif 1499 #endif
1548 1500
1549 #endif // RenderObject_h 1501 #endif // RenderObject_h
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBox.cpp ('k') | Source/core/rendering/RenderObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698