Index: Source/core/rendering/RenderLayer.h |
diff --git a/Source/core/rendering/RenderLayer.h b/Source/core/rendering/RenderLayer.h |
index 18e40590e594cca3686cdc7101d31c4686587d3d..64bdca6564619d8d1969188ecac24c142ff555ea 100644 |
--- a/Source/core/rendering/RenderLayer.h |
+++ b/Source/core/rendering/RenderLayer.h |
@@ -549,6 +549,9 @@ public: |
// rendering of the page. |
// FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty); here but we may hit the same bugs as visible content above. |
bool hasOutOfFlowPositionedDescendant() const { return m_hasOutOfFlowPositionedDescendant; } |
+ // PATCH 2 -- the change to the OOFPD requires a tree walk. We need to split this into phases |
+ // or else the perf hit will be too great. |
+ void updateHasOutOfFlowPositionedDescendant(HashSet<const RenderObject*>* containingBlocks = 0); |
// Gets the nearest enclosing positioned ancestor layer (also includes |
// the <html> layer and the root layer). |
@@ -814,6 +817,14 @@ public: |
enum PaintOrderListType {BeforePromote, AfterPromote}; |
void computePaintOrderList(PaintOrderListType type, Vector<RefPtr<Node> >&); |
+ // PATCH 1 |
+ enum ForceNeedsCompositedScrollingMode { |
+ DoNotForceCompositedScrolling = 0, |
+ ForceCompositedScrollingOn, |
+ ForceCompositedScrollingOff |
+ }; |
+ void setForceNeedsCompositedScrolling(ForceNeedsCompositedScrollingMode mode); |
+ |
private: |
enum CollectLayersBehavior { StopAtStackingContexts, StopAtStackingContainers }; |
@@ -833,8 +844,9 @@ private: |
void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); |
bool acceleratedCompositingForOverflowScrollEnabled() const; |
- void updateDescendantsAreContiguousInStackingOrder(); |
- void updateDescendantsAreContiguousInStackingOrderRecursive(const HashMap<const RenderLayer*, int>&, int& minIndex, int& maxIndex, int& count, bool firstIteration); |
+ // PATCH 3 |
+ void updateCanBeStackingContainer(RenderLayer*); |
+ void updateCanBeStackingContainerRecursively(RenderLayer*); |
void collectBeforePromotionZOrderList(RenderLayer* ancestorStackingContext, OwnPtr<Vector<RenderLayer*> >& posZOrderListBeforePromote, OwnPtr<Vector<RenderLayer*> >& negZOrderListBeforePromote); |
void collectAfterPromotionZOrderList(RenderLayer* ancestorStackingContext, OwnPtr<Vector<RenderLayer*> >& posZOrderListAfterPromote, OwnPtr<Vector<RenderLayer*> >& negZOrderListAfterPromote); |
@@ -856,11 +868,12 @@ private: |
void updateScrollbarsAfterStyleChange(const RenderStyle* oldStyle); |
void updateScrollbarsAfterLayout(); |
- void setAncestorChainHasOutOfFlowPositionedDescendant(RenderObject* containingBlock); |
- void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); |
+ // PATCH 2 |
void updateOutOfFlowPositioned(const RenderStyle* oldStyle); |
void updateNeedsCompositedScrolling(); |
+ // PATCH 1 |
+ void didUpdateNeedsCompositedScrolling(); |
// Returns true if the position changed. |
bool updateLayerPosition(); |
@@ -1025,7 +1038,8 @@ private: |
void dirtyAncestorChainVisibleDescendantStatus(); |
void setAncestorChainHasVisibleDescendant(); |
- void updateDescendantDependentFlags(HashSet<const RenderObject*>* outOfFlowDescendantContainingBlocks = 0); |
+ // PATCH 2 |
+ void updateDescendantDependentFlags(); |
// This flag is computed by RenderLayerCompositor, which knows more about 3d hierarchies than we do. |
void setHas3DTransformedDescendant(bool b) { m_has3DTransformedDescendant = b; } |
@@ -1128,15 +1142,18 @@ protected: |
// appears between our descendants in stacking order, then we may become a |
// stacking context. |
bool m_hasOutOfFlowPositionedDescendant : 1; |
- bool m_hasOutOfFlowPositionedDescendantDirty : 1; |
+ // PATCH 2 (removal) |
+ // PATCH 1 |
+ ForceNeedsCompositedScrollingMode m_forceNeedsCompositedScrolling; |
bool m_needsCompositedScrolling : 1; |
// If this is true, then no non-descendant appears between any of our |
// descendants in stacking order. This is one of the requirements of being |
// able to safely become a stacking context. |
- bool m_descendantsAreContiguousInStackingOrder : 1; |
- bool m_descendantsAreContiguousInStackingOrderDirty : 1; |
+ // PATCH 3 |
+ bool m_canBePromotedToStackingContainer : 1; |
+ bool m_canBePromotedToStackingContainerDirty : 1; |
const bool m_isRootLayer : 1; |