| Index: Source/WebCore/rendering/RenderLayer.cpp
|
| diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp
|
| index c4787b98c1b85f14ef32d7096cf2f4c121f39b59..8cbfb94447a93139debde788f6c752944355f998 100644
|
| --- a/Source/WebCore/rendering/RenderLayer.cpp
|
| +++ b/Source/WebCore/rendering/RenderLayer.cpp
|
| @@ -146,9 +146,10 @@ RenderLayer::RenderLayer(RenderLayerModelObject* renderer)
|
| , m_hasSelfPaintingLayerDescendant(false)
|
| , m_hasSelfPaintingLayerDescendantDirty(false)
|
| , m_hasOutOfFlowPositionedDescendant(false)
|
| - , m_hasOutOfFlowPositionedDescendantDirty(true)
|
| + , m_hasOutOfFlowPositionedDescendantDirty(false)
|
| , m_needsCompositedScrolling(false)
|
| - , m_descendantsAreContiguousInStackingOrder(false)
|
| + , m_descendantsAreContiguousInStackingOrder(true)
|
| + , m_descendantsAreContiguousInStackingOrderDirty(false)
|
| , m_isRootLayer(renderer->isRenderView())
|
| , m_usedTransparency(false)
|
| , m_paintingInsideReflection(false)
|
| @@ -595,11 +596,10 @@ bool RenderLayer::acceleratedCompositingForOverflowScrollEnabled() const
|
| // And we would conclude that C could be promoted.
|
| void RenderLayer::updateDescendantsAreContiguousInStackingOrder()
|
| {
|
| - if (!isStackingContext() || !acceleratedCompositingForOverflowScrollEnabled())
|
| + if (!m_descendantsAreContiguousInStackingOrderDirty || !isStackingContext() || !acceleratedCompositingForOverflowScrollEnabled()) {
|
| + m_descendantsAreContiguousInStackingOrderDirty = false;
|
| return;
|
| -
|
| - ASSERT(!m_normalFlowListDirty);
|
| - ASSERT(!m_zOrderListsDirty);
|
| + }
|
|
|
| OwnPtr<Vector<RenderLayer*> > posZOrderList;
|
| OwnPtr<Vector<RenderLayer*> > negZOrderList;
|
| @@ -635,10 +635,14 @@ void RenderLayer::updateDescendantsAreContiguousInStackingOrder()
|
| int count = 0;
|
| bool firstIteration = true;
|
| updateDescendantsAreContiguousInStackingOrderRecursive(lookup, minIndex, maxIndex, count, firstIteration);
|
| +
|
| + m_descendantsAreContiguousInStackingOrderDirty = false;
|
| }
|
|
|
| void RenderLayer::updateDescendantsAreContiguousInStackingOrderRecursive(const HashMap<const RenderLayer*, int>& lookup, int& minIndex, int& maxIndex, int& count, bool firstIteration)
|
| {
|
| + m_descendantsAreContiguousInStackingOrderDirty = false;
|
| +
|
| if (isStackingContext() && !firstIteration) {
|
| if (lookup.contains(this)) {
|
| minIndex = std::min(minIndex, lookup.get(this));
|
| @@ -660,13 +664,8 @@ void RenderLayer::updateDescendantsAreContiguousInStackingOrderRecursive(const H
|
| }
|
| }
|
|
|
| - if (!isStackingContext()) {
|
| - bool newValue = maxIndex - minIndex == count;
|
| - bool didUpdate = newValue != m_descendantsAreContiguousInStackingOrder;
|
| - m_descendantsAreContiguousInStackingOrder = newValue;
|
| - if (didUpdate)
|
| - updateNeedsCompositedScrolling();
|
| - }
|
| + if (!isStackingContext())
|
| + m_descendantsAreContiguousInStackingOrder = maxIndex - minIndex == count;
|
| }
|
|
|
| void RenderLayer::computeRepaintRects(const RenderLayerModelObject* repaintContainer, const RenderGeometryMap* geometryMap)
|
| @@ -971,11 +970,12 @@ bool RenderLayer::canBeStackingContainer() const
|
| if (isStackingContext() || !stackingContainer())
|
| return true;
|
|
|
| + ASSERT(!m_descendantsAreContiguousInStackingOrderDirty);
|
| return m_descendantsAreContiguousInStackingOrder;
|
| }
|
|
|
| void RenderLayer::setHasVisibleContent()
|
| -{
|
| +{
|
| if (m_hasVisibleContent && !m_visibleContentStatusDirty) {
|
| ASSERT(!parent() || parent()->hasVisibleDescendant());
|
| return;
|
| @@ -988,7 +988,7 @@ void RenderLayer::setHasVisibleContent()
|
| // We don't collect invisible layers in z-order lists if we are not in compositing mode.
|
| // As we became visible, we need to dirty our stacking containers ancestors to be properly
|
| // collected. FIXME: When compositing, we could skip this dirtying phase.
|
| - for (RenderLayer* sc = stackingContainer(); sc; sc = sc->stackingContainer()) {
|
| + for (RenderLayer* sc = parent(); sc; sc = sc->parent()) {
|
| sc->dirtyZOrderLists();
|
| if (sc->hasVisibleContent())
|
| break;
|
| @@ -1051,7 +1051,7 @@ void RenderLayer::updateDescendantDependentFlags(HashSet<const RenderObject*>* o
|
|
|
| bool hasVisibleDescendant = child->m_hasVisibleContent || child->m_hasVisibleDescendant;
|
| bool hasSelfPaintingLayerDescendant = child->isSelfPaintingLayer() || child->hasSelfPaintingLayerDescendant();
|
| - bool hasOutOfFlowPositionedDescendant = !childOutOfFlowDescendantContainingBlocks.isEmpty();
|
| + bool hasOutOfFlowPositionedDescendant = !childOutOfFlowDescendantContainingBlocks.isEmpty() || child->hasOutOfFlowPositionedDescendant();
|
|
|
| m_hasVisibleDescendant |= hasVisibleDescendant;
|
| m_hasSelfPaintingLayerDescendant |= hasSelfPaintingLayerDescendant;
|
| @@ -1066,10 +1066,6 @@ void RenderLayer::updateDescendantDependentFlags(HashSet<const RenderObject*>* o
|
|
|
| m_visibleDescendantStatusDirty = false;
|
| m_hasSelfPaintingLayerDescendantDirty = false;
|
| -
|
| - if (m_hasOutOfFlowPositionedDescendantDirty)
|
| - updateNeedsCompositedScrolling();
|
| -
|
| m_hasOutOfFlowPositionedDescendantDirty = false;
|
| }
|
|
|
| @@ -1277,13 +1273,13 @@ FloatPoint RenderLayer::perspectiveOrigin() const
|
| floatValueForLength(style->perspectiveOriginY(), borderBox.height()));
|
| }
|
|
|
| -RenderLayer* RenderLayer::stackingContainer() const
|
| +RenderLayer* RenderLayer::stackingContainer(bool allowDirty) const
|
| {
|
| RenderLayer* layer = parent();
|
| - while (layer && !layer->isStackingContainer())
|
| + while (layer && !layer->isStackingContainer(allowDirty))
|
| layer = layer->parent();
|
|
|
| - ASSERT(!layer || layer->isStackingContainer());
|
| + ASSERT(!layer || layer->isStackingContainer(allowDirty));
|
| return layer;
|
| }
|
|
|
| @@ -1331,9 +1327,9 @@ RenderLayer* RenderLayer::enclosingTransformedAncestor() const
|
| return curr;
|
| }
|
|
|
| -static inline const RenderLayer* compositingContainer(const RenderLayer* layer)
|
| +static inline const RenderLayer* compositingContainer(const RenderLayer* layer, bool allowDirty = false)
|
| {
|
| - return layer->isNormalFlowOnly() ? layer->parent() : layer->stackingContainer();
|
| + return layer->isNormalFlowOnly() ? layer->parent() : layer->stackingContainer(allowDirty);
|
| }
|
|
|
| inline bool RenderLayer::shouldRepaintAfterLayout() const
|
| @@ -1365,7 +1361,7 @@ RenderLayer* RenderLayer::enclosingCompositingLayerForRepaint(bool includeSelf)
|
| if (includeSelf && isComposited() && !backing()->paintsIntoCompositedAncestor())
|
| return const_cast<RenderLayer*>(this);
|
|
|
| - for (const RenderLayer* curr = compositingContainer(this); curr; curr = compositingContainer(curr)) {
|
| + for (const RenderLayer* curr = compositingContainer(this, true); curr; curr = compositingContainer(curr, true)) {
|
| if (curr->isComposited() && !curr->backing()->paintsIntoCompositedAncestor())
|
| return const_cast<RenderLayer*>(curr);
|
| }
|
| @@ -1677,6 +1673,7 @@ void RenderLayer::addChild(RenderLayer* child, RenderLayer* beforeChild)
|
| // case where we're building up generated content layers. This is ok, since the lists will start
|
| // off dirty in that case anyway.
|
| child->dirtyStackingContainerZOrderLists();
|
| + child->m_descendantsAreContiguousInStackingOrderDirty = true;
|
| }
|
|
|
| child->updateDescendantDependentFlags();
|
| @@ -1710,11 +1707,12 @@ RenderLayer* RenderLayer::removeChild(RenderLayer* oldChild)
|
|
|
| if (oldChild->isNormalFlowOnly())
|
| dirtyNormalFlowList();
|
| - if (!oldChild->isNormalFlowOnly() || oldChild->firstChild()) {
|
| + if (!oldChild->isNormalFlowOnly() || oldChild->firstChild()) {
|
| // Dirty the z-order list in which we are contained. When called via the
|
| // reattachment process in removeOnlyThisLayer, the layer may already be disconnected
|
| // from the main layer tree, so we need to null-check the |stackingContainer| value.
|
| oldChild->dirtyStackingContainerZOrderLists();
|
| + m_descendantsAreContiguousInStackingOrderDirty = true;
|
| }
|
|
|
| if ((oldChild->renderer() && oldChild->renderer()->isOutOfFlowPositioned()) || oldChild->hasOutOfFlowPositionedDescendant())
|
| @@ -1723,7 +1721,7 @@ RenderLayer* RenderLayer::removeChild(RenderLayer* oldChild)
|
| oldChild->setPreviousSibling(0);
|
| oldChild->setNextSibling(0);
|
| oldChild->setParent(0);
|
| -
|
| +
|
| oldChild->updateDescendantDependentFlags();
|
| if (oldChild->m_hasVisibleContent || oldChild->m_hasVisibleDescendant)
|
| dirtyAncestorChainVisibleDescendantStatus();
|
| @@ -1937,48 +1935,67 @@ bool RenderLayer::usesCompositedScrolling() const
|
| return isComposited() && backing()->scrollingLayer();
|
| }
|
|
|
| -bool RenderLayer::needsCompositedScrolling() const
|
| +bool RenderLayer::needsCompositedScrolling(bool allowDirty) const
|
| {
|
| + ASSERT(allowDirty || !m_descendantsAreContiguousInStackingOrderDirty);
|
| + ASSERT(allowDirty || !m_hasOutOfFlowPositionedDescendantDirty);
|
| return m_needsCompositedScrolling;
|
| }
|
|
|
| void RenderLayer::updateNeedsCompositedScrolling()
|
| {
|
| - bool oldNeedsCompositedScrolling = m_needsCompositedScrolling;
|
| + bool needsCompositedScrolling = false;
|
|
|
| FrameView* frameView = renderer()->view()->frameView();
|
| - if (!frameView || !frameView->containsScrollableArea(this))
|
| - m_needsCompositedScrolling = false;
|
| - else {
|
| + if (frameView && frameView->containsScrollableArea(this)) {
|
| bool forceUseCompositedScrolling = acceleratedCompositingForOverflowScrollEnabled()
|
| && canBeStackingContainer()
|
| && !hasOutOfFlowPositionedDescendant();
|
|
|
| #if ENABLE(ACCELERATED_OVERFLOW_SCROLLING)
|
| - m_needsCompositedScrolling = forceUseCompositedScrolling || renderer()->style()->useTouchOverflowScrolling();
|
| + needsCompositedScrolling = forceUseCompositedScrolling || renderer()->style()->useTouchOverflowScrolling();
|
| #else
|
| - m_needsCompositedScrolling = forceUseCompositedScrolling;
|
| + needsCompositedScrolling = forceUseCompositedScrolling;
|
| #endif
|
| // We gather a boolean value for use with Google UMA histograms to
|
| // quantify the actual effects of a set of patches attempting to
|
| // relax composited scrolling requirements, thereby increasing the
|
| // number of composited overflow divs.
|
| if (acceleratedCompositingForOverflowScrollEnabled())
|
| - HistogramSupport::histogramEnumeration("Renderer.NeedsCompositedScrolling", m_needsCompositedScrolling, 2);
|
| + HistogramSupport::histogramEnumeration("Renderer.NeedsCompositedScrolling", needsCompositedScrolling, 2);
|
| }
|
|
|
| - if (oldNeedsCompositedScrolling != m_needsCompositedScrolling) {
|
| - updateSelfPaintingLayer();
|
| - if (isStackingContainer())
|
| - dirtyZOrderLists();
|
| - else
|
| - clearZOrderLists();
|
| + if (m_needsCompositedScrolling == needsCompositedScrolling)
|
| + return;
|
|
|
| - dirtyStackingContainerZOrderLists();
|
| + m_needsCompositedScrolling = needsCompositedScrolling;
|
|
|
| - compositor()->setShouldReevaluateCompositingAfterLayout();
|
| - compositor()->setCompositingLayersNeedRebuild();
|
| + // Update values that depend on m_needsCompositedScrolling.
|
| + updateIsNormalFlowOnly();
|
| + updateSelfPaintingLayer();
|
| +
|
| + // Changes to needsCompositedScrolling will affect which layers appear
|
| + // in which z-order lists (some layers that had previously been in our
|
| + // stacking context's lists may now be in ours), but it will never
|
| + // affect contiguity (this is the point of these opt in checks). So
|
| + // we will dirty the z-order lists but leave the contiguity dirty bit
|
| + // unaffected. RenderLayerCompositor guarantees these values are clean
|
| + // before calling updateNeedsCompositedScrolling, so we just need to
|
| + // reset the dirty bits to clean.
|
| + if (isStackingContainer())
|
| + dirtyZOrderLists();
|
| + else
|
| + clearZOrderLists();
|
| + dirtyStackingContainerZOrderLists();
|
| +
|
| + for (RenderLayer* layer = this; layer; layer = layer->parent()) {
|
| + layer->m_descendantsAreContiguousInStackingOrderDirty = false;
|
| + if (layer->isStackingContext())
|
| + break;
|
| }
|
| +
|
| + compositor()->setShouldReevaluateCompositingAfterLayout();
|
| + compositor()->setCompositingLayersNeedRebuild();
|
| }
|
|
|
| static inline int adjustedScrollDelta(int beginningDelta) {
|
| @@ -2273,7 +2290,7 @@ void RenderLayer::updateCompositingLayersAfterScroll()
|
| // repositioning, so update compositing layers from there.
|
| if (RenderLayer* compositingAncestor = stackingContainer()->enclosingCompositingLayer()) {
|
| if (compositor()->compositingConsultsOverlap()) {
|
| - if (usesCompositedScrolling() && !hasOutOfFlowPositionedDescendant())
|
| + if (usesCompositedScrolling())
|
| compositor()->updateCompositingLayers(CompositingUpdateOnCompositedScroll, compositingAncestor);
|
| else
|
| compositor()->updateCompositingLayers(CompositingUpdateOnScroll, compositingAncestor);
|
| @@ -3108,10 +3125,6 @@ void RenderLayer::updateScrollInfoAfterLayout()
|
|
|
| if (originalScrollOffset != scrollOffset())
|
| scrollToOffsetWithoutAnimation(IntPoint(scrollOffset()));
|
| -
|
| - // Composited scrolling may need to be enabled or disabled if the amount of overflow changed.
|
| - if (renderer()->view() && compositor()->updateLayerCompositingState(this))
|
| - compositor()->setCompositingLayersNeedRebuild();
|
| }
|
|
|
| bool RenderLayer::overflowControlsIntersectRect(const IntRect& localRect) const
|
| @@ -5496,7 +5509,6 @@ static inline bool compareZIndex(RenderLayer* first, RenderLayer* second)
|
| void RenderLayer::dirtyZOrderLists()
|
| {
|
| ASSERT(m_layerListMutationAllowed);
|
| - ASSERT(isStackingContainer());
|
|
|
| if (m_posZOrderList)
|
| m_posZOrderList->clear();
|
| @@ -5504,6 +5516,8 @@ void RenderLayer::dirtyZOrderLists()
|
| m_negZOrderList->clear();
|
| m_zOrderListsDirty = true;
|
|
|
| + m_descendantsAreContiguousInStackingOrderDirty = true;
|
| +
|
| if (!renderer()->documentBeingDestroyed()) {
|
| compositor()->setCompositingLayersNeedRebuild();
|
| if (acceleratedCompositingForOverflowScrollEnabled())
|
| @@ -5513,9 +5527,23 @@ void RenderLayer::dirtyZOrderLists()
|
|
|
| void RenderLayer::dirtyStackingContainerZOrderLists()
|
| {
|
| - RenderLayer* sc = stackingContainer();
|
| - if (sc)
|
| - sc->dirtyZOrderLists();
|
| + // When this function is called, we need to dirty both our enclosing
|
| + // stacking container and our stacking context's z-order lists since a
|
| + // z-order change in the container may affect our decision to opt into
|
| + // composited scrolling and could therefore affect either layer's z-order
|
| + // lists. Unfortunately, we are not able to ask if a layer is a stacking
|
| + // container once z-order lists start getting dirtied (since this will
|
| + // dirty descendants-are-contiguous-in-stacking-order and could affect our
|
| + // composited scrolling status and consequently our stacking-containerness)
|
| + // That said, we do know that if we march up our ancestors, once we reach
|
| + // a stacking context, we must have hit a stacking container (since
|
| + // stacking contexts are always stacking containers), so it's safe to stop
|
| + // there.
|
| + for (RenderLayer* layer = parent(); layer; layer = layer->parent()) {
|
| + layer->dirtyZOrderLists();
|
| + if (layer->isStackingContext())
|
| + break;
|
| + }
|
| }
|
|
|
| void RenderLayer::dirtyNormalFlowList()
|
| @@ -5526,6 +5554,7 @@ void RenderLayer::dirtyNormalFlowList()
|
| m_normalFlowList->clear();
|
| m_normalFlowListDirty = true;
|
|
|
| + m_descendantsAreContiguousInStackingOrderDirty = true;
|
| if (!renderer()->documentBeingDestroyed()) {
|
| compositor()->setCompositingLayersNeedRebuild();
|
| if (acceleratedCompositingForOverflowScrollEnabled())
|
| @@ -5628,7 +5657,7 @@ void RenderLayer::collectLayers(bool includeHiddenLayers, CollectLayersBehavior
|
|
|
| void RenderLayer::updateLayerListsIfNeeded()
|
| {
|
| - bool shouldUpdateDescendantsAreContiguousInStackingOrder = isStackingContext() && (m_zOrderListsDirty || m_normalFlowListDirty);
|
| + bool shouldUpdateDescendantsAreContiguousInStackingOrder = acceleratedCompositingForOverflowScrollEnabled() && isStackingContext() && (m_zOrderListsDirty || m_normalFlowListDirty) && m_descendantsAreContiguousInStackingOrderDirty;
|
| updateZOrderLists();
|
| updateNormalFlowList();
|
|
|
| @@ -5724,6 +5753,19 @@ bool RenderLayer::shouldBeNormalFlowOnly() const
|
| ;
|
| }
|
|
|
| +void RenderLayer::updateIsNormalFlowOnly()
|
| +{
|
| + bool isNormalFlowOnly = shouldBeNormalFlowOnly();
|
| + if (isNormalFlowOnly == m_isNormalFlowOnly)
|
| + return;
|
| +
|
| + m_isNormalFlowOnly = isNormalFlowOnly;
|
| + RenderLayer* p = parent();
|
| + if (p)
|
| + p->dirtyNormalFlowList();
|
| + dirtyStackingContainerZOrderLists();
|
| +}
|
| +
|
| bool RenderLayer::shouldBeSelfPaintingLayer() const
|
| {
|
| return !isNormalFlowOnly()
|
| @@ -5808,27 +5850,21 @@ bool RenderLayer::isVisuallyNonEmpty() const
|
|
|
| void RenderLayer::updateStackingContextsAfterStyleChange(const RenderStyle* oldStyle)
|
| {
|
| - if (!oldStyle)
|
| - return;
|
| + bool wasStackingContext = oldStyle ? isStackingContext(oldStyle) : false;
|
| + EVisibility oldVisibility = oldStyle ? oldStyle->visibility() : VISIBLE;
|
| + int oldZIndex = oldStyle ? oldStyle->zIndex() : 0;
|
|
|
| - bool wasStackingContext = isStackingContext(oldStyle);
|
| + // FIXME: RenderLayer already handles visibility changes through our visiblity dirty bits. This logic could
|
| + // likely be folded along with the rest.
|
| bool isStackingContext = this->isStackingContext();
|
| - if (isStackingContext != wasStackingContext) {
|
| - dirtyStackingContainerZOrderLists();
|
| - if (isStackingContext)
|
| - dirtyZOrderLists();
|
| - else
|
| - clearZOrderLists();
|
| + if (isStackingContext == wasStackingContext && oldVisibility == renderer()->style()->visibility() && oldZIndex == renderer()->style()->zIndex())
|
| return;
|
| - }
|
|
|
| - // FIXME: RenderLayer already handles visibility changes through our visiblity dirty bits. This logic could
|
| - // likely be folded along with the rest.
|
| - if (oldStyle->zIndex() != renderer()->style()->zIndex() || oldStyle->visibility() != renderer()->style()->visibility()) {
|
| - dirtyStackingContainerZOrderLists();
|
| - if (isStackingContext)
|
| - dirtyZOrderLists();
|
| - }
|
| + dirtyStackingContainerZOrderLists();
|
| + if (isStackingContainer())
|
| + dirtyZOrderLists();
|
| + else
|
| + clearZOrderLists();
|
| }
|
|
|
| static bool overflowRequiresScrollbar(EOverflow overflow)
|
| @@ -5885,7 +5921,6 @@ void RenderLayer::setAncestorChainHasOutOfFlowPositionedDescendant(RenderObject*
|
|
|
| layer->m_hasOutOfFlowPositionedDescendantDirty = false;
|
| layer->m_hasOutOfFlowPositionedDescendant = true;
|
| - layer->updateNeedsCompositedScrolling();
|
|
|
| if (layer->renderer() && layer->renderer() == containingBlock)
|
| break;
|
| @@ -5894,7 +5929,9 @@ void RenderLayer::setAncestorChainHasOutOfFlowPositionedDescendant(RenderObject*
|
|
|
| void RenderLayer::dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus()
|
| {
|
| - m_hasOutOfFlowPositionedDescendantDirty = true;
|
| + if (m_hasOutOfFlowPositionedDescendant)
|
| + m_hasOutOfFlowPositionedDescendantDirty = true;
|
| +
|
| if (parent())
|
| parent()->dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus();
|
| }
|
| @@ -5902,10 +5939,12 @@ void RenderLayer::dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus()
|
| void RenderLayer::updateOutOfFlowPositioned(const RenderStyle* oldStyle)
|
| {
|
| bool wasOutOfFlowPositioned = oldStyle && (oldStyle->position() == AbsolutePosition || oldStyle->position() == FixedPosition);
|
| - if (parent() && ((renderer() && renderer()->isOutOfFlowPositioned()) != wasOutOfFlowPositioned)) {
|
| - parent()->dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus();
|
| - if (!renderer()->documentBeingDestroyed() && acceleratedCompositingForOverflowScrollEnabled())
|
| - compositor()->setShouldReevaluateCompositingAfterLayout();
|
| + bool isOutOfFlowPositioned = renderer()->isOutOfFlowPositioned();
|
| + if (parent() && isOutOfFlowPositioned != wasOutOfFlowPositioned) {
|
| + if (isOutOfFlowPositioned)
|
| + parent()->setAncestorChainHasOutOfFlowPositionedDescendant(renderer()->containingBlock());
|
| + else
|
| + parent()->dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus();
|
| }
|
| }
|
|
|
| @@ -5989,14 +6028,8 @@ void RenderLayer::updateFilters(const RenderStyle* oldStyle, const RenderStyle*
|
|
|
| void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle)
|
| {
|
| - bool isNormalFlowOnly = shouldBeNormalFlowOnly();
|
| - if (isNormalFlowOnly != m_isNormalFlowOnly) {
|
| - m_isNormalFlowOnly = isNormalFlowOnly;
|
| - RenderLayer* p = parent();
|
| - if (p)
|
| - p->dirtyNormalFlowList();
|
| - dirtyStackingContainerZOrderLists();
|
| - }
|
| + // Skip this for now. We'll do the update after layout.
|
| + // updateIsNormalFlowOnly();
|
|
|
| if (renderer()->style()->overflowX() == OMARQUEE && renderer()->style()->marqueeBehavior() != MNONE && renderer()->isBox()) {
|
| if (!m_marquee)
|
| @@ -6010,9 +6043,12 @@ void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle)
|
|
|
| updateScrollbarsAfterStyleChange(oldStyle);
|
| updateStackingContextsAfterStyleChange(oldStyle);
|
| +
|
| // Overlay scrollbars can make this layer self-painting so we need
|
| // to recompute the bit once scrollbars have been updated.
|
| - updateSelfPaintingLayer();
|
| +
|
| + // Skip this for now. We'll do the update after layout.
|
| + // updateSelfPaintingLayer();
|
| updateOutOfFlowPositioned(oldStyle);
|
|
|
| if (!hasReflection() && m_reflection)
|
| @@ -6047,16 +6083,19 @@ void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle)
|
| updateFilters(oldStyle, renderer()->style());
|
| #endif
|
|
|
| - updateNeedsCompositedScrolling();
|
| -
|
| - const RenderStyle* newStyle = renderer()->style();
|
| - if (compositor()->updateLayerCompositingState(this)
|
| - || needsCompositingLayersRebuiltForClip(oldStyle, newStyle)
|
| - || needsCompositingLayersRebuiltForOverflow(oldStyle, newStyle)
|
| - || needsCompositingLayersRebuiltForFilters(oldStyle, newStyle, didPaintWithFilters))
|
| - compositor()->setCompositingLayersNeedRebuild();
|
| - else if (isComposited())
|
| - backing()->updateGraphicsLayerGeometry();
|
| +// FIXME(vollick) this requires updates that won't happen until after layout.
|
| +// Will this just fall out of the updateCompositingLayers call that will be
|
| +// coming anyway?
|
| +//
|
| +// const RenderStyle* newStyle = renderer()->style();
|
| +// if (compositor()->updateLayerCompositingState(this)
|
| +// || needsCompositingLayersRebuiltForClip(oldStyle, newStyle)
|
| +// || needsCompositingLayersRebuiltForOverflow(oldStyle, newStyle)
|
| +// || needsCompositingLayersRebuiltForFilters(oldStyle, newStyle, didPaintWithFilters))
|
| +// compositor()->setCompositingLayersNeedRebuild();
|
| +// else if (isComposited())
|
| +// backing()->updateGraphicsLayerGeometry();
|
| +//
|
| }
|
|
|
| void RenderLayer::updateScrollableAreaSet(bool hasOverflow)
|
| @@ -6073,8 +6112,10 @@ void RenderLayer::updateScrollableAreaSet(bool hasOverflow)
|
| if (HTMLFrameOwnerElement* owner = frame->ownerElement())
|
| isVisibleToHitTest &= owner->renderer() && owner->renderer()->visibleToHitTesting();
|
|
|
| - if (hasOverflow && isVisibleToHitTest ? frameView->addScrollableArea(this) : frameView->removeScrollableArea(this))
|
| - updateNeedsCompositedScrolling();
|
| + if (hasOverflow && isVisibleToHitTest)
|
| + frameView->addScrollableArea(this);
|
| + else
|
| + frameView->removeScrollableArea(this);
|
| }
|
|
|
| void RenderLayer::updateScrollCornerStyle()
|
|
|