| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/graphics/compositing/PropertyTreeManager.h" | 5 #include "platform/graphics/compositing/PropertyTreeManager.h" |
| 6 | 6 |
| 7 #include "cc/layers/layer.h" | 7 #include "cc/layers/layer.h" |
| 8 #include "cc/trees/clip_node.h" | 8 #include "cc/trees/clip_node.h" |
| 9 #include "cc/trees/effect_node.h" | 9 #include "cc/trees/effect_node.h" |
| 10 #include "cc/trees/property_tree.h" | 10 #include "cc/trees/property_tree.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 | 55 |
| 56 const EffectPaintPropertyNode* PropertyTreeManager::currentEffectNode() const { | 56 const EffectPaintPropertyNode* PropertyTreeManager::currentEffectNode() const { |
| 57 return m_effectStack.back().effect; | 57 return m_effectStack.back().effect; |
| 58 } | 58 } |
| 59 | 59 |
| 60 void PropertyTreeManager::setupRootTransformNode() { | 60 void PropertyTreeManager::setupRootTransformNode() { |
| 61 // cc is hardcoded to use transform node index 1 for device scale and | 61 // cc is hardcoded to use transform node index 1 for device scale and |
| 62 // transform. | 62 // transform. |
| 63 cc::TransformTree& transformTree = m_propertyTrees.transform_tree; | 63 cc::TransformTree& transformTree = m_propertyTrees.transform_tree; |
| 64 transformTree.clear(); | 64 transformTree.clear(); |
| 65 m_propertyTrees.element_id_to_transform_node_index.clear(); |
| 65 cc::TransformNode& transformNode = *transformTree.Node( | 66 cc::TransformNode& transformNode = *transformTree.Node( |
| 66 transformTree.Insert(cc::TransformNode(), kRealRootNodeId)); | 67 transformTree.Insert(cc::TransformNode(), kRealRootNodeId)); |
| 67 DCHECK_EQ(transformNode.id, kSecondaryRootNodeId); | 68 DCHECK_EQ(transformNode.id, kSecondaryRootNodeId); |
| 68 transformNode.source_node_id = transformNode.parent_id; | 69 transformNode.source_node_id = transformNode.parent_id; |
| 69 transformTree.SetTargetId(transformNode.id, kRealRootNodeId); | 70 transformTree.SetTargetId(transformNode.id, kRealRootNodeId); |
| 70 transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId); | 71 transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId); |
| 71 | 72 |
| 72 // TODO(jaydasika): We shouldn't set ToScreen and FromScreen of root | 73 // TODO(jaydasika): We shouldn't set ToScreen and FromScreen of root |
| 73 // transform node here. They should be set while updating transform tree in | 74 // transform node here. They should be set while updating transform tree in |
| 74 // cc. | 75 // cc. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 | 109 |
| 109 m_clipNodeMap.set(ClipPaintPropertyNode::root(), clipNode.id); | 110 m_clipNodeMap.set(ClipPaintPropertyNode::root(), clipNode.id); |
| 110 m_rootLayer->SetClipTreeIndex(clipNode.id); | 111 m_rootLayer->SetClipTreeIndex(clipNode.id); |
| 111 } | 112 } |
| 112 | 113 |
| 113 void PropertyTreeManager::setupRootEffectNode() { | 114 void PropertyTreeManager::setupRootEffectNode() { |
| 114 // cc is hardcoded to use effect node index 1 for root render surface. | 115 // cc is hardcoded to use effect node index 1 for root render surface. |
| 115 cc::EffectTree& effectTree = m_propertyTrees.effect_tree; | 116 cc::EffectTree& effectTree = m_propertyTrees.effect_tree; |
| 116 effectTree.clear(); | 117 effectTree.clear(); |
| 117 m_propertyTrees.layer_id_to_effect_node_index.clear(); | 118 m_propertyTrees.layer_id_to_effect_node_index.clear(); |
| 119 m_propertyTrees.element_id_to_effect_node_index.clear(); |
| 118 cc::EffectNode& effectNode = | 120 cc::EffectNode& effectNode = |
| 119 *effectTree.Node(effectTree.Insert(cc::EffectNode(), kInvalidNodeId)); | 121 *effectTree.Node(effectTree.Insert(cc::EffectNode(), kInvalidNodeId)); |
| 120 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); | 122 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); |
| 121 effectNode.owning_layer_id = m_rootLayer->id(); | 123 effectNode.owning_layer_id = m_rootLayer->id(); |
| 122 effectNode.transform_id = kRealRootNodeId; | 124 effectNode.transform_id = kRealRootNodeId; |
| 123 effectNode.clip_id = kSecondaryRootNodeId; | 125 effectNode.clip_id = kSecondaryRootNodeId; |
| 124 effectNode.has_render_surface = true; | 126 effectNode.has_render_surface = true; |
| 125 m_propertyTrees.layer_id_to_effect_node_index[effectNode.owning_layer_id] = | 127 m_propertyTrees.layer_id_to_effect_node_index[effectNode.owning_layer_id] = |
| 126 effectNode.id; | 128 effectNode.id; |
| 127 | 129 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 compositorNode.flattens_inherited_transform = | 180 compositorNode.flattens_inherited_transform = |
| 179 transformNode->flattensInheritedTransform(); | 181 transformNode->flattensInheritedTransform(); |
| 180 compositorNode.sorting_context_id = transformNode->renderingContextId(); | 182 compositorNode.sorting_context_id = transformNode->renderingContextId(); |
| 181 | 183 |
| 182 m_rootLayer->AddChild(dummyLayer); | 184 m_rootLayer->AddChild(dummyLayer); |
| 183 dummyLayer->SetTransformTreeIndex(id); | 185 dummyLayer->SetTransformTreeIndex(id); |
| 184 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); | 186 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); |
| 185 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); | 187 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); |
| 186 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 188 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 187 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 189 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 190 CompositorElementId compositorElementId = |
| 191 transformNode->compositorElementId(); |
| 192 if (compositorElementId) { |
| 193 m_propertyTrees.element_id_to_transform_node_index[compositorElementId] = |
| 194 id; |
| 195 } |
| 188 | 196 |
| 189 auto result = m_transformNodeMap.set(transformNode, id); | 197 auto result = m_transformNodeMap.set(transformNode, id); |
| 190 DCHECK(result.isNewEntry); | 198 DCHECK(result.isNewEntry); |
| 191 transformTree().set_needs_update(true); | 199 transformTree().set_needs_update(true); |
| 192 return id; | 200 return id; |
| 193 } | 201 } |
| 194 | 202 |
| 195 int PropertyTreeManager::ensureCompositorClipNode( | 203 int PropertyTreeManager::ensureCompositorClipNode( |
| 196 const ClipPaintPropertyNode* clipNode) { | 204 const ClipPaintPropertyNode* clipNode) { |
| 197 DCHECK(clipNode); | 205 DCHECK(clipNode); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 return kSecondaryRootNodeId; | 251 return kSecondaryRootNodeId; |
| 244 | 252 |
| 245 auto it = m_scrollNodeMap.find(scrollNode); | 253 auto it = m_scrollNodeMap.find(scrollNode); |
| 246 if (it != m_scrollNodeMap.end()) | 254 if (it != m_scrollNodeMap.end()) |
| 247 return it->value; | 255 return it->value; |
| 248 | 256 |
| 249 int parentId = ensureCompositorScrollNode(scrollNode->parent()); | 257 int parentId = ensureCompositorScrollNode(scrollNode->parent()); |
| 250 int id = scrollTree().Insert(cc::ScrollNode(), parentId); | 258 int id = scrollTree().Insert(cc::ScrollNode(), parentId); |
| 251 | 259 |
| 252 cc::ScrollNode& compositorNode = *scrollTree().Node(id); | 260 cc::ScrollNode& compositorNode = *scrollTree().Node(id); |
| 261 // TODO(wkorman): Fix owning layer id to reference a layer id rather than a |
| 262 // scroll node index. |
| 253 compositorNode.owning_layer_id = parentId; | 263 compositorNode.owning_layer_id = parentId; |
| 254 m_propertyTrees | 264 m_propertyTrees |
| 255 .layer_id_to_scroll_node_index[compositorNode.owning_layer_id] = id; | 265 .layer_id_to_scroll_node_index[compositorNode.owning_layer_id] = id; |
| 256 | 266 |
| 257 compositorNode.scrollable = true; | 267 compositorNode.scrollable = true; |
| 258 | 268 |
| 259 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(), | 269 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(), |
| 260 scrollNode->clip().height()); | 270 scrollNode->clip().height()); |
| 261 compositorNode.bounds.SetSize(scrollNode->bounds().width(), | 271 compositorNode.bounds.SetSize(scrollNode->bounds().width(), |
| 262 scrollNode->bounds().height()); | 272 scrollNode->bounds().height()); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 // decision until later phase of the pipeline. Remove premature optimization | 389 // decision until later phase of the pipeline. Remove premature optimization |
| 380 // here once the work is ready. | 390 // here once the work is ready. |
| 381 if (!nextEffect->filter().isEmpty() || | 391 if (!nextEffect->filter().isEmpty() || |
| 382 nextEffect->blendMode() != SkBlendMode::kSrcOver) | 392 nextEffect->blendMode() != SkBlendMode::kSrcOver) |
| 383 effectNode.has_render_surface = true; | 393 effectNode.has_render_surface = true; |
| 384 effectNode.opacity = nextEffect->opacity(); | 394 effectNode.opacity = nextEffect->opacity(); |
| 385 effectNode.filters = nextEffect->filter().asCcFilterOperations(); | 395 effectNode.filters = nextEffect->filter().asCcFilterOperations(); |
| 386 effectNode.blend_mode = nextEffect->blendMode(); | 396 effectNode.blend_mode = nextEffect->blendMode(); |
| 387 m_propertyTrees.layer_id_to_effect_node_index[effectNode.owning_layer_id] = | 397 m_propertyTrees.layer_id_to_effect_node_index[effectNode.owning_layer_id] = |
| 388 effectNode.id; | 398 effectNode.id; |
| 399 CompositorElementId compositorElementId = nextEffect->compositorElementId(); |
| 400 if (compositorElementId) { |
| 401 m_propertyTrees.element_id_to_effect_node_index[compositorElementId] = |
| 402 effectNode.id; |
| 403 } |
| 389 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); | 404 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); |
| 390 | 405 |
| 391 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 406 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 392 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); | 407 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); |
| 393 dummyLayer->SetClipTreeIndex(outputClipId); | 408 dummyLayer->SetClipTreeIndex(outputClipId); |
| 394 dummyLayer->SetEffectTreeIndex(effectNode.id); | 409 dummyLayer->SetEffectTreeIndex(effectNode.id); |
| 395 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 410 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 396 } | 411 } |
| 397 | 412 |
| 398 } // namespace blink | 413 } // namespace blink |
| OLD | NEW |