| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights 
      reserved. | 2  * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights 
      reserved. | 
| 3  * | 3  * | 
| 4  * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4  * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 
| 5  * | 5  * | 
| 6  * Other contributors: | 6  * Other contributors: | 
| 7  *   Robert O'Callahan <roc+@cs.cmu.edu> | 7  *   Robert O'Callahan <roc+@cs.cmu.edu> | 
| 8  *   David Baron <dbaron@fas.harvard.edu> | 8  *   David Baron <dbaron@fas.harvard.edu> | 
| 9  *   Christian Biesinger <cbiesinger@web.de> | 9  *   Christian Biesinger <cbiesinger@web.de> | 
| 10  *   Randall Jesup <rjesup@wgate.com> | 10  *   Randall Jesup <rjesup@wgate.com> | 
| (...skipping 3531 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3542 | 3542 | 
| 3543 void RenderLayer::updateFilters(const RenderStyle* oldStyle, const RenderStyle* 
      newStyle) | 3543 void RenderLayer::updateFilters(const RenderStyle* oldStyle, const RenderStyle* 
      newStyle) | 
| 3544 { | 3544 { | 
| 3545     if (!newStyle->hasFilter() && (!oldStyle || !oldStyle->hasFilter())) | 3545     if (!newStyle->hasFilter() && (!oldStyle || !oldStyle->hasFilter())) | 
| 3546         return; | 3546         return; | 
| 3547 | 3547 | 
| 3548     updateOrRemoveFilterClients(); | 3548     updateOrRemoveFilterClients(); | 
| 3549     updateOrRemoveFilterEffectRenderer(); | 3549     updateOrRemoveFilterEffectRenderer(); | 
| 3550 } | 3550 } | 
| 3551 | 3551 | 
|  | 3552 void RenderLayer::updateClipPathInfo(const RenderStyle* oldStyle, const RenderSt
      yle* newStyle) | 
|  | 3553 { | 
|  | 3554     if (!newStyle->clipPath() && (!oldStyle || !oldStyle->clipPath())) | 
|  | 3555         return; | 
|  | 3556 | 
|  | 3557     if (renderer()->hasClipPath() && renderer()->style()->clipPath()->type() == 
      ClipPathOperation::REFERENCE) { | 
|  | 3558         if (!m_clipPathInfo) | 
|  | 3559             m_clipPathInfo = adoptPtr(new RenderLayerClipPathInfo(this)); | 
|  | 3560         m_clipPathInfo->updateReferenceClipPathClients(renderer()->style()->clip
      Path()); | 
|  | 3561     } else if (m_clipPathInfo) { | 
|  | 3562         m_clipPathInfo = nullptr; | 
|  | 3563     } | 
|  | 3564 } | 
|  | 3565 | 
| 3552 bool RenderLayer::attemptDirectCompositingUpdate(StyleDifference diff, const Ren
      derStyle* oldStyle) | 3566 bool RenderLayer::attemptDirectCompositingUpdate(StyleDifference diff, const Ren
      derStyle* oldStyle) | 
| 3553 { | 3567 { | 
| 3554     CompositingReasons oldPotentialCompositingReasonsFromStyle = m_potentialComp
      ositingReasonsFromStyle; | 3568     CompositingReasons oldPotentialCompositingReasonsFromStyle = m_potentialComp
      ositingReasonsFromStyle; | 
| 3555     compositor()->updatePotentialCompositingReasonsFromStyle(this); | 3569     compositor()->updatePotentialCompositingReasonsFromStyle(this); | 
| 3556 | 3570 | 
| 3557     // This function implements an optimization for transforms and opacity. | 3571     // This function implements an optimization for transforms and opacity. | 
| 3558     // A common pattern is for a touchmove handler to update the transform | 3572     // A common pattern is for a touchmove handler to update the transform | 
| 3559     // and/or an opacity of an element every frame while the user moves their | 3573     // and/or an opacity of an element every frame while the user moves their | 
| 3560     // finger across the screen. The conditions below recognize when the | 3574     // finger across the screen. The conditions below recognize when the | 
| 3561     // compositing state is set up to receive a direct transform or opacity | 3575     // compositing state is set up to receive a direct transform or opacity | 
| 3562     // update. | 3576     // update. | 
| 3563 | 3577 | 
| 3564     if (!diff.hasAtMostPropertySpecificDifferences(StyleDifference::TransformCha
      nged | StyleDifference::OpacityChanged)) | 3578     if (!diff.hasAtMostPropertySpecificDifferences(StyleDifference::TransformCha
      nged | StyleDifference::OpacityChanged)) | 
| 3565         return false; | 3579         return false; | 
| 3566     // The potentialCompositingReasonsFromStyle could have changed without | 3580     // The potentialCompositingReasonsFromStyle could have changed without | 
| 3567     // a corresponding StyleDifference if an animation started or ended. | 3581     // a corresponding StyleDifference if an animation started or ended. | 
| 3568     if (m_potentialCompositingReasonsFromStyle != oldPotentialCompositingReasons
      FromStyle) | 3582     if (m_potentialCompositingReasonsFromStyle != oldPotentialCompositingReasons
      FromStyle) | 
| 3569         return false; | 3583         return false; | 
| 3570     // We could add support for reflections if we updated the transform on | 3584     // We could add support for reflections if we updated the transform on | 
| 3571     // the reflection layers. | 3585     // the reflection layers. | 
| 3572     if (renderer()->hasReflection()) | 3586     if (renderer()->hasReflection()) | 
| 3573         return false; | 3587         return false; | 
| 3574     // If we're unwinding a scheduleSVGFilterLayerUpdateHack(), then we can't | 3588     // If we're unwinding a scheduleSVGEffectsLayerUpdateHack(), then we can't | 
| 3575     // perform a direct compositing update because the filters code is going | 3589     // perform a direct compositing update because the filters code is going | 
| 3576     // to produce different output this time around. We can remove this code | 3590     // to produce different output this time around. We can remove this code | 
| 3577     // once we fix the chicken/egg bugs in the filters code and delete the | 3591     // once we fix the chicken/egg bugs in the filters code and delete the | 
| 3578     // scheduleSVGFilterLayerUpdateHack(). | 3592     // scheduleSVGEffectsLayerUpdateHack(). | 
| 3579     if (renderer()->node() && renderer()->node()->svgFilterNeedsLayerUpdate()) | 3593     if (renderer()->node() && renderer()->node()->svgEffectsNeedsLayerUpdate()) | 
| 3580         return false; | 3594         return false; | 
| 3581     if (!m_compositedLayerMapping) | 3595     if (!m_compositedLayerMapping) | 
| 3582         return false; | 3596         return false; | 
| 3583 | 3597 | 
| 3584     // To cut off almost all the work in the compositing update for | 3598     // To cut off almost all the work in the compositing update for | 
| 3585     // this case, we treat inline transforms has having assumed overlap | 3599     // this case, we treat inline transforms has having assumed overlap | 
| 3586     // (similar to how we treat animated transforms). Notice that we read | 3600     // (similar to how we treat animated transforms). Notice that we read | 
| 3587     // CompositingReasonInlineTransform from the m_compositingReasons, which | 3601     // CompositingReasonInlineTransform from the m_compositingReasons, which | 
| 3588     // means that the inline transform actually triggered assumed overlap in | 3602     // means that the inline transform actually triggered assumed overlap in | 
| 3589     // the overlap map. | 3603     // the overlap map. | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 3620 | 3634 | 
| 3621     // Overlay scrollbars can make this layer self-painting so we need | 3635     // Overlay scrollbars can make this layer self-painting so we need | 
| 3622     // to recompute the bit once scrollbars have been updated. | 3636     // to recompute the bit once scrollbars have been updated. | 
| 3623     updateSelfPaintingLayer(); | 3637     updateSelfPaintingLayer(); | 
| 3624 | 3638 | 
| 3625     if (!oldStyle || !renderer()->style()->reflectionDataEquivalent(oldStyle)) { | 3639     if (!oldStyle || !renderer()->style()->reflectionDataEquivalent(oldStyle)) { | 
| 3626         ASSERT(!oldStyle || diff.needsFullLayout()); | 3640         ASSERT(!oldStyle || diff.needsFullLayout()); | 
| 3627         updateReflectionInfo(oldStyle); | 3641         updateReflectionInfo(oldStyle); | 
| 3628     } | 3642     } | 
| 3629 | 3643 | 
|  | 3644     updateClipPathInfo(oldStyle, renderer()->style()); | 
|  | 3645 | 
| 3630     if (RuntimeEnabledFeatures::cssCompositingEnabled()) | 3646     if (RuntimeEnabledFeatures::cssCompositingEnabled()) | 
| 3631         m_blendInfo.updateBlendMode(); | 3647         m_blendInfo.updateBlendMode(); | 
| 3632 | 3648 | 
| 3633     updateDescendantDependentFlags(); | 3649     updateDescendantDependentFlags(); | 
| 3634 | 3650 | 
| 3635     updateTransform(oldStyle, renderer()->style()); | 3651     updateTransform(oldStyle, renderer()->style()); | 
| 3636     updateFilters(oldStyle, renderer()->style()); | 3652     updateFilters(oldStyle, renderer()->style()); | 
| 3637 | 3653 | 
| 3638     setNeedsCompositingInputsUpdate(); | 3654     setNeedsCompositingInputsUpdate(); | 
| 3639 } | 3655 } | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3707         // We can optimize away code paths in other places if we know that there
       are no software filters. | 3723         // We can optimize away code paths in other places if we know that there
       are no software filters. | 
| 3708         renderer()->document().view()->setHasSoftwareFilters(true); | 3724         renderer()->document().view()->setHasSoftwareFilters(true); | 
| 3709     } | 3725     } | 
| 3710 | 3726 | 
| 3711     // If the filter fails to build, remove it from the layer. It will still att
      empt to | 3727     // If the filter fails to build, remove it from the layer. It will still att
      empt to | 
