| 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..d49e0388828d5b037d8eb5184e5a69d345ddb391 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"
|
| @@ -336,6 +337,16 @@ static FloatPoint3D transformOrigin(const LayoutBox& box) {
|
| style.transformOriginZ());
|
| }
|
|
|
| +namespace {
|
| +
|
| +CompositorElementId createDomNodeBasedCompositorElementId(
|
| + const LayoutObject& object) {
|
| + return createCompositorElementId(DOMNodeIds::idForNode(object.node()),
|
| + CompositorSubElementId::Primary);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| void PaintPropertyTreeBuilder::updateTransform(
|
| const LayoutObject& object,
|
| PaintPropertyTreeBuilderContext& context) {
|
| @@ -375,12 +386,17 @@ void PaintPropertyTreeBuilder::updateTransform(
|
| if (style.preserves3D() && !renderingContextId)
|
| renderingContextId = PtrHash<const LayoutObject>::hash(&object);
|
|
|
| + CompositorElementId compositorElementId =
|
| + style.hasCurrentTransformAnimation()
|
| + ? createDomNodeBasedCompositorElementId(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 +500,23 @@ void PaintPropertyTreeBuilder::updateEffect(
|
| }
|
|
|
| CompositingReasons compositingReasons =
|
| - CompositingReasonFinder::requiresCompositingForEffectAnimation(
|
| - object.styleRef());
|
| + CompositingReasonFinder::requiresCompositingForEffectAnimation(style);
|
| if (compositingReasons != CompositingReasonNone)
|
| effectNodeNeeded = true;
|
|
|
| + CompositorElementId compositorElementId =
|
| + (style.hasCurrentOpacityAnimation() ||
|
| + style.hasCurrentFilterAnimation() ||
|
| + style.hasCurrentBackdropFilterAnimation())
|
| + ? createDomNodeBasedCompositorElementId(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();
|
|
|