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() |