| 3712     // go through regular processing (e.g. compositing), but never apply anythin
      g. | 3728     // go through regular processing (e.g. compositing), but never apply anythin
      g. | 
| 3713     if (!filterInfo->renderer()->build(renderer(), computeFilterOperations(rende
      rer()->style()))) | 3729     if (!filterInfo->renderer()->build(renderer(), computeFilterOperations(rende
      rer()->style()))) | 
| 3714         filterInfo->setRenderer(nullptr); | 3730         filterInfo->setRenderer(nullptr); | 
| 3715 } | 3731 } | 
| 3716 | 3732 | 
| 3717 void RenderLayer::filterNeedsPaintInvalidation() | 3733 void RenderLayer::SVGEffectsNeedsPaintInvalidation() | 
| 3718 { | 3734 { | 
| 3719     { | 3735     { | 
| 3720         DeprecatedScheduleStyleRecalcDuringLayout marker(renderer()->document().
      lifecycle()); | 3736         DeprecatedScheduleStyleRecalcDuringLayout marker(renderer()->document().
      lifecycle()); | 
| 3721         // It's possible for scheduleSVGFilterLayerUpdateHack to schedule a styl
      e recalc, which | 3737         // It's possible for scheduleSVGEffectsLayerUpdateHack to schedule a sty
      le recalc, which | 
| 3722         // is a problem because this function can be called while performing lay
      out. | 3738         // is a problem because this function can be called while performing lay
      out. | 
| 3723         // Presumably this represents an illegal data flow of layout or composit
      ing | 3739         // Presumably this represents an illegal data flow of layout or composit
      ing | 
| 3724         // information into the style system. | 3740         // information into the style system. | 
| 3725         toElement(renderer()->node())->scheduleSVGFilterLayerUpdateHack(); | 3741         toElement(renderer()->node())->scheduleSVGEffectsLayerUpdateHack(); | 
| 3726     } | 3742     } | 
| 3727 | 3743 | 
| 3728     if (renderer()->view()) { | 3744     if (renderer()->view()) { | 
| 3729         if (renderer()->frameView()->isInPerformLayout()) | 3745         if (renderer()->frameView()->isInPerformLayout()) | 
| 3730             renderer()->setShouldDoFullPaintInvalidation(true); | 3746             renderer()->setShouldDoFullPaintInvalidation(true); | 
| 3731         else | 3747         else | 
| 3732             renderer()->paintInvalidationForWholeRenderer(); | 3748             renderer()->paintInvalidationForWholeRenderer(); | 
| 3733     } | 3749     } | 
| 3734 } | 3750 } | 
| 3735 | 3751 | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3790     } | 3806     } | 
| 3791 } | 3807 } | 
| 3792 | 3808 | 
| 3793 void showLayerTree(const blink::RenderObject* renderer) | 3809 void showLayerTree(const blink::RenderObject* renderer) | 
| 3794 { | 3810 { | 
| 3795     if (!renderer) | 3811     if (!renderer) | 
| 3796         return; | 3812         return; | 
| 3797     showLayerTree(renderer->enclosingLayer()); | 3813     showLayerTree(renderer->enclosingLayer()); | 
| 3798 } | 3814 } | 
| 3799 #endif | 3815 #endif | 
| OLD | NEW | 
|---|