| Index: third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
|
| index ade810ee46d934f157ba5a39bd3b6402af6c5b6d..6ef8b4e5949d332e6c7a5ba8ed916dd1e7b22006 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
|
| @@ -258,57 +258,41 @@ scoped_refptr<cc::Layer> foreignLayerForPaintChunk(const PaintArtifact& paintArt
|
| return layer;
|
| }
|
|
|
| -static const int kInvalidNodeId = -1;
|
| -static const int kRealRootNodeId = 0;
|
| -static const int kSecondaryRootNodeId = 1;
|
| -static const int kPropertyTreeSequenceNumber = 1;
|
| +
|
| +constexpr int kRealRootNodeId = 0;
|
| +constexpr int kSecondaryRootNodeId = 1;
|
| +constexpr int kPropertyTreeSequenceNumber = 1;
|
|
|
| // Creates a minimal set of property trees for the compositor.
|
| void setMinimalPropertyTrees(cc::PropertyTrees* propertyTrees, int ownerId)
|
| {
|
| - // cc's property trees expect a child of the actual root to be used. So we
|
| - // need to create and populate an additional node for each type of tree.
|
| -
|
| + // cc is hardcoded to use transform node index 1 for device scale and transform.
|
| cc::TransformTree& transformTree = propertyTrees->transform_tree;
|
| transformTree.clear();
|
| - transformTree.Insert(cc::TransformNode(), kRealRootNodeId);
|
| - cc::TransformNode& transformNode = *transformTree.back();
|
| + cc::TransformNode& transformNode = *transformTree.Node(transformTree.Insert(cc::TransformNode(), kRealRootNodeId));
|
| + DCHECK_EQ(transformNode.id, kSecondaryRootNodeId);
|
| + transformNode.data.source_node_id = transformNode.parent_id;
|
| transformTree.SetTargetId(transformNode.id, kRealRootNodeId);
|
| - transformTree.SetContentTargetId(transformNode.id, kSecondaryRootNodeId);
|
| - transformNode.data.source_node_id = kRealRootNodeId;
|
| - transformNode.data.needs_local_transform_update = true;
|
| - transformNode.owner_id = ownerId;
|
| - transformTree.set_needs_update(true);
|
| + transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId);
|
|
|
| + // cc is hardcoded to use clip node index 1 for viewport clip.
|
| cc::ClipTree& clipTree = propertyTrees->clip_tree;
|
| clipTree.clear();
|
| - clipTree.Insert(cc::ClipNode(), kRealRootNodeId);
|
| - cc::ClipNode& clipNode = *clipTree.back();
|
| - clipNode.data.transform_id = kSecondaryRootNodeId;
|
| - clipNode.data.target_id = kSecondaryRootNodeId;
|
| + cc::ClipNode& clipNode = *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRealRootNodeId));
|
| + DCHECK_EQ(clipNode.id, kSecondaryRootNodeId);
|
| clipNode.owner_id = ownerId;
|
| - clipTree.set_needs_update(true);
|
|
|
| + // cc is hardcoded to use effect node index 1 for root render surface.
|
| cc::EffectTree& effectTree = propertyTrees->effect_tree;
|
| effectTree.clear();
|
| - // This matches what cc does right now: the secondary root isn't a child
|
| - // of the first root (at index 0). This may not have been intentional.
|
| - effectTree.Insert(cc::EffectNode(), kInvalidNodeId);
|
| - cc::EffectNode& effectNode = *effectTree.back();
|
| - effectNode.data.has_render_surface = true;
|
| - effectNode.data.transform_id = kRealRootNodeId;
|
| - effectNode.data.clip_id = kRealRootNodeId;
|
| + cc::EffectNode& effectNode = *effectTree.Node(effectTree.Insert(cc::EffectNode(), kRealRootNodeId));
|
| + DCHECK_EQ(effectNode.id, kSecondaryRootNodeId);
|
| effectNode.owner_id = ownerId;
|
| - effectTree.set_needs_update(true);
|
| + effectNode.data.clip_id = clipNode.id;
|
| + effectNode.data.has_render_surface = true;
|
|
|
| cc::ScrollTree& scrollTree = propertyTrees->scroll_tree;
|
| scrollTree.clear();
|
| - scrollTree.Insert(cc::ScrollNode(), kRealRootNodeId);
|
| - cc::ScrollNode& scrollNode = *scrollTree.back();
|
| - scrollNode.data.scrollable = false;
|
| - scrollNode.data.transform_id = kSecondaryRootNodeId;
|
| - scrollNode.owner_id = ownerId;
|
| - scrollTree.set_needs_update(true);
|
| }
|
|
|
| } // namespace
|
| @@ -423,11 +407,9 @@ int TransformTreeManager::compositorIdForNode(const TransformPaintPropertyNode*
|
| int id = m_transformTree.Insert(cc::TransformNode(), parentId);
|
|
|
| cc::TransformNode& compositorNode = *m_transformTree.Node(id);
|
| - m_transformTree.SetTargetId(id, kSecondaryRootNodeId);
|
| - m_transformTree.SetContentTargetId(id, kSecondaryRootNodeId);
|
| - compositorNode.owner_id = dummyLayer->id();
|
| + m_transformTree.SetTargetId(id, kRealRootNodeId);
|
| + m_transformTree.SetContentTargetId(id, kRealRootNodeId);
|
| compositorNode.data.source_node_id = parentId;
|
| - compositorNode.data.needs_local_transform_update = true;
|
|
|
| FloatPoint3D origin = transformNode->origin();
|
| compositorNode.data.pre_local.matrix().setTranslate(
|
| @@ -441,7 +423,7 @@ int TransformTreeManager::compositorIdForNode(const TransformPaintPropertyNode*
|
| dummyLayer->SetTransformTreeIndex(id);
|
| dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId);
|
| dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId);
|
| - dummyLayer->SetScrollTreeIndex(kSecondaryRootNodeId);
|
| + dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
|
| dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
|
|
|
| auto result = m_nodeMap.set(transformNode, id);
|
| @@ -456,15 +438,13 @@ void PaintArtifactCompositor::updateInLayerListMode(const PaintArtifact& paintAr
|
| {
|
| cc::LayerTreeHost* host = m_rootLayer->layer_tree_host();
|
|
|
| - // The root layer must be the owner so that the render surface
|
| - // validation works. It's expected to own at least the effect node.
|
| setMinimalPropertyTrees(host->property_trees(), m_rootLayer->id());
|
| m_rootLayer->RemoveAllChildren();
|
| m_rootLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
|
| m_rootLayer->SetTransformTreeIndex(kSecondaryRootNodeId);
|
| m_rootLayer->SetClipTreeIndex(kSecondaryRootNodeId);
|
| m_rootLayer->SetEffectTreeIndex(kSecondaryRootNodeId);
|
| - m_rootLayer->SetScrollTreeIndex(kSecondaryRootNodeId);
|
| + m_rootLayer->SetScrollTreeIndex(kRealRootNodeId);
|
|
|
| TransformTreeManager transformTreeManager(host->property_trees()->transform_tree, m_rootLayer.get());
|
| m_contentLayerClients.clear();
|
| @@ -481,7 +461,7 @@ void PaintArtifactCompositor::updateInLayerListMode(const PaintArtifact& paintAr
|
| layer->SetTransformTreeIndex(transformId);
|
| layer->SetClipTreeIndex(kSecondaryRootNodeId);
|
| layer->SetEffectTreeIndex(kSecondaryRootNodeId);
|
| - layer->SetScrollTreeIndex(kSecondaryRootNodeId);
|
| + layer->SetScrollTreeIndex(kRealRootNodeId);
|
|
|
| if (m_extraDataForTestingEnabled)
|
| m_extraDataForTesting->contentLayers.append(layer);
|
|
|