| Index: third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
|
| index 50a63a3e6fb39273db67ebc6f3932bc0193f7759..a6b3dcc52da8f3f2cfa375cab0cd8bb3bbb19025 100644
|
| --- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
|
| @@ -2199,6 +2199,37 @@ void CompositedLayerMapping::UpdateShouldFlattenTransform() {
|
| }
|
| }
|
|
|
| +struct AnimatingData {
|
| + STACK_ALLOCATED()
|
| + Persistent<Node> owning_node = nullptr;
|
| + Persistent<Element> animating_element = nullptr;
|
| + const ComputedStyle* animating_style = nullptr;
|
| +};
|
| +
|
| +void GetAnimatingData(PaintLayer& paint_layer, AnimatingData& data) {
|
| + if (!RuntimeEnabledFeatures::compositorWorkerEnabled())
|
| + return;
|
| +
|
| + data.owning_node = paint_layer.GetLayoutObject().GetNode();
|
| +
|
| + if (!data.owning_node)
|
| + return;
|
| +
|
| + Document& document = data.owning_node->GetDocument();
|
| + Element* scrolling_element = document.ScrollingElementNoLayout();
|
| + if (data.owning_node->IsElementNode() &&
|
| + (!RuntimeEnabledFeatures::rootLayerScrollingEnabled() ||
|
| + data.owning_node != scrolling_element)) {
|
| + data.animating_element = ToElement(data.owning_node);
|
| + data.animating_style = paint_layer.GetLayoutObject().Style();
|
| + } else if (data.owning_node->IsDocumentNode() &&
|
| + RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
|
| + data.owning_node = data.animating_element = scrolling_element;
|
| + if (scrolling_element && scrolling_element->GetLayoutObject())
|
| + data.animating_style = scrolling_element->GetLayoutObject()->Style();
|
| + }
|
| +}
|
| +
|
| // Some background on when you receive an element id or mutable properties.
|
| //
|
| // element id:
|
| @@ -2213,52 +2244,34 @@ void CompositedLayerMapping::UpdateShouldFlattenTransform() {
|
| // well as the mutable properties for all layers may change according to the
|
| // rules above so we update those values here.
|
| void CompositedLayerMapping::UpdateElementIdAndCompositorMutableProperties() {
|
| - int element_id = 0;
|
| uint32_t primary_mutable_properties = CompositorMutableProperty::kNone;
|
| uint32_t scroll_mutable_properties = CompositorMutableProperty::kNone;
|
|
|
| - Node* owning_node = owning_layer_.GetLayoutObject().GetNode();
|
| - Element* animating_element = nullptr;
|
| - const ComputedStyle* animating_style = nullptr;
|
| - if (owning_node) {
|
| - Document& document = owning_node->GetDocument();
|
| - Element* scrolling_element = document.ScrollingElementNoLayout();
|
| - if (owning_node->IsElementNode() &&
|
| - (!RuntimeEnabledFeatures::rootLayerScrollingEnabled() ||
|
| - owning_node != scrolling_element)) {
|
| - animating_element = ToElement(owning_node);
|
| - animating_style = owning_layer_.GetLayoutObject().Style();
|
| - } else if (owning_node->IsDocumentNode() &&
|
| - RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
|
| - owning_node = animating_element = scrolling_element;
|
| - if (scrolling_element && scrolling_element->GetLayoutObject())
|
| - animating_style = scrolling_element->GetLayoutObject()->Style();
|
| - }
|
| - }
|
| + AnimatingData data;
|
| + GetAnimatingData(owning_layer_, data);
|
| +
|
| + CompositorElementId element_id;
|
| + if (data.animating_style && data.animating_style->HasCompositorProxy()) {
|
| + // Compositor proxy element ids cannot be based on PaintLayers, since
|
| + // those are not kept alive by script across frames.
|
| + element_id = CompositorElementIdFromDOMNodeId(
|
| + DOMNodeIds::IdForNode(data.owning_node),
|
| + CompositorElementIdNamespace::kPrimaryCompositorProxy);
|
|
|
| - if (RuntimeEnabledFeatures::compositorWorkerEnabled() && animating_style &&
|
| - animating_style->HasCompositorProxy()) {
|
| uint32_t compositor_mutable_properties =
|
| - animating_element->CompositorMutableProperties();
|
| - element_id = DOMNodeIds::IdForNode(owning_node);
|
| + data.animating_element->CompositorMutableProperties();
|
| primary_mutable_properties = (CompositorMutableProperty::kOpacity |
|
| CompositorMutableProperty::kTransform) &
|
| compositor_mutable_properties;
|
| scroll_mutable_properties = (CompositorMutableProperty::kScrollLeft |
|
| CompositorMutableProperty::kScrollTop) &
|
| compositor_mutable_properties;
|
| + } else {
|
| + element_id = CompositorElementIdFromPaintLayerId(
|
| + owning_layer_.UniqueId(), CompositorElementIdNamespace::kPrimary);
|
| }
|
|
|
| - if (animating_style && animating_style->ShouldCompositeForCurrentAnimations())
|
| - element_id = DOMNodeIds::IdForNode(owning_node);
|
| -
|
| - CompositorElementId compositor_element_id;
|
| - if (element_id) {
|
| - compositor_element_id = CompositorElementIdFromDOMNodeId(
|
| - element_id, CompositorElementIdNamespace::kPrimary);
|
| - }
|
| -
|
| - graphics_layer_->SetElementId(compositor_element_id);
|
| + graphics_layer_->SetElementId(element_id);
|
| graphics_layer_->SetCompositorMutableProperties(primary_mutable_properties);
|
|
|
| // We always set the elementId for m_scrollingContentsLayer since it can be
|
| @@ -2380,13 +2393,21 @@ bool CompositedLayerMapping::UpdateScrollingLayers(
|
| scrolling_contents_layer_ =
|
| CreateGraphicsLayer(kCompositingReasonLayerForScrollingContents);
|
|
|
| - if (Node* owning_node = owning_layer_.GetLayoutObject().GetNode()) {
|
| - scrolling_contents_layer_->SetElementId(
|
| - CompositorElementIdFromDOMNodeId(
|
| - DOMNodeIds::IdForNode(owning_node),
|
| - CompositorElementIdNamespace::kScroll));
|
| + AnimatingData data;
|
| + GetAnimatingData(owning_layer_, data);
|
| +
|
| + CompositorElementId element_id;
|
| + if (data.animating_style && data.animating_style->HasCompositorProxy()) {
|
| + element_id = CompositorElementIdFromDOMNodeId(
|
| + DOMNodeIds::IdForNode(data.owning_node),
|
| + CompositorElementIdNamespace::kScrollCompositorProxy);
|
| + } else {
|
| + element_id = CompositorElementIdFromPaintLayerId(
|
| + owning_layer_.UniqueId(), CompositorElementIdNamespace::kScroll);
|
| }
|
|
|
| + scrolling_contents_layer_->SetElementId(element_id);
|
| +
|
| scrolling_layer_->AddChild(scrolling_contents_layer_.get());
|
|
|
| layer_changed = true;
|
|
|