Changeset 146213 in webkit


Ignore:
Timestamp:
Mar 19, 2013 9:49:01 AM (11 years ago)
Author:
mvujovic@adobe.com
Message:

Refactor conditions for setCompositingLayersNeedRebuild in RenderLayer::styleChanged
https://bugs.webkit.org/show_bug.cgi?id=112606

Reviewed by Simon Fraser.

To fix bug 109098 [1], we will need to add more conditions for calling
RenderLayerCompositor::setCompositingLayersNeedRebuild in RenderLayer::styleChanged.
Adding more non-trivial conditions will make this block of code even harder to follow.
This patch refactors the current conditions into functions:

needsCompositingLayersRebuiltForClip
needsCompositingLayersRebuiltForOverflow

In bug 109098 [1], I'm planning to add:

needsCompositingLayersRebuiltForFilters

[1]: https://bugs.webkit.org/show_bug.cgi?id=109098

No new tests. Just refactoring.

  • rendering/RenderLayer.cpp:

(WebCore):
(WebCore::RenderLayer::needsCompositingLayersRebuiltForClip):
(WebCore::RenderLayer::needsCompositingLayersRebuiltForOverflow):

This is a method and not a file static function because it needs to look at the
RenderLayer's stackingContainer(), which is a private method.

(WebCore::RenderLayer::styleChanged):

  • rendering/RenderLayer.h:

(RenderLayer):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r146209 r146213  
     12013-03-19  Max Vujovic  <mvujovic@adobe.com>
     2
     3        Refactor conditions for setCompositingLayersNeedRebuild in RenderLayer::styleChanged
     4        https://bugs.webkit.org/show_bug.cgi?id=112606
     5
     6        Reviewed by Simon Fraser.
     7
     8        To fix bug 109098 [1], we will need to add more conditions for calling
     9        RenderLayerCompositor::setCompositingLayersNeedRebuild in RenderLayer::styleChanged.
     10        Adding more non-trivial conditions will make this block of code even harder to follow.
     11        This patch refactors the current conditions into functions:
     12            needsCompositingLayersRebuiltForClip
     13            needsCompositingLayersRebuiltForOverflow
     14
     15        In bug 109098 [1], I'm planning to add:
     16            needsCompositingLayersRebuiltForFilters
     17
     18        [1]: https://bugs.webkit.org/show_bug.cgi?id=109098
     19
     20        No new tests. Just refactoring.
     21
     22        * rendering/RenderLayer.cpp:
     23        (WebCore):
     24        (WebCore::RenderLayer::needsCompositingLayersRebuiltForClip):
     25        (WebCore::RenderLayer::needsCompositingLayersRebuiltForOverflow):
     26            This is a method and not a file static function because it needs to look at the
     27            RenderLayer's stackingContainer(), which is a private method.
     28        (WebCore::RenderLayer::styleChanged):
     29        * rendering/RenderLayer.h:
     30        (RenderLayer):
     31
    1322013-03-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>
    233
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r146185 r146213  
    59855985}
    59865986
     5987#if USE(ACCELERATED_COMPOSITING)
     5988inline bool RenderLayer::needsCompositingLayersRebuiltForClip(const RenderStyle* oldStyle, const RenderStyle* newStyle) const
     5989{
     5990    ASSERT(newStyle);
     5991    return oldStyle && (oldStyle->clip() != newStyle->clip() || oldStyle->hasClip() != newStyle->hasClip());
     5992}
     5993
     5994inline bool RenderLayer::needsCompositingLayersRebuiltForOverflow(const RenderStyle* oldStyle, const RenderStyle* newStyle) const
     5995{
     5996    ASSERT(newStyle);
     5997    return !isComposited() && oldStyle && (oldStyle->overflowX() != newStyle->overflowX()) && stackingContainer()->hasCompositingDescendant();
     5998}
     5999#endif // USE(ACCELERATED_COMPOSITING)
     6000
    59876001void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle)
    59886002{
     
    60426056#if USE(ACCELERATED_COMPOSITING)
    60436057    updateNeedsCompositedScrolling();
    6044     if (compositor()->updateLayerCompositingState(this))
     6058
     6059    const RenderStyle* newStyle = renderer()->style();
     6060    if (compositor()->updateLayerCompositingState(this)
     6061        || needsCompositingLayersRebuiltForClip(oldStyle, newStyle)
     6062        || needsCompositingLayersRebuiltForOverflow(oldStyle, newStyle))
    60456063        compositor()->setCompositingLayersNeedRebuild();
    6046     else if (oldStyle && (oldStyle->clip() != renderer()->style()->clip() || oldStyle->hasClip() != renderer()->style()->hasClip()))
    6047         compositor()->setCompositingLayersNeedRebuild();
    6048     else if (m_backing)
    6049         m_backing->updateGraphicsLayerGeometry();
    6050     else if (oldStyle && oldStyle->overflowX() != renderer()->style()->overflowX()) {
    6051         if (stackingContainer()->hasCompositingDescendant())
    6052             compositor()->setCompositingLayersNeedRebuild();
    6053     }
     6064    else if (isComposited())
     6065        backing()->updateGraphicsLayerGeometry();
    60546066#endif
    60556067
  • trunk/Source/WebCore/rendering/RenderLayer.h

    r145422 r146213  
    771771    virtual bool usesCompositedScrolling() const OVERRIDE;
    772772    bool needsCompositedScrolling() const;
     773    bool needsCompositingLayersRebuiltForClip(const RenderStyle* oldStyle, const RenderStyle* newStyle) const;
     774    bool needsCompositingLayersRebuiltForOverflow(const RenderStyle* oldStyle, const RenderStyle* newStyle) const;
    773775#else
    774776    bool isComposited() const { return false; }
Note: See TracChangeset for help on using the changeset viewer.