Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/compositing/PropertyTreeManager.cpp

Issue 2642183003: Populate cc element id maps for transform/effect nodes. (Closed)
Patch Set: Sync to head. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698