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

Side by Side Diff: Source/core/layout/LayoutObject.h

Issue 1302993003: Cleanup bitfield accessors for slimming paint v2 (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: clear ChildShouldCheckForPaintInvalidation Created 5 years, 4 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
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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 public: 119 public:
120 template <typename T> 120 template <typename T>
121 NonLayoutObjectDisplayItemClientWrapper(const T& client) 121 NonLayoutObjectDisplayItemClientWrapper(const T& client)
122 : DisplayItemClientWrapper(client) { } 122 : DisplayItemClientWrapper(client) { }
123 123
124 NonLayoutObjectDisplayItemClientWrapper(const LayoutObject&) = delete; 124 NonLayoutObjectDisplayItemClientWrapper(const LayoutObject&) = delete;
125 }; 125 };
126 126
127 // Base class for all layout tree objects. 127 // Base class for all layout tree objects.
128 class CORE_EXPORT LayoutObject : public ImageResourceClient { 128 class CORE_EXPORT LayoutObject : public ImageResourceClient {
129 // For layout tree hierarchy mutation methods, e.g. setParent.
129 friend class LayoutBlock; 130 friend class LayoutBlock;
130 friend class LayoutBlockFlow; 131 friend class DeprecatedPaintLayerReflectionInfo;
131 friend class DeprecatedPaintLayerReflectionInfo; // For setParent 132 friend class DeprecatedPaintLayerScrollableArea;
132 friend class DeprecatedPaintLayerScrollableArea; // For setParent.
133 friend class LayoutObjectChildList; 133 friend class LayoutObjectChildList;
134
134 WTF_MAKE_NONCOPYABLE(LayoutObject); 135 WTF_MAKE_NONCOPYABLE(LayoutObject);
135 public: 136 public:
136 // Anonymous objects should pass the document as their node, and they will t hen automatically be 137 // Anonymous objects should pass the document as their node, and they will t hen automatically be
137 // marked as anonymous in the constructor. 138 // marked as anonymous in the constructor.
138 explicit LayoutObject(Node*); 139 explicit LayoutObject(Node*);
139 ~LayoutObject() override; 140 ~LayoutObject() override;
140 141
141 // Returns the name of the layout object. 142 // Returns the name of the layout object.
142 virtual const char* name() const = 0; 143 virtual const char* name() const = 0;
143 144
(...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 1020
1020 PaintInvalidationReason fullPaintInvalidationReason() const { return m_bitfi elds.fullPaintInvalidationReason(); } 1021 PaintInvalidationReason fullPaintInvalidationReason() const { return m_bitfi elds.fullPaintInvalidationReason(); }
1021 bool shouldDoFullPaintInvalidation() const { return m_bitfields.fullPaintInv alidationReason() != PaintInvalidationNone; } 1022 bool shouldDoFullPaintInvalidation() const { return m_bitfields.fullPaintInv alidationReason() != PaintInvalidationNone; }
1022 void setShouldDoFullPaintInvalidation(PaintInvalidationReason = PaintInvalid ationFull); 1023 void setShouldDoFullPaintInvalidation(PaintInvalidationReason = PaintInvalid ationFull);
1023 void clearShouldDoFullPaintInvalidation() { m_bitfields.setFullPaintInvalida tionReason(PaintInvalidationNone); } 1024 void clearShouldDoFullPaintInvalidation() { m_bitfields.setFullPaintInvalida tionReason(PaintInvalidationNone); }
1024 1025
1025 bool shouldInvalidateOverflowForPaint() const { return m_bitfields.shouldInv alidateOverflowForPaint(); } 1026 bool shouldInvalidateOverflowForPaint() const { return m_bitfields.shouldInv alidateOverflowForPaint(); }
1026 1027
1027 virtual void clearPaintInvalidationState(const PaintInvalidationState&); 1028 virtual void clearPaintInvalidationState(const PaintInvalidationState&);
1028 1029
1029 // Indicates whether this layout object was re-laid-out since the last frame .
1030 // The flag will be cleared during invalidateTreeIfNeeded.
1031 bool layoutDidGetCalledSinceLastFrame() const { return m_bitfields.layoutDid GetCalledSinceLastFrame(); }
1032
1033 bool mayNeedPaintInvalidation() const { return m_bitfields.mayNeedPaintInval idation(); } 1030 bool mayNeedPaintInvalidation() const { return m_bitfields.mayNeedPaintInval idation(); }
1034 void setMayNeedPaintInvalidation(); 1031 void setMayNeedPaintInvalidation();
1035 1032
1036 bool shouldInvalidateSelection() const { return m_bitfields.shouldInvalidate Selection(); } 1033 bool shouldInvalidateSelection() const { return m_bitfields.shouldInvalidate Selection(); }
1037 void setShouldInvalidateSelection(); 1034 void setShouldInvalidateSelection();
1038 void clearShouldInvalidateSelection() { m_bitfields.setShouldInvalidateSelec tion(false); }
1039
1040 bool neededLayoutBecauseOfChildren() const { return m_bitfields.neededLayout BecauseOfChildren(); }
1041 void setNeededLayoutBecauseOfChildren(bool b) { m_bitfields.setNeededLayoutB ecauseOfChildren(b); }
1042 1035
1043 bool shouldCheckForPaintInvalidation(const PaintInvalidationState& paintInva lidationState) const 1036 bool shouldCheckForPaintInvalidation(const PaintInvalidationState& paintInva lidationState) const
1044 { 1037 {
1045 // Should check for paint invalidation if some ancestor changed location , because this object 1038 // Should check for paint invalidation if some ancestor changed location , because this object
1046 // may also change paint offset or location in paint invalidation contai ner, even if there is 1039 // may also change paint offset or location in paint invalidation contai ner, even if there is
1047 // no paint invalidation flag set. 1040 // no paint invalidation flag set.
1048 return paintInvalidationState.ancestorHadPaintInvalidationForLocationCha nge() || shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState(); 1041 return paintInvalidationState.ancestorHadPaintInvalidationForLocationCha nge() || shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState();
1049 } 1042 }
1050 1043
1051 bool shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() con st 1044 bool shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() con st
1052 { 1045 {
1053 return layoutDidGetCalledSinceLastFrame() || mayNeedPaintInvalidation() || shouldDoFullPaintInvalidation() || shouldInvalidateSelection(); 1046 return mayNeedPaintInvalidation() || shouldDoFullPaintInvalidation() || shouldInvalidateSelection() || m_bitfields.childShouldCheckForPaintInvalidation( );
1054 } 1047 }
1055 1048
1056 virtual bool supportsPaintInvalidationStateCachedOffsets() const { return !h asTransformRelatedProperty() && !hasReflection() && !style()->isFlippedBlocksWri tingMode(); } 1049 virtual bool supportsPaintInvalidationStateCachedOffsets() const { return !h asTransformRelatedProperty() && !hasReflection() && !style()->isFlippedBlocksWri tingMode(); }
1057 1050
1058 virtual LayoutRect viewRect() const; 1051 virtual LayoutRect viewRect() const;
1059 1052
1060 DisplayItemClient displayItemClient() const { return toDisplayItemClient(thi s); } 1053 DisplayItemClient displayItemClient() const { return toDisplayItemClient(thi s); }
1061 1054
1062 void invalidateDisplayItemClient(const NonLayoutObjectDisplayItemClientWrapp er&); 1055 void invalidateDisplayItemClient(const NonLayoutObjectDisplayItemClientWrapp er&);
1063 void invalidateDisplayItemClient(LayoutObject&); 1056 void invalidateDisplayItemClient(LayoutObject&);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 // Overrides should call the superclass at the end. m_style will be 0 the fi rst time 1147 // Overrides should call the superclass at the end. m_style will be 0 the fi rst time
1155 // this function will be called. 1148 // this function will be called.
1156 virtual void styleWillChange(StyleDifference, const ComputedStyle& newStyle) ; 1149 virtual void styleWillChange(StyleDifference, const ComputedStyle& newStyle) ;
1157 // Overrides should call the superclass at the start. |oldStyle| will be 0 t he first 1150 // Overrides should call the superclass at the start. |oldStyle| will be 0 t he first
1158 // time this function is called. 1151 // time this function is called.
1159 virtual void styleDidChange(StyleDifference, const ComputedStyle* oldStyle); 1152 virtual void styleDidChange(StyleDifference, const ComputedStyle* oldStyle);
1160 void propagateStyleToAnonymousChildren(bool blockChildrenOnly = false); 1153 void propagateStyleToAnonymousChildren(bool blockChildrenOnly = false);
1161 virtual void updateAnonymousChildStyle(const LayoutObject& child, ComputedSt yle& style) const { } 1154 virtual void updateAnonymousChildStyle(const LayoutObject& child, ComputedSt yle& style) const { }
1162 1155
1163 protected: 1156 protected:
1164 void setSelfMayNeedPaintInvalidation();
1165
1166 virtual void willBeDestroyed(); 1157 virtual void willBeDestroyed();
1167 1158
1168 virtual void insertedIntoTree(); 1159 virtual void insertedIntoTree();
1169 virtual void willBeRemovedFromTree(); 1160 virtual void willBeRemovedFromTree();
1170 1161
1171 void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_ node = document; } 1162 void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_ node = document; }
1172 1163
1173 // Add hit-test rects for the layout tree rooted at this node to the provide d collection on a 1164 // Add hit-test rects for the layout tree rooted at this node to the provide d collection on a
1174 // per-Layer basis. 1165 // per-Layer basis.
1175 // currentLayer must be the enclosing layer, and layerOffset is the current offset within 1166 // currentLayer must be the enclosing layer, and layerOffset is the current offset within
(...skipping 12 matching lines...) Expand all
1188 const LayoutRect& oldPaintInvalidationRect, const LayoutPoint& oldPositi onFromPaintInvalidationBacking, 1179 const LayoutRect& oldPaintInvalidationRect, const LayoutPoint& oldPositi onFromPaintInvalidationBacking,
1189 const LayoutRect& newPaintInvalidationRect, const LayoutPoint& newPositi onFromPaintInvalidationBacking) const; 1180 const LayoutRect& newPaintInvalidationRect, const LayoutPoint& newPositi onFromPaintInvalidationBacking) const;
1190 virtual void incrementallyInvalidatePaint(const LayoutBoxModelObject& paintI nvalidationContainer, const LayoutRect& oldBounds, const LayoutRect& newBounds, const LayoutPoint& positionFromPaintInvalidationBacking); 1181 virtual void incrementallyInvalidatePaint(const LayoutBoxModelObject& paintI nvalidationContainer, const LayoutRect& oldBounds, const LayoutRect& newBounds, const LayoutPoint& positionFromPaintInvalidationBacking);
1191 void fullyInvalidatePaint(const LayoutBoxModelObject& paintInvalidationConta iner, PaintInvalidationReason, const LayoutRect& oldBounds, const LayoutRect& ne wBounds); 1182 void fullyInvalidatePaint(const LayoutBoxModelObject& paintInvalidationConta iner, PaintInvalidationReason, const LayoutRect& oldBounds, const LayoutRect& ne wBounds);
1192 1183
1193 virtual bool hasNonCompositedScrollbars() const { return false; } 1184 virtual bool hasNonCompositedScrollbars() const { return false; }
1194 1185
1195 #if ENABLE(ASSERT) 1186 #if ENABLE(ASSERT)
1196 virtual bool paintInvalidationStateIsDirty() const 1187 virtual bool paintInvalidationStateIsDirty() const
1197 { 1188 {
1198 return neededLayoutBecauseOfChildren() || shouldCheckForPaintInvalidatio nRegardlessOfPaintInvalidationState(); 1189 return m_bitfields.neededLayoutBecauseOfChildren() || shouldCheckForPain tInvalidationRegardlessOfPaintInvalidationState();
1199 } 1190 }
1200 #endif 1191 #endif
1201 1192
1202 virtual void invalidatePaintOfSubtreesIfNeeded(PaintInvalidationState& child PaintInvalidationState); 1193 virtual void invalidatePaintOfSubtreesIfNeeded(PaintInvalidationState& child PaintInvalidationState);
1203 virtual PaintInvalidationReason invalidatePaintIfNeeded(PaintInvalidationSta te&, const LayoutBoxModelObject& paintInvalidationContainer); 1194 virtual PaintInvalidationReason invalidatePaintIfNeeded(PaintInvalidationSta te&, const LayoutBoxModelObject& paintInvalidationContainer);
1204 1195
1205 // When this object is invalidated for paint, this method is called to inval idate any DisplayItemClients 1196 // When this object is invalidated for paint, this method is called to inval idate any DisplayItemClients
1206 // owned by this object, including the object itself, LayoutText/LayoutInlin e line boxes, etc., 1197 // owned by this object, including the object itself, LayoutText/LayoutInlin e line boxes, etc.,
1207 // not including children which will be invalidated normally during invalida teTreeIfNeeded() and 1198 // not including children which will be invalidated normally during invalida teTreeIfNeeded() and
1208 // parts which are invalidated separately (e.g. scrollbars). 1199 // parts which are invalidated separately (e.g. scrollbars).
1209 virtual void invalidateDisplayItemClients(const LayoutBoxModelObject& paintI nvalidationContainer); 1200 virtual void invalidateDisplayItemClients(const LayoutBoxModelObject& paintI nvalidationContainer);
1210 1201
1211 virtual bool clearRepaintFlagsOfSubtrees(); 1202 virtual bool clearRepaintFlagsOfSubtrees();
1212 1203
1213 void setIsSlowRepaintObject(bool); 1204 void setIsSlowRepaintObject(bool);
1214 1205
1206 void clearSelfNeedsOverflowRecalcAfterStyleChange() { m_bitfields.setSelfNee dsOverflowRecalcAfterStyleChange(false); }
1207 void clearChildNeedsOverflowRecalcAfterStyleChange() { m_bitfields.setChildN eedsOverflowRecalcAfterStyleChange(false); }
1208
1209 void setShouldInvalidateOverflowForPaint() { m_bitfields.setShouldInvalidate OverflowForPaint(true); }
1210 void setEverHadLayout() { m_bitfields.setEverHadLayout(true); }
1211
1215 private: 1212 private:
1216 const LayoutRect& previousPaintInvalidationRect() const { return m_previousP aintInvalidationRect; } 1213 const LayoutRect& previousPaintInvalidationRect() const { return m_previousP aintInvalidationRect; }
1217 1214
1218 // Adjusts a paint invalidation rect in the space of |m_previousPaintInvalid ationRect| and |m_previousPositionFromPaintInvalidationBacking| 1215 // Adjusts a paint invalidation rect in the space of |m_previousPaintInvalid ationRect| and |m_previousPositionFromPaintInvalidationBacking|
1219 // to be in the space of the |paintInvalidationContainer|, 1216 // to be in the space of the |paintInvalidationContainer|,
1220 // if needed. They can be different only if |paintInvalidationContainer| is a composited scroller. 1217 // if needed. They can be different only if |paintInvalidationContainer| is a composited scroller.
1221 void adjustInvalidationRectForCompositedScrolling(LayoutRect&, const LayoutB oxModelObject& paintInvalidationContainer) const; 1218 void adjustInvalidationRectForCompositedScrolling(LayoutRect&, const LayoutB oxModelObject& paintInvalidationContainer) const;
1222 1219
1223 void clearLayoutRootIfNeeded() const; 1220 void clearLayoutRootIfNeeded() const;
1224 1221
(...skipping 14 matching lines...) Expand all
1239 1236
1240 inline void markContainerChainForPaintInvalidation(); 1237 inline void markContainerChainForPaintInvalidation();
1241 1238
1242 void markContainerChainForRepaint(); 1239 void markContainerChainForRepaint();
1243 void setChildNeedsRepaint(); 1240 void setChildNeedsRepaint();
1244 1241
1245 inline void invalidateSelectionIfNeeded(const LayoutBoxModelObject&, PaintIn validationReason); 1242 inline void invalidateSelectionIfNeeded(const LayoutBoxModelObject&, PaintIn validationReason);
1246 1243
1247 inline void invalidateContainerPreferredLogicalWidths(); 1244 inline void invalidateContainerPreferredLogicalWidths();
1248 1245
1249 void clearMayNeedPaintInvalidation();
1250
1251 void setLayoutDidGetCalledSinceLastFrame();
1252 void clearLayoutDidGetCalledSinceLastFrame() { m_bitfields.setLayoutDidGetCa lledSinceLastFrame(false); }
1253
1254 void invalidatePaintIncludingNonCompositingDescendantsInternal(const LayoutB oxModelObject& repaintContainer); 1246 void invalidatePaintIncludingNonCompositingDescendantsInternal(const LayoutB oxModelObject& repaintContainer);
1255 1247
1256 LayoutRect previousSelectionRectForPaintInvalidation() const; 1248 LayoutRect previousSelectionRectForPaintInvalidation() const;
1257 void setPreviousSelectionRectForPaintInvalidation(const LayoutRect&); 1249 void setPreviousSelectionRectForPaintInvalidation(const LayoutRect&);
1258 1250
1259 const LayoutBoxModelObject* enclosingCompositedContainer() const; 1251 const LayoutBoxModelObject* enclosingCompositedContainer() const;
1260 1252
1261 LayoutFlowThread* locateFlowThreadContainingBlock() const; 1253 LayoutFlowThread* locateFlowThreadContainingBlock() const;
1262 void removeFromLayoutFlowThread(); 1254 void removeFromLayoutFlowThread();
1263 void removeFromLayoutFlowThreadRecursive(LayoutFlowThread*); 1255 void removeFromLayoutFlowThreadRecursive(LayoutFlowThread*);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1308 IsStaticallyPositioned = 0, 1300 IsStaticallyPositioned = 0,
1309 IsRelativelyPositioned = 1, 1301 IsRelativelyPositioned = 1,
1310 IsOutOfFlowPositioned = 2, 1302 IsOutOfFlowPositioned = 2,
1311 IsStickyPositioned = 3, 1303 IsStickyPositioned = 3,
1312 }; 1304 };
1313 1305
1314 public: 1306 public:
1315 LayoutObjectBitfields(Node* node) 1307 LayoutObjectBitfields(Node* node)
1316 : m_selfNeedsLayout(false) 1308 : m_selfNeedsLayout(false)
1317 , m_shouldInvalidateOverflowForPaint(false) 1309 , m_shouldInvalidateOverflowForPaint(false)
1318 // FIXME: We should remove mayNeedPaintInvalidation once we are able to 1310 , m_childShouldCheckForPaintInvalidation(false)
1319 // use the other layout flags to detect the same cases. crbug.com/37 0118
1320 , m_mayNeedPaintInvalidation(false) 1311 , m_mayNeedPaintInvalidation(false)
1321 , m_shouldInvalidateSelection(false) 1312 , m_shouldInvalidateSelection(false)
1322 , m_neededLayoutBecauseOfChildren(false) 1313 , m_neededLayoutBecauseOfChildren(false)
1323 , m_needsPositionedMovementLayout(false) 1314 , m_needsPositionedMovementLayout(false)
1324 , m_normalChildNeedsLayout(false) 1315 , m_normalChildNeedsLayout(false)
1325 , m_posChildNeedsLayout(false) 1316 , m_posChildNeedsLayout(false)
1326 , m_needsSimplifiedNormalFlowLayout(false) 1317 , m_needsSimplifiedNormalFlowLayout(false)
1327 , m_preferredLogicalWidthsDirty(false) 1318 , m_preferredLogicalWidthsDirty(false)
1328 , m_floating(false) 1319 , m_floating(false)
1329 , m_selfNeedsOverflowRecalcAfterStyleChange(false) 1320 , m_selfNeedsOverflowRecalcAfterStyleChange(false)
1330 , m_childNeedsOverflowRecalcAfterStyleChange(false) 1321 , m_childNeedsOverflowRecalcAfterStyleChange(false)
1331 , m_isAnonymous(!node) 1322 , m_isAnonymous(!node)
1332 , m_isText(false) 1323 , m_isText(false)
1333 , m_isBox(false) 1324 , m_isBox(false)
1334 , m_isInline(true) 1325 , m_isInline(true)
1335 , m_isReplaced(false) 1326 , m_isReplaced(false)
1336 , m_horizontalWritingMode(true) 1327 , m_horizontalWritingMode(true)
1337 , m_isDragging(false) 1328 , m_isDragging(false)
1338 , m_hasLayer(false) 1329 , m_hasLayer(false)
1339 , m_hasOverflowClip(false) 1330 , m_hasOverflowClip(false)
1340 , m_hasTransformRelatedProperty(false) 1331 , m_hasTransformRelatedProperty(false)
1341 , m_hasReflection(false) 1332 , m_hasReflection(false)
1342 , m_hasCounterNodeMap(false) 1333 , m_hasCounterNodeMap(false)
1343 , m_everHadLayout(false) 1334 , m_everHadLayout(false)
1344 , m_ancestorLineBoxDirty(false) 1335 , m_ancestorLineBoxDirty(false)
1345 , m_layoutDidGetCalledSinceLastFrame(false)
1346 , m_hasPendingResourceUpdate(false) 1336 , m_hasPendingResourceUpdate(false)
1347 , m_isInsideFlowThread(false) 1337 , m_isInsideFlowThread(false)
1348 , m_subtreeChangeListenerRegistered(false) 1338 , m_subtreeChangeListenerRegistered(false)
1349 , m_notifiedOfSubtreeChange(false) 1339 , m_notifiedOfSubtreeChange(false)
1350 , m_consumesSubtreeChangeNotification(false) 1340 , m_consumesSubtreeChangeNotification(false)
1351 , m_childrenInline(false) 1341 , m_childrenInline(false)
1352 , m_alwaysCreateLineBoxesForLayoutInline(false) 1342 , m_alwaysCreateLineBoxesForLayoutInline(false)
1353 , m_lastBoxDecorationBackgroundObscured(false) 1343 , m_lastBoxDecorationBackgroundObscured(false)
1354 , m_isSlowRepaintObject(false) 1344 , m_isSlowRepaintObject(false)
1355 , m_selfNeedsRepaint(false) 1345 , m_selfNeedsRepaint(false)
1356 , m_childNeedsRepaint(false) 1346 , m_childNeedsRepaint(false)
1357 , m_positionedState(IsStaticallyPositioned) 1347 , m_positionedState(IsStaticallyPositioned)
1358 , m_selectionState(SelectionNone) 1348 , m_selectionState(SelectionNone)
1359 , m_boxDecorationBackgroundState(NoBoxDecorationBackground) 1349 , m_boxDecorationBackgroundState(NoBoxDecorationBackground)
1360 , m_fullPaintInvalidationReason(PaintInvalidationNone) 1350 , m_fullPaintInvalidationReason(PaintInvalidationNone)
1361 { 1351 {
1362 } 1352 }
1363 1353
1364 // 32 bits have been used in the first word, and 18 in the second. 1354 // 32 bits have been used in the first word, and 18 in the second.
1365 ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout); 1355 ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout);
1366 ADD_BOOLEAN_BITFIELD(shouldInvalidateOverflowForPaint, ShouldInvalidateO verflowForPaint); 1356 ADD_BOOLEAN_BITFIELD(shouldInvalidateOverflowForPaint, ShouldInvalidateO verflowForPaint); // TODO: Remove for slimming paint v2.
leviw_travelin_and_unemployed 2015/08/20 22:52:02 Nit: TODO's should have your username.
1357 ADD_BOOLEAN_BITFIELD(childShouldCheckForPaintInvalidation, ChildShouldCh eckForPaintInvalidation);
1367 ADD_BOOLEAN_BITFIELD(mayNeedPaintInvalidation, MayNeedPaintInvalidation) ; 1358 ADD_BOOLEAN_BITFIELD(mayNeedPaintInvalidation, MayNeedPaintInvalidation) ;
1368 ADD_BOOLEAN_BITFIELD(shouldInvalidateSelection, ShouldInvalidateSelectio n); 1359 ADD_BOOLEAN_BITFIELD(shouldInvalidateSelection, ShouldInvalidateSelectio n); // TODO: Remove for slimming paint v2.
1369 ADD_BOOLEAN_BITFIELD(neededLayoutBecauseOfChildren, NeededLayoutBecauseO fChildren); 1360 ADD_BOOLEAN_BITFIELD(neededLayoutBecauseOfChildren, NeededLayoutBecauseO fChildren); // TODO: Remove for slimming paint v2.
1370 ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovem entLayout); 1361 ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovem entLayout);
1371 ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout); 1362 ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout);
1372 ADD_BOOLEAN_BITFIELD(posChildNeedsLayout, PosChildNeedsLayout); 1363 ADD_BOOLEAN_BITFIELD(posChildNeedsLayout, PosChildNeedsLayout);
1373 ADD_BOOLEAN_BITFIELD(needsSimplifiedNormalFlowLayout, NeedsSimplifiedNor malFlowLayout); 1364 ADD_BOOLEAN_BITFIELD(needsSimplifiedNormalFlowLayout, NeedsSimplifiedNor malFlowLayout);
1374 ADD_BOOLEAN_BITFIELD(preferredLogicalWidthsDirty, PreferredLogicalWidths Dirty); 1365 ADD_BOOLEAN_BITFIELD(preferredLogicalWidthsDirty, PreferredLogicalWidths Dirty);
1375 ADD_BOOLEAN_BITFIELD(floating, Floating); 1366 ADD_BOOLEAN_BITFIELD(floating, Floating);
1376 ADD_BOOLEAN_BITFIELD(selfNeedsOverflowRecalcAfterStyleChange, SelfNeedsO verflowRecalcAfterStyleChange); 1367 ADD_BOOLEAN_BITFIELD(selfNeedsOverflowRecalcAfterStyleChange, SelfNeedsO verflowRecalcAfterStyleChange);
1377 ADD_BOOLEAN_BITFIELD(childNeedsOverflowRecalcAfterStyleChange, ChildNeed sOverflowRecalcAfterStyleChange); 1368 ADD_BOOLEAN_BITFIELD(childNeedsOverflowRecalcAfterStyleChange, ChildNeed sOverflowRecalcAfterStyleChange);
1378 1369
1379 ADD_BOOLEAN_BITFIELD(isAnonymous, IsAnonymous); 1370 ADD_BOOLEAN_BITFIELD(isAnonymous, IsAnonymous);
1380 ADD_BOOLEAN_BITFIELD(isText, IsText); 1371 ADD_BOOLEAN_BITFIELD(isText, IsText);
1381 ADD_BOOLEAN_BITFIELD(isBox, IsBox); 1372 ADD_BOOLEAN_BITFIELD(isBox, IsBox);
1382 ADD_BOOLEAN_BITFIELD(isInline, IsInline); 1373 ADD_BOOLEAN_BITFIELD(isInline, IsInline);
1383 ADD_BOOLEAN_BITFIELD(isReplaced, IsReplaced); 1374 ADD_BOOLEAN_BITFIELD(isReplaced, IsReplaced);
1384 ADD_BOOLEAN_BITFIELD(horizontalWritingMode, HorizontalWritingMode); 1375 ADD_BOOLEAN_BITFIELD(horizontalWritingMode, HorizontalWritingMode);
1385 ADD_BOOLEAN_BITFIELD(isDragging, IsDragging); 1376 ADD_BOOLEAN_BITFIELD(isDragging, IsDragging);
1386 1377
1387 ADD_BOOLEAN_BITFIELD(hasLayer, HasLayer); 1378 ADD_BOOLEAN_BITFIELD(hasLayer, HasLayer);
1388 ADD_BOOLEAN_BITFIELD(hasOverflowClip, HasOverflowClip); // Set in the ca se of overflow:auto/scroll/hidden 1379 ADD_BOOLEAN_BITFIELD(hasOverflowClip, HasOverflowClip); // Set in the ca se of overflow:auto/scroll/hidden
1389 ADD_BOOLEAN_BITFIELD(hasTransformRelatedProperty, HasTransformRelatedPro perty); 1380 ADD_BOOLEAN_BITFIELD(hasTransformRelatedProperty, HasTransformRelatedPro perty);
1390 ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection); 1381 ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection);
1391 1382
1392 ADD_BOOLEAN_BITFIELD(hasCounterNodeMap, HasCounterNodeMap); 1383 ADD_BOOLEAN_BITFIELD(hasCounterNodeMap, HasCounterNodeMap);
1393 ADD_BOOLEAN_BITFIELD(everHadLayout, EverHadLayout); 1384 ADD_BOOLEAN_BITFIELD(everHadLayout, EverHadLayout);
1394 ADD_BOOLEAN_BITFIELD(ancestorLineBoxDirty, AncestorLineBoxDirty); 1385 ADD_BOOLEAN_BITFIELD(ancestorLineBoxDirty, AncestorLineBoxDirty);
1395 1386
1396 ADD_BOOLEAN_BITFIELD(layoutDidGetCalledSinceLastFrame, LayoutDidGetCalle dSinceLastFrame);
1397
1398 ADD_BOOLEAN_BITFIELD(hasPendingResourceUpdate, HasPendingResourceUpdate) ; 1387 ADD_BOOLEAN_BITFIELD(hasPendingResourceUpdate, HasPendingResourceUpdate) ;
1399 1388
1400 ADD_BOOLEAN_BITFIELD(isInsideFlowThread, IsInsideFlowThread); 1389 ADD_BOOLEAN_BITFIELD(isInsideFlowThread, IsInsideFlowThread);
1401 1390
1402 ADD_BOOLEAN_BITFIELD(subtreeChangeListenerRegistered, SubtreeChangeListe nerRegistered); 1391 ADD_BOOLEAN_BITFIELD(subtreeChangeListenerRegistered, SubtreeChangeListe nerRegistered);
1403 ADD_BOOLEAN_BITFIELD(notifiedOfSubtreeChange, NotifiedOfSubtreeChange); 1392 ADD_BOOLEAN_BITFIELD(notifiedOfSubtreeChange, NotifiedOfSubtreeChange);
1404 ADD_BOOLEAN_BITFIELD(consumesSubtreeChangeNotification, ConsumesSubtreeC hangeNotification); 1393 ADD_BOOLEAN_BITFIELD(consumesSubtreeChangeNotification, ConsumesSubtreeC hangeNotification);
1405 1394
1406 // from LayoutBlock 1395 // from LayoutBlock
1407 ADD_BOOLEAN_BITFIELD(childrenInline, ChildrenInline); 1396 ADD_BOOLEAN_BITFIELD(childrenInline, ChildrenInline);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1447 ALWAYS_INLINE void setBoxDecorationBackgroundState(BoxDecorationBackgrou ndState s) { m_boxDecorationBackgroundState = s; } 1436 ALWAYS_INLINE void setBoxDecorationBackgroundState(BoxDecorationBackgrou ndState s) { m_boxDecorationBackgroundState = s; }
1448 1437
1449 PaintInvalidationReason fullPaintInvalidationReason() const { return sta tic_cast<PaintInvalidationReason>(m_fullPaintInvalidationReason); } 1438 PaintInvalidationReason fullPaintInvalidationReason() const { return sta tic_cast<PaintInvalidationReason>(m_fullPaintInvalidationReason); }
1450 void setFullPaintInvalidationReason(PaintInvalidationReason reason) { m_ fullPaintInvalidationReason = reason; } 1439 void setFullPaintInvalidationReason(PaintInvalidationReason reason) { m_ fullPaintInvalidationReason = reason; }
1451 }; 1440 };
1452 1441
1453 #undef ADD_BOOLEAN_BITFIELD 1442 #undef ADD_BOOLEAN_BITFIELD
1454 1443
1455 LayoutObjectBitfields m_bitfields; 1444 LayoutObjectBitfields m_bitfields;
1456 1445
1457 void setSelfNeedsLayout(bool b) { m_bitfields.setSelfNeedsLayout(b); }
1458 void setNeedsPositionedMovementLayout(bool b) { m_bitfields.setNeedsPosition edMovementLayout(b); }
1459 void setNormalChildNeedsLayout(bool b) { m_bitfields.setNormalChildNeedsLayo ut(b); }
1460 void setPosChildNeedsLayout(bool b) { m_bitfields.setPosChildNeedsLayout(b); }
1461 void setNeedsSimplifiedNormalFlowLayout(bool b) { m_bitfields.setNeedsSimpli fiedNormalFlowLayout(b); }
1462 void setIsDragging(bool b) { m_bitfields.setIsDragging(b); }
1463 void setEverHadLayout(bool b) { m_bitfields.setEverHadLayout(b); }
1464 void setShouldInvalidateOverflowForPaint(bool b) { m_bitfields.setShouldInva lidateOverflowForPaint(b); }
1465 void setSelfNeedsOverflowRecalcAfterStyleChange(bool b) { m_bitfields.setSel fNeedsOverflowRecalcAfterStyleChange(b); }
1466 void setChildNeedsOverflowRecalcAfterStyleChange(bool b) { m_bitfields.setCh ildNeedsOverflowRecalcAfterStyleChange(b); }
1467
1468 private: 1446 private:
1469 // Store state between styleWillChange and styleDidChange 1447 // Store state between styleWillChange and styleDidChange
1470 static bool s_affectsParentBlock; 1448 static bool s_affectsParentBlock;
1471 1449
1472 // This stores the paint invalidation rect from the previous frame. This rec t does *not* account for composited scrolling. See 1450 // This stores the paint invalidation rect from the previous frame. This rec t does *not* account for composited scrolling. See
1473 // adjustInvalidationRectForCompositedScrolling(). 1451 // adjustInvalidationRectForCompositedScrolling().
1474 LayoutRect m_previousPaintInvalidationRect; 1452 LayoutRect m_previousPaintInvalidationRect;
1475 1453
1476 // This stores the position in the paint invalidation backing's coordinate. 1454 // This stores the position in the paint invalidation backing's coordinate.
1477 // It is used to detect layoutObject shifts that forces a full invalidation. 1455 // It is used to detect layoutObject shifts that forces a full invalidation.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1533 { 1511 {
1534 return isBeforeContent() || isAfterContent(); 1512 return isBeforeContent() || isAfterContent();
1535 } 1513 }
1536 1514
1537 // setNeedsLayout() won't cause full paint invalidations as 1515 // setNeedsLayout() won't cause full paint invalidations as
1538 // setNeedsLayoutAndFullPaintInvalidation() does. Otherwise the two methods are identical. 1516 // setNeedsLayoutAndFullPaintInvalidation() does. Otherwise the two methods are identical.
1539 inline void LayoutObject::setNeedsLayout(LayoutInvalidationReasonForTracing reas on, MarkingBehavior markParents, SubtreeLayoutScope* layouter) 1517 inline void LayoutObject::setNeedsLayout(LayoutInvalidationReasonForTracing reas on, MarkingBehavior markParents, SubtreeLayoutScope* layouter)
1540 { 1518 {
1541 ASSERT(!isSetNeedsLayoutForbidden()); 1519 ASSERT(!isSetNeedsLayoutForbidden());
1542 bool alreadyNeededLayout = m_bitfields.selfNeedsLayout(); 1520 bool alreadyNeededLayout = m_bitfields.selfNeedsLayout();
1543 setSelfNeedsLayout(true); 1521 m_bitfields.setSelfNeedsLayout(true);
1544 if (!alreadyNeededLayout) { 1522 if (!alreadyNeededLayout) {
1545 TRACE_EVENT_INSTANT1( 1523 TRACE_EVENT_INSTANT1(
1546 TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidationTracking"), 1524 TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidationTracking"),
1547 "LayoutInvalidationTracking", 1525 "LayoutInvalidationTracking",
1548 TRACE_EVENT_SCOPE_THREAD, 1526 TRACE_EVENT_SCOPE_THREAD,
1549 "data", 1527 "data",
1550 InspectorLayoutInvalidationTrackingEvent::data(this, reason)); 1528 InspectorLayoutInvalidationTrackingEvent::data(this, reason));
1551 if (markParents == MarkContainerChain && (!layouter || layouter->root() != this)) 1529 if (markParents == MarkContainerChain && (!layouter || layouter->root() != this))
1552 markContainerChainForLayout(true, layouter); 1530 markContainerChainForLayout(true, layouter);
1553 } 1531 }
1554 } 1532 }
1555 1533
1556 inline void LayoutObject::setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidat ionReasonForTracing reason, MarkingBehavior markParents, SubtreeLayoutScope* lay outer) 1534 inline void LayoutObject::setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidat ionReasonForTracing reason, MarkingBehavior markParents, SubtreeLayoutScope* lay outer)
1557 { 1535 {
1558 setNeedsLayout(reason, markParents, layouter); 1536 setNeedsLayout(reason, markParents, layouter);
1559 setShouldDoFullPaintInvalidation(); 1537 setShouldDoFullPaintInvalidation();
1560 } 1538 }
1561 1539
1562 inline void LayoutObject::clearNeedsLayout() 1540 inline void LayoutObject::clearNeedsLayout()
1563 { 1541 {
1564 setNeededLayoutBecauseOfChildren(needsLayoutBecauseOfChildren()); 1542 m_bitfields.setNeededLayoutBecauseOfChildren(needsLayoutBecauseOfChildren()) ;
1565 setLayoutDidGetCalledSinceLastFrame(); 1543 m_bitfields.setSelfNeedsLayout(false);
1566 setSelfNeedsLayout(false); 1544 m_bitfields.setPosChildNeedsLayout(false);
1567 setEverHadLayout(true); 1545 m_bitfields.setNeedsSimplifiedNormalFlowLayout(false);
1568 setPosChildNeedsLayout(false); 1546 m_bitfields.setNormalChildNeedsLayout(false);
1569 setNeedsSimplifiedNormalFlowLayout(false); 1547 m_bitfields.setNeedsPositionedMovementLayout(false);
1570 setNormalChildNeedsLayout(false); 1548 setMayNeedPaintInvalidation();
1571 setNeedsPositionedMovementLayout(false); 1549 setEverHadLayout();
1572 setAncestorLineBoxDirty(false); 1550 setAncestorLineBoxDirty(false);
1573 #if ENABLE(ASSERT) 1551 #if ENABLE(ASSERT)
1574 checkBlockPositionedObjectsNeedLayout(); 1552 checkBlockPositionedObjectsNeedLayout();
1575 #endif 1553 #endif
1576 } 1554 }
1577 1555
1578 inline void LayoutObject::setChildNeedsLayout(MarkingBehavior markParents, Subtr eeLayoutScope* layouter) 1556 inline void LayoutObject::setChildNeedsLayout(MarkingBehavior markParents, Subtr eeLayoutScope* layouter)
1579 { 1557 {
1580 ASSERT(!isSetNeedsLayoutForbidden()); 1558 ASSERT(!isSetNeedsLayoutForbidden());
1581 bool alreadyNeededLayout = normalChildNeedsLayout(); 1559 bool alreadyNeededLayout = normalChildNeedsLayout();
1582 setNormalChildNeedsLayout(true); 1560 m_bitfields.setNormalChildNeedsLayout(true);
1583 // FIXME: Replace MarkOnlyThis with the SubtreeLayoutScope code path and rem ove the MarkingBehavior argument entirely. 1561 // FIXME: Replace MarkOnlyThis with the SubtreeLayoutScope code path and rem ove the MarkingBehavior argument entirely.
1584 if (!alreadyNeededLayout && markParents == MarkContainerChain && (!layouter || layouter->root() != this)) 1562 if (!alreadyNeededLayout && markParents == MarkContainerChain && (!layouter || layouter->root() != this))
1585 markContainerChainForLayout(true, layouter); 1563 markContainerChainForLayout(true, layouter);
1586 } 1564 }
1587 1565
1588 inline void LayoutObject::setNeedsPositionedMovementLayout() 1566 inline void LayoutObject::setNeedsPositionedMovementLayout()
1589 { 1567 {
1590 bool alreadyNeededLayout = needsPositionedMovementLayout(); 1568 bool alreadyNeededLayout = needsPositionedMovementLayout();
1591 setNeedsPositionedMovementLayout(true); 1569 m_bitfields.setNeedsPositionedMovementLayout(true);
1592 ASSERT(!isSetNeedsLayoutForbidden()); 1570 ASSERT(!isSetNeedsLayoutForbidden());
1593 if (!alreadyNeededLayout) 1571 if (!alreadyNeededLayout)
1594 markContainerChainForLayout(); 1572 markContainerChainForLayout();
1595 } 1573 }
1596 1574
1597 inline bool LayoutObject::preservesNewline() const 1575 inline bool LayoutObject::preservesNewline() const
1598 { 1576 {
1599 if (isSVGInlineText()) 1577 if (isSVGInlineText())
1600 return false; 1578 return false;
1601 1579
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1702 void showTree(const blink::LayoutObject*); 1680 void showTree(const blink::LayoutObject*);
1703 void showLineTree(const blink::LayoutObject*); 1681 void showLineTree(const blink::LayoutObject*);
1704 void showLayoutTree(const blink::LayoutObject* object1); 1682 void showLayoutTree(const blink::LayoutObject* object1);
1705 // We don't make object2 an optional parameter so that showLayoutTree 1683 // We don't make object2 an optional parameter so that showLayoutTree
1706 // can be called from gdb easily. 1684 // can be called from gdb easily.
1707 void showLayoutTree(const blink::LayoutObject* object1, const blink::LayoutObjec t* object2); 1685 void showLayoutTree(const blink::LayoutObject* object1, const blink::LayoutObjec t* object2);
1708 1686
1709 #endif 1687 #endif
1710 1688
1711 #endif // LayoutObject_h 1689 #endif // LayoutObject_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698