Chromium Code Reviews| Index: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
| diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
| index b01a6cdf72ebf83e8f3cd03c97ff373f5a15b88f..2de00f63a0dfb08e25f844fea63477e766a2aa13 100644 |
| --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
| +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
| @@ -4,6 +4,7 @@ |
| #include "core/paint/PaintPropertyTreeBuilder.h" |
| +#include "core/dom/DOMNodeIds.h" |
| #include "core/frame/FrameView.h" |
| #include "core/frame/LocalFrame.h" |
| #include "core/frame/Settings.h" |
| @@ -375,12 +376,17 @@ void PaintPropertyTreeBuilder::updateTransform( |
| if (style.preserves3D() && !renderingContextId) |
| renderingContextId = PtrHash<const LayoutObject>::hash(&object); |
| + CompositorElementId compositorElementId; |
| + if (style.hasCurrentTransformAnimation()) { |
| + updateCompositorElementId(object, compositorElementId); |
| + } |
| + |
| auto& properties = |
| object.getMutableForPainting().ensurePaintProperties(); |
| context.forceSubtreeUpdate |= properties.updateTransform( |
| context.current.transform, matrix, transformOrigin(box), |
| context.current.shouldFlattenInheritedTransform, renderingContextId, |
| - compositingReasons); |
| + compositingReasons, compositorElementId); |
| hasTransform = true; |
| } |
| } |
| @@ -484,16 +490,23 @@ void PaintPropertyTreeBuilder::updateEffect( |
| } |
| CompositingReasons compositingReasons = |
| - CompositingReasonFinder::requiresCompositingForEffectAnimation( |
| - object.styleRef()); |
| + CompositingReasonFinder::requiresCompositingForEffectAnimation(style); |
| if (compositingReasons != CompositingReasonNone) |
| effectNodeNeeded = true; |
| + CompositorElementId compositorElementId; |
|
pdr.
2017/01/03 21:29:04
Could you do something like:
bool needsCompositorE
wkorman
2017/01/03 22:04:40
Yeah, sort of -- CompositorElementId is a struct w
|
| + if (style.hasCurrentOpacityAnimation() || |
| + style.hasCurrentFilterAnimation() || |
| + style.hasCurrentBackdropFilterAnimation()) { |
| + updateCompositorElementId(object, compositorElementId); |
| + } |
| + |
| if (effectNodeNeeded) { |
| auto& properties = object.getMutableForPainting().ensurePaintProperties(); |
| context.forceSubtreeUpdate |= properties.updateEffect( |
| context.currentEffect, context.current.transform, outputClip, |
| - std::move(filter), opacity, blendMode, compositingReasons); |
| + std::move(filter), opacity, blendMode, compositingReasons, |
| + compositorElementId); |
| } else { |
| if (auto* properties = object.getMutableForPainting().paintProperties()) |
| context.forceSubtreeUpdate |= properties->clearEffect(); |
| @@ -835,6 +848,13 @@ void PaintPropertyTreeBuilder::updateOutOfFlowContext( |
| } |
| } |
| +void PaintPropertyTreeBuilder::updateCompositorElementId( |
|
pdr.
2017/01/03 21:29:04
The other update* functions follow a style where s
wkorman
2017/01/03 22:04:40
See above comment.
wkorman
2017/01/03 22:15:24
Moved to anonymous namespace and removed method fr
|
| + const LayoutObject& object, |
| + CompositorElementId& compositorElementId) { |
| + compositorElementId = createCompositorElementId( |
| + DOMNodeIds::idForNode(object.node()), CompositorSubElementId::Primary); |
| +} |
| + |
| // Override ContainingBlockContext based on the properties of a containing block |
| // that was previously walked in a subtree other than the current subtree being |
| // walked. Used for out-of-flow positioned descendants of multi-column spanner |