Index: Source/core/rendering/RenderLayer.cpp |
diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp |
index b6b9a22b64aefb3050c9b9e7f2891fd9a7101597..734d8aa8e068f8ab94ece0e29d23f08f5f299f83 100644 |
--- a/Source/core/rendering/RenderLayer.cpp |
+++ b/Source/core/rendering/RenderLayer.cpp |
@@ -109,9 +109,6 @@ RenderLayer::RenderLayer(RenderLayerModelObject* renderer, LayerType type) |
: m_layerType(type) |
, m_hasSelfPaintingLayerDescendant(false) |
, m_hasSelfPaintingLayerDescendantDirty(false) |
- , m_hasOutOfFlowPositionedDescendant(false) |
- , m_hasOutOfFlowPositionedDescendantDirty(true) |
- , m_isUnclippedDescendant(false) |
, m_isRootLayer(renderer->isRenderView()) |
, m_usedTransparency(false) |
, m_visibleContentStatusDirty(true) |
@@ -162,9 +159,6 @@ RenderLayer::RenderLayer(RenderLayerModelObject* renderer, LayerType type) |
RenderLayer::~RenderLayer() |
{ |
- if (!m_renderer->documentBeingDestroyed()) |
- compositor()->removeOutOfFlowPositionedLayer(this); |
- |
if (renderer()->frame() && renderer()->frame()->page()) { |
if (ScrollingCoordinator* scrollingCoordinator = renderer()->frame()->page()->scrollingCoordinator()) |
scrollingCoordinator->willDestroyRenderLayer(this); |
@@ -352,31 +346,6 @@ void RenderLayer::dirtyAncestorChainHasSelfPaintingLayerDescendantStatus() |
} |
} |
-void RenderLayer::setAncestorChainHasOutOfFlowPositionedDescendant() |
-{ |
- for (RenderLayer* layer = this; layer; layer = layer->parent()) { |
- if (!layer->m_hasOutOfFlowPositionedDescendantDirty && layer->hasOutOfFlowPositionedDescendant()) |
- break; |
- |
- layer->setHasOutOfFlowPositionedDescendantDirty(false); |
- layer->setHasOutOfFlowPositionedDescendant(true); |
- } |
-} |
- |
-void RenderLayer::dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus() |
-{ |
- for (RenderLayer* layer = this; layer; layer = layer->parent()) { |
- layer->setHasOutOfFlowPositionedDescendantDirty(true); |
- |
- // If we have reached an out of flow positioned layer, we know our parent should have an out-of-flow positioned descendant. |
- // In this case, there is no need to dirty our ancestors further. |
- if (layer->renderer()->isOutOfFlowPositioned()) { |
- ASSERT(!parent() || parent()->m_hasOutOfFlowPositionedDescendantDirty || parent()->hasOutOfFlowPositionedDescendant()); |
- break; |
- } |
- } |
-} |
- |
bool RenderLayer::scrollsWithRespectTo(const RenderLayer* other) const |
{ |
const EPosition position = renderer()->style()->position(); |
@@ -802,35 +771,6 @@ void RenderLayer::setAncestorChainHasVisibleDescendant() |
} |
} |
-void RenderLayer::updateIsUnclippedDescendant() |
-{ |
- TRACE_EVENT0("blink_rendering", "RenderLayer::updateIsUnclippedDescendant"); |
- ASSERT(renderer()->isOutOfFlowPositioned()); |
- if (!m_hasVisibleContent && !m_hasVisibleDescendant) |
- return; |
- |
- FrameView* frameView = renderer()->view()->frameView(); |
- if (!frameView) |
- return; |
- |
- setIsUnclippedDescendant(false); |
- |
- const RenderObject* containingBlock = renderer()->containingBlock(); |
- for (RenderLayer* ancestor = parent(); ancestor && ancestor->renderer() != containingBlock; ancestor = ancestor->parent()) { |
- // TODO(vollick): This isn't quite right. Whenever ancestor is composited and clips |
- // overflow, we're technically unclipped. However, this will currently cause a huge |
- // number of layers to report that they are unclipped. Eventually, when we've formally |
- // separated the clipping, transform, opacity, and stacking trees here and in the |
- // compositor, we will be able to relax this restriction without it being prohibitively |
- // expensive (currently, we have to do a lot of work in the compositor to honor a |
- // clip child/parent relationship). |
- if (ancestor->scrollsOverflow()) { |
- setIsUnclippedDescendant(true); |
- return; |
- } |
- } |
-} |
- |
// FIXME: this is quite brute-force. We could be more efficient if we were to |
// track state and update it as appropriate as changes are made in the Render tree. |
void RenderLayer::updateScrollingStateAfterCompositingChange() |
@@ -853,36 +793,27 @@ void RenderLayer::updateScrollingStateAfterCompositingChange() |
} |
} |
-static bool subtreeContainsOutOfFlowPositionedLayer(const RenderLayer* subtreeRoot) |
-{ |
- return (subtreeRoot->renderer() && subtreeRoot->renderer()->isOutOfFlowPositioned()) || subtreeRoot->hasOutOfFlowPositionedDescendant(); |
-} |
- |
void RenderLayer::updateDescendantDependentFlags() |
{ |
- if (m_visibleDescendantStatusDirty || m_hasSelfPaintingLayerDescendantDirty || m_hasOutOfFlowPositionedDescendantDirty) { |
+ if (m_visibleDescendantStatusDirty || m_hasSelfPaintingLayerDescendantDirty) { |
m_hasVisibleDescendant = false; |
m_hasSelfPaintingLayerDescendant = false; |
- m_hasOutOfFlowPositionedDescendant = false; |
for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) { |
child->updateDescendantDependentFlags(); |
bool hasVisibleDescendant = child->m_hasVisibleContent || child->m_hasVisibleDescendant; |
bool hasSelfPaintingLayerDescendant = child->isSelfPaintingLayer() || child->hasSelfPaintingLayerDescendant(); |
- bool hasOutOfFlowPositionedDescendant = subtreeContainsOutOfFlowPositionedLayer(child); |
m_hasVisibleDescendant |= hasVisibleDescendant; |
m_hasSelfPaintingLayerDescendant |= hasSelfPaintingLayerDescendant; |
- m_hasOutOfFlowPositionedDescendant |= hasOutOfFlowPositionedDescendant; |
- if (m_hasVisibleDescendant && m_hasSelfPaintingLayerDescendant && hasOutOfFlowPositionedDescendant) |
+ if (m_hasVisibleDescendant && m_hasSelfPaintingLayerDescendant) |
break; |
} |
m_visibleDescendantStatusDirty = false; |
m_hasSelfPaintingLayerDescendantDirty = false; |
- m_hasOutOfFlowPositionedDescendantDirty = false; |
} |
if (m_blendInfo.childLayerHasBlendModeStatusDirty()) { |
@@ -1470,15 +1401,6 @@ void RenderLayer::addChild(RenderLayer* child, RenderLayer* beforeChild) |
if (child->blendInfo().hasBlendMode() || child->blendInfo().childLayerHasBlendMode()) |
m_blendInfo.setAncestorChainBlendedDescendant(); |
- if (subtreeContainsOutOfFlowPositionedLayer(child)) { |
- // Now that the out of flow positioned descendant is in the tree, we |
- // need to tell the compositor to reevaluate the compositing |
- // requirements since we may be able to mark more layers as having |
- // an 'unclipped' descendant. |
- compositor()->setNeedsUpdateCompositingRequirementsState(); |
- setAncestorChainHasOutOfFlowPositionedDescendant(); |
- } |
- |
compositor()->layerWasAdded(this, child); |
} |
@@ -1516,13 +1438,6 @@ RenderLayer* RenderLayer::removeChild(RenderLayer* oldChild) |
oldChild->m_parent = 0; |
oldChild->updateDescendantDependentFlags(); |
- if (subtreeContainsOutOfFlowPositionedLayer(oldChild)) { |
- // It may now be the case that a layer no longer has an unclipped |
- // descendant. Let the compositor know that it needs to reevaluate |
- // its compositing requirements to check this. |
- compositor()->setNeedsUpdateCompositingRequirementsState(); |
- dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); |
- } |
if (oldChild->m_hasVisibleContent || oldChild->m_hasVisibleDescendant) |
dirtyAncestorChainVisibleDescendantStatus(); |
@@ -3737,38 +3652,6 @@ bool RenderLayer::isVisuallyNonEmpty() const |
return false; |
} |
-void RenderLayer::updateOutOfFlowPositioned(const RenderStyle* oldStyle) |
-{ |
- ASSERT(!oldStyle || renderer()->style()->position() != oldStyle->position()); |
- |
- bool wasOutOfFlowPositioned = oldStyle && (oldStyle->position() == AbsolutePosition || oldStyle->position() == FixedPosition); |
- bool isOutOfFlowPositioned = renderer()->isOutOfFlowPositioned(); |
- if (!wasOutOfFlowPositioned && !isOutOfFlowPositioned) |
- return; |
- |
- // Ensures that we reset the above bits correctly. |
- compositor()->setNeedsUpdateCompositingRequirementsState(); |
- |
- if (wasOutOfFlowPositioned && isOutOfFlowPositioned) |
- return; |
- |
- if (isOutOfFlowPositioned) { |
- setAncestorChainHasOutOfFlowPositionedDescendant(); |
- compositor()->addOutOfFlowPositionedLayer(this); |
- } else { |
- dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); |
- compositor()->removeOutOfFlowPositionedLayer(this); |
- |
- // We need to reset the isUnclippedDescendant bit here because normally |
- // the "unclipped-ness" property is only updated in |
- // RenderLayerCompositor::updateCompositingRequirementsState(). However, |
- // it is only updated for layers which are known to be out of flow. |
- // Since this is no longer out of flow, we have to explicitly ensure |
- // that it doesn't think it is unclipped. |
- setIsUnclippedDescendant(false); |
- } |
-} |
- |
static bool hasOrHadFilters(const RenderStyle* oldStyle, const RenderStyle* newStyle) |
{ |
ASSERT(newStyle); |
@@ -3847,20 +3730,10 @@ void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle* oldStyle |
if (m_scrollableArea) |
m_scrollableArea->updateAfterStyleChange(oldStyle); |
- if (!oldStyle || oldStyle->visibility() != renderer()->style()->visibility()) { |
- ASSERT(!oldStyle || diff.needsRepaint() || diff.needsLayout()); |
- compositor()->setNeedsUpdateCompositingRequirementsState(); |
- } |
- |
// Overlay scrollbars can make this layer self-painting so we need |
// to recompute the bit once scrollbars have been updated. |
updateSelfPaintingLayer(); |
- if (!oldStyle || renderer()->style()->position() != oldStyle->position()) { |
- ASSERT(!oldStyle || diff.needsFullLayout()); |
- updateOutOfFlowPositioned(oldStyle); |
- } |
- |
if (!oldStyle || !renderer()->style()->reflectionDataEquivalent(oldStyle)) { |
ASSERT(!oldStyle || diff.needsFullLayout()); |
updateReflectionInfo(oldStyle); |