Changeset 154417 in webkit


Ignore:
Timestamp:
Aug 21, 2013 2:32:41 PM (11 years ago)
Author:
Simon Fraser
Message:

<https://webkit.org/b/116901> ASSERTION FAILED: !m_visibleDescendantStatusDirty on twitter

Reviewed by Beth Dakin.

In order to make decisions about compositing, the m_hasVisibleDescendant bit on RenderLayers
needs to be up-to-date when RenderLayerCompositor::computeCompositingRequirements is recursing
over the RenderLayer tree.

However, was possible for computeCompositingRequirements() to hit a layer whose m_visibleDescendantStatusDirty
bit was set; we only clear this bit from collectLayers() (when updating z-order lists), and from styleChanged()
which requires that style changed on the layer itself.

Fix by always calling updateDescendantDependentFlags() from computeCompositingRequirements().

Wasn't able to easily get a reduced testcase.

  • rendering/RenderLayerCompositor.cpp:

(WebCore::RenderLayerCompositor::computeCompositingRequirements):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r154416 r154417  
     12013-08-21  Simon Fraser  <simon.fraser@apple.com>
     2
     3        <https://webkit.org/b/116901> ASSERTION FAILED: !m_visibleDescendantStatusDirty on twitter
     4
     5        Reviewed by Beth Dakin.
     6       
     7        In order to make decisions about compositing, the m_hasVisibleDescendant bit on RenderLayers
     8        needs to be up-to-date when RenderLayerCompositor::computeCompositingRequirements is recursing
     9        over the RenderLayer tree.
     10       
     11        However, was possible for computeCompositingRequirements() to hit a layer whose m_visibleDescendantStatusDirty
     12        bit was set; we only clear this bit from collectLayers() (when updating z-order lists), and from styleChanged()
     13        which requires that style changed on the layer itself.
     14       
     15        Fix by always calling updateDescendantDependentFlags() from computeCompositingRequirements().
     16
     17        Wasn't able to easily get a reduced testcase.
     18
     19        * rendering/RenderLayerCompositor.cpp:
     20        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
     21
    1222013-08-21  Alex Christensen  <achristensen@apple.com>
    223
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r154401 r154417  
    959959void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer* layer, OverlapMap* overlapMap, CompositingState& compositingState, bool& layersChanged, bool& descendantHas3DTransform)
    960960{
     961    layer->updateDescendantDependentFlags();
    961962    layer->updateLayerListsIfNeeded();
    962963
Note: See TracChangeset for help on using the changeset viewer.