Changeset 181218 in webkit


Ignore:
Timestamp:
Mar 7, 2015 6:49:21 PM (9 years ago)
Author:
Simon Fraser
Message:

Tidy up RenderLayerCompositor's CompositingState
https://bugs.webkit.org/show_bug.cgi?id=142445

Reviewed by Dan Bernstein.

Make CompositingState a private struct in RenderLayerCompositor.
Since it's a struct, remove the m_ prefix from its data members.

No behavior change.

  • rendering/RenderLayerCompositor.cpp:

(WebCore::RenderLayerCompositor::CompositingState::CompositingState):
(WebCore::RenderLayerCompositor::computeCompositingRequirements):
(WebCore::CompositingState::CompositingState): Deleted.

  • rendering/RenderLayerCompositor.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r181216 r181218  
     12015-03-07  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Tidy up RenderLayerCompositor's CompositingState
     4        https://bugs.webkit.org/show_bug.cgi?id=142445
     5
     6        Reviewed by Dan Bernstein.
     7       
     8        Make CompositingState a private struct in RenderLayerCompositor.
     9        Since it's a struct, remove the m_ prefix from its data members.
     10
     11        No behavior change.
     12
     13        * rendering/RenderLayerCompositor.cpp:
     14        (WebCore::RenderLayerCompositor::CompositingState::CompositingState):
     15        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
     16        (WebCore::CompositingState::CompositingState): Deleted.
     17        * rendering/RenderLayerCompositor.h:
     18
    1192015-03-07  Darin Adler  <darin@apple.com>
    220
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r181166 r181218  
    218218};
    219219
    220 struct CompositingState {
     220struct RenderLayerCompositor::CompositingState {
    221221    CompositingState(RenderLayer* compAncestor, bool testOverlap = true)
    222         : m_compositingAncestor(compAncestor)
    223         , m_subtreeIsCompositing(false)
    224         , m_testingOverlap(testOverlap)
     222        : compositingAncestor(compAncestor)
     223        , subtreeIsCompositing(false)
     224        , testingOverlap(testOverlap)
    225225#if ENABLE(CSS_COMPOSITING)
    226         , m_hasNotIsolatedCompositedBlendingDescendants(false)
     226        , hasNotIsolatedCompositedBlendingDescendants(false)
    227227#endif
    228228#if ENABLE(TREE_DEBUGGING)
    229         , m_depth(0)
     229        , depth(0)
    230230#endif
    231231    {
     
    233233   
    234234    CompositingState(const CompositingState& other)
    235         : m_compositingAncestor(other.m_compositingAncestor)
    236         , m_subtreeIsCompositing(other.m_subtreeIsCompositing)
    237         , m_testingOverlap(other.m_testingOverlap)
     235        : compositingAncestor(other.compositingAncestor)
     236        , subtreeIsCompositing(other.subtreeIsCompositing)
     237        , testingOverlap(other.testingOverlap)
    238238#if ENABLE(CSS_COMPOSITING)
    239         , m_hasNotIsolatedCompositedBlendingDescendants(other.m_hasNotIsolatedCompositedBlendingDescendants)
     239        , hasNotIsolatedCompositedBlendingDescendants(other.hasNotIsolatedCompositedBlendingDescendants)
    240240#endif
    241241#if ENABLE(TREE_DEBUGGING)
    242         , m_depth(other.m_depth + 1)
     242        , depth(other.depth + 1)
    243243#endif
    244244    {
    245245    }
    246246   
    247     RenderLayer* m_compositingAncestor;
    248     bool m_subtreeIsCompositing;
    249     bool m_testingOverlap;
     247    RenderLayer* compositingAncestor;
     248    bool subtreeIsCompositing;
     249    bool testingOverlap;
    250250#if ENABLE(CSS_COMPOSITING)
    251     bool m_hasNotIsolatedCompositedBlendingDescendants;
     251    bool hasNotIsolatedCompositedBlendingDescendants;
    252252#endif
    253253#if ENABLE(TREE_DEBUGGING)
    254     int m_depth;
     254    int depth;
    255255#endif
    256256};
    257 
    258257
    259258#if !LOG_DISABLED
     
    12391238    bool willBeComposited = needsToBeComposited(layer);
    12401239
    1241     RenderLayer::IndirectCompositingReason compositingReason = compositingState.m_subtreeIsCompositing ? RenderLayer::IndirectCompositingReason::Stacking : RenderLayer::IndirectCompositingReason::None;
     1240    RenderLayer::IndirectCompositingReason compositingReason = compositingState.subtreeIsCompositing ? RenderLayer::IndirectCompositingReason::Stacking : RenderLayer::IndirectCompositingReason::None;
    12421241    bool haveComputedBounds = false;
    12431242    LayoutRect absBounds;
    12441243
    12451244    // If we know for sure the layer is going to be composited, don't bother looking it up in the overlap map
    1246     if (!willBeComposited && !overlapMap.isEmpty() && compositingState.m_testingOverlap) {
     1245    if (!willBeComposited && !overlapMap.isEmpty() && compositingState.testingOverlap) {
    12471246        // If we're testing for overlap, we only need to composite if we overlap something that is already composited.
    12481247        absBounds = enclosingLayoutRect(overlapMap.geometryMap().absoluteRect(layer.overlapBounds()));
     
    12601259    // into. These children (the controls) always need to be promoted into their
    12611260    // own layers to draw on top of the accelerated video.
    1262     if (compositingState.m_compositingAncestor && compositingState.m_compositingAncestor->renderer().isVideo())
     1261    if (compositingState.compositingAncestor && compositingState.compositingAncestor->renderer().isVideo())
    12631262        compositingReason = RenderLayer::IndirectCompositingReason::Overlap;
    12641263#endif
     
    12731272    // The children of this layer don't need to composite, unless there is
    12741273    // a compositing layer among them, so start by inheriting the compositing
    1275     // ancestor with m_subtreeIsCompositing set to false.
     1274    // ancestor with subtreeIsCompositing set to false.
    12761275    CompositingState childState(compositingState);
    1277     childState.m_subtreeIsCompositing = false;
     1276    childState.subtreeIsCompositing = false;
    12781277#if ENABLE(CSS_COMPOSITING)
    1279     childState.m_hasNotIsolatedCompositedBlendingDescendants = false;
     1278    childState.hasNotIsolatedCompositedBlendingDescendants = false;
    12801279#endif
    12811280
    12821281    if (willBeComposited) {
    12831282        // Tell the parent it has compositing descendants.
    1284         compositingState.m_subtreeIsCompositing = true;
     1283        compositingState.subtreeIsCompositing = true;
    12851284        // This layer now acts as the ancestor for kids.
    1286         childState.m_compositingAncestor = &layer;
     1285        childState.compositingAncestor = &layer;
    12871286
    12881287        overlapMap.pushCompositingContainer();
    12891288        // This layer is going to be composited, so children can safely ignore the fact that there's an
    12901289        // animation running behind this layer, meaning they can rely on the overlap map testing again.
    1291         childState.m_testingOverlap = true;
     1290        childState.testingOverlap = true;
    12921291    }
    12931292
     
    13051304                // If we have to make a layer for this child, make one now so we can have a contents layer
    13061305                // (since we need to ensure that the -ve z-order child renders underneath our contents).
    1307                 if (!willBeComposited && childState.m_subtreeIsCompositing) {
     1306                if (!willBeComposited && childState.subtreeIsCompositing) {
    13081307                    // make layer compositing
    13091308                    layer.setIndirectCompositingReason(RenderLayer::IndirectCompositingReason::BackgroundLayer);
    1310                     childState.m_compositingAncestor = &layer;
     1309                    childState.compositingAncestor = &layer;
    13111310                    overlapMap.pushCompositingContainer();
    13121311                    // This layer is going to be composited, so children can safely ignore the fact that there's an
    13131312                    // animation running behind this layer, meaning they can rely on the overlap map testing again
    1314                     childState.m_testingOverlap = true;
     1313                    childState.testingOverlap = true;
    13151314                    willBeComposited = true;
    13161315                }
     
    13541353    // the overlap map. Layers that do not composite will draw into their
    13551354    // compositing ancestor's backing, and so are still considered for overlap.
    1356     if (childState.m_compositingAncestor && !childState.m_compositingAncestor->isRootLayer())
     1355    if (childState.compositingAncestor && !childState.compositingAncestor->isRootLayer())
    13571356        addToOverlapMap(overlapMap, layer, absBounds, haveComputedBounds);
    13581357
    13591358#if ENABLE(CSS_COMPOSITING)
    1360     layer.setHasNotIsolatedCompositedBlendingDescendants(childState.m_hasNotIsolatedCompositedBlendingDescendants);
     1359    layer.setHasNotIsolatedCompositedBlendingDescendants(childState.hasNotIsolatedCompositedBlendingDescendants);
    13611360    ASSERT(!layer.hasNotIsolatedCompositedBlendingDescendants() || layer.hasNotIsolatedBlendingDescendants());
    13621361#endif
     
    13641363    RenderLayer::IndirectCompositingReason indirectCompositingReason;
    13651364    if (!willBeComposited && canBeComposited(layer)
    1366         && requiresCompositingForIndirectReason(layer.renderer(), childState.m_subtreeIsCompositing, anyDescendantHas3DTransform, indirectCompositingReason)) {
     1365        && requiresCompositingForIndirectReason(layer.renderer(), childState.subtreeIsCompositing, anyDescendantHas3DTransform, indirectCompositingReason)) {
    13671366        layer.setIndirectCompositingReason(indirectCompositingReason);
    1368         childState.m_compositingAncestor = &layer;
     1367        childState.compositingAncestor = &layer;
    13691368        overlapMap.pushCompositingContainer();
    13701369        addToOverlapMapRecursive(overlapMap, layer);
     
    13791378
    13801379    // Subsequent layers in the parent stacking context also need to composite.
    1381     if (childState.m_subtreeIsCompositing)
    1382         compositingState.m_subtreeIsCompositing = true;
     1380    if (childState.subtreeIsCompositing)
     1381        compositingState.subtreeIsCompositing = true;
    13831382
    13841383    // Set the flag to say that this SC has compositing children.
    1385     layer.setHasCompositingDescendant(childState.m_subtreeIsCompositing);
     1384    layer.setHasCompositingDescendant(childState.subtreeIsCompositing);
    13861385
    13871386    // setHasCompositingDescendant() may have changed the answer to needsToBeComposited() when clipping,
     
    13921391    // Note that if the layer clips its descendants, there's no reason to propagate the child animation to the parent layers. That's because
    13931392    // we know for sure the animation is contained inside the clipping rectangle, which is already added to the overlap map.
    1394     if ((!childState.m_testingOverlap && !isCompositedClippingLayer) || isRunningAcceleratedTransformAnimation(layer.renderer()))
    1395         compositingState.m_testingOverlap = false;
     1393    if ((!childState.testingOverlap && !isCompositedClippingLayer) || isRunningAcceleratedTransformAnimation(layer.renderer()))
     1394        compositingState.testingOverlap = false;
    13961395   
    13971396    if (isCompositedClippingLayer) {
    13981397        if (!willBeComposited) {
    1399             childState.m_compositingAncestor = &layer;
     1398            childState.compositingAncestor = &layer;
    14001399            overlapMap.pushCompositingContainer();
    14011400            addToOverlapMapRecursive(overlapMap, layer);
     
    14071406    if ((willBeComposited && layer.hasBlendMode())
    14081407        || (layer.hasNotIsolatedCompositedBlendingDescendants() && !layer.isolatesCompositedBlending()))
    1409         compositingState.m_hasNotIsolatedCompositedBlendingDescendants = true;
    1410 #endif
    1411 
    1412     if (childState.m_compositingAncestor == &layer && !layer.isRootLayer())
     1408        compositingState.hasNotIsolatedCompositedBlendingDescendants = true;
     1409#endif
     1410
     1411    if (childState.compositingAncestor == &layer && !layer.isRootLayer())
    14131412        overlapMap.popCompositingContainer();
    14141413
     
    14161415    // to be composited, then we can drop out of compositing mode altogether. However, don't drop out of compositing mode
    14171416    // if there are composited layers that we didn't hit in our traversal (e.g. because of visibility:hidden).
    1418     if (layer.isRootLayer() && !childState.m_subtreeIsCompositing && !requiresCompositingLayer(layer) && !m_forceCompositingMode && !hasAnyAdditionalCompositedLayers(layer)) {
     1417    if (layer.isRootLayer() && !childState.subtreeIsCompositing && !requiresCompositingLayer(layer) && !m_forceCompositingMode && !hasAnyAdditionalCompositedLayers(layer)) {
    14191418        // Don't drop out of compositing on iOS, because we may flash. See <rdar://problem/8348337>.
    14201419#if !PLATFORM(IOS)
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.h

    r181164 r181218  
    310310private:
    311311    class OverlapMap;
     312    struct CompositingState;
    312313
    313314    // GraphicsLayerClient implementation
     
    342343
    343344    // Returns true if any layer's compositing changed
    344     void computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer&, OverlapMap&, struct CompositingState&, bool& layersChanged, bool& descendantHas3DTransform);
     345    void computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer&, OverlapMap&, CompositingState&, bool& layersChanged, bool& descendantHas3DTransform);
    345346
    346347    void computeRegionCompositingRequirements(RenderNamedFlowFragment*, OverlapMap&, CompositingState&, bool& layersChanged, bool& anyDescendantHas3DTransform);
Note: See TracChangeset for help on using the changeset viewer.