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

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

Issue 2753933005: cc: Move Layer Id to Node Map to Individual Property Tree Private (Closed)
Patch Set: renaming clean up Created 3 years, 9 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/layer_tree_host.h" 10 #include "cc/trees/layer_tree_host.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 transformTree.set_needs_update(true); 92 transformTree.set_needs_update(true);
93 93
94 m_transformNodeMap.set(TransformPaintPropertyNode::root(), transformNode.id); 94 m_transformNodeMap.set(TransformPaintPropertyNode::root(), transformNode.id);
95 m_rootLayer->SetTransformTreeIndex(transformNode.id); 95 m_rootLayer->SetTransformTreeIndex(transformNode.id);
96 } 96 }
97 97
98 void PropertyTreeManager::setupRootClipNode() { 98 void PropertyTreeManager::setupRootClipNode() {
99 // cc is hardcoded to use clip node index 1 for viewport clip. 99 // cc is hardcoded to use clip node index 1 for viewport clip.
100 cc::ClipTree& clipTree = m_propertyTrees.clip_tree; 100 cc::ClipTree& clipTree = m_propertyTrees.clip_tree;
101 clipTree.clear(); 101 clipTree.clear();
102 m_propertyTrees.layer_id_to_clip_node_index.clear();
103 cc::ClipNode& clipNode = 102 cc::ClipNode& clipNode =
104 *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRealRootNodeId)); 103 *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRealRootNodeId));
105 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); 104 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId);
106 105
107 clipNode.resets_clip = true; 106 clipNode.resets_clip = true;
108 clipNode.owning_layer_id = m_rootLayer->id(); 107 clipNode.owning_layer_id = m_rootLayer->id();
109 clipNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; 108 clipNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP;
110 clipNode.clip = gfx::RectF( 109 clipNode.clip = gfx::RectF(
111 gfx::SizeF(m_rootLayer->layer_tree_host()->device_viewport_size())); 110 gfx::SizeF(m_rootLayer->layer_tree_host()->device_viewport_size()));
112 clipNode.transform_id = kRealRootNodeId; 111 clipNode.transform_id = kRealRootNodeId;
113 clipNode.target_transform_id = kRealRootNodeId; 112 clipNode.target_transform_id = kRealRootNodeId;
114 clipNode.target_effect_id = kSecondaryRootNodeId; 113 clipNode.target_effect_id = kSecondaryRootNodeId;
115 m_propertyTrees.layer_id_to_clip_node_index[clipNode.owning_layer_id] = 114 clipTree.SetOwningLayerIdForNode(&clipNode, clipNode.owning_layer_id);
116 clipNode.id;
117 115
118 m_clipNodeMap.set(ClipPaintPropertyNode::root(), clipNode.id); 116 m_clipNodeMap.set(ClipPaintPropertyNode::root(), clipNode.id);
119 m_rootLayer->SetClipTreeIndex(clipNode.id); 117 m_rootLayer->SetClipTreeIndex(clipNode.id);
120 } 118 }
121 119
122 void PropertyTreeManager::setupRootEffectNode() { 120 void PropertyTreeManager::setupRootEffectNode() {
123 // cc is hardcoded to use effect node index 1 for root render surface. 121 // cc is hardcoded to use effect node index 1 for root render surface.
124 cc::EffectTree& effectTree = m_propertyTrees.effect_tree; 122 cc::EffectTree& effectTree = m_propertyTrees.effect_tree;
125 effectTree.clear(); 123 effectTree.clear();
126 m_propertyTrees.layer_id_to_effect_node_index.clear();
127 m_propertyTrees.element_id_to_effect_node_index.clear(); 124 m_propertyTrees.element_id_to_effect_node_index.clear();
128 cc::EffectNode& effectNode = 125 cc::EffectNode& effectNode =
129 *effectTree.Node(effectTree.Insert(cc::EffectNode(), kInvalidNodeId)); 126 *effectTree.Node(effectTree.Insert(cc::EffectNode(), kInvalidNodeId));
130 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); 127 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId);
131 effectNode.owning_layer_id = m_rootLayer->id(); 128 effectNode.owning_layer_id = m_rootLayer->id();
132 effectNode.transform_id = kRealRootNodeId; 129 effectNode.transform_id = kRealRootNodeId;
133 effectNode.clip_id = kSecondaryRootNodeId; 130 effectNode.clip_id = kSecondaryRootNodeId;
134 effectNode.has_render_surface = true; 131 effectNode.has_render_surface = true;
135 m_propertyTrees.layer_id_to_effect_node_index[effectNode.owning_layer_id] = 132 effectTree.SetOwningLayerIdForNode(&effectNode, effectNode.owning_layer_id);
136 effectNode.id;
137 133
138 m_effectStack.push_back( 134 m_effectStack.push_back(
139 BlinkEffectAndCcIdPair{EffectPaintPropertyNode::root(), effectNode.id}); 135 BlinkEffectAndCcIdPair{EffectPaintPropertyNode::root(), effectNode.id});
140 m_rootLayer->SetEffectTreeIndex(effectNode.id); 136 m_rootLayer->SetEffectTreeIndex(effectNode.id);
141 } 137 }
142 138
143 void PropertyTreeManager::setupRootScrollNode() { 139 void PropertyTreeManager::setupRootScrollNode() {
144 cc::ScrollTree& scrollTree = m_propertyTrees.scroll_tree; 140 cc::ScrollTree& scrollTree = m_propertyTrees.scroll_tree;
145 scrollTree.clear(); 141 scrollTree.clear();
146 m_propertyTrees.layer_id_to_scroll_node_index.clear();
147 m_propertyTrees.element_id_to_scroll_node_index.clear(); 142 m_propertyTrees.element_id_to_scroll_node_index.clear();
148 cc::ScrollNode& scrollNode = 143 cc::ScrollNode& scrollNode =
149 *scrollTree.Node(scrollTree.Insert(cc::ScrollNode(), kRealRootNodeId)); 144 *scrollTree.Node(scrollTree.Insert(cc::ScrollNode(), kRealRootNodeId));
150 DCHECK_EQ(scrollNode.id, kSecondaryRootNodeId); 145 DCHECK_EQ(scrollNode.id, kSecondaryRootNodeId);
151 scrollNode.owning_layer_id = m_rootLayer->id(); 146 scrollNode.owning_layer_id = m_rootLayer->id();
152 scrollNode.transform_id = kSecondaryRootNodeId; 147 scrollNode.transform_id = kSecondaryRootNodeId;
153 m_propertyTrees.layer_id_to_scroll_node_index[scrollNode.owning_layer_id] = 148 scrollTree.SetOwningLayerIdForNode(&scrollNode, scrollNode.owning_layer_id);
154 scrollNode.id;
155 149
156 m_scrollNodeMap.set(ScrollPaintPropertyNode::root(), scrollNode.id); 150 m_scrollNodeMap.set(ScrollPaintPropertyNode::root(), scrollNode.id);
157 m_rootLayer->SetScrollTreeIndex(scrollNode.id); 151 m_rootLayer->SetScrollTreeIndex(scrollNode.id);
158 } 152 }
159 153
160 int PropertyTreeManager::ensureCompositorTransformNode( 154 int PropertyTreeManager::ensureCompositorTransformNode(
161 const TransformPaintPropertyNode* transformNode) { 155 const TransformPaintPropertyNode* transformNode) {
162 DCHECK(transformNode); 156 DCHECK(transformNode);
163 // TODO(crbug.com/645615): Remove the failsafe here. 157 // TODO(crbug.com/645615): Remove the failsafe here.
164 if (!transformNode) 158 if (!transformNode)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 auto it = m_clipNodeMap.find(clipNode); 216 auto it = m_clipNodeMap.find(clipNode);
223 if (it != m_clipNodeMap.end()) 217 if (it != m_clipNodeMap.end())
224 return it->value; 218 return it->value;
225 219
226 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); 220 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create();
227 int parentId = ensureCompositorClipNode(clipNode->parent()); 221 int parentId = ensureCompositorClipNode(clipNode->parent());
228 int id = clipTree().Insert(cc::ClipNode(), parentId); 222 int id = clipTree().Insert(cc::ClipNode(), parentId);
229 223
230 cc::ClipNode& compositorNode = *clipTree().Node(id); 224 cc::ClipNode& compositorNode = *clipTree().Node(id);
231 compositorNode.owning_layer_id = dummyLayer->id(); 225 compositorNode.owning_layer_id = dummyLayer->id();
232 m_propertyTrees.layer_id_to_clip_node_index[compositorNode.owning_layer_id] = 226 clipTree().SetOwningLayerIdForNode(&compositorNode,
233 id; 227 compositorNode.owning_layer_id);
234 228
235 // TODO(jbroman): Don't discard rounded corners. 229 // TODO(jbroman): Don't discard rounded corners.
236 compositorNode.clip = clipNode->clipRect().rect(); 230 compositorNode.clip = clipNode->clipRect().rect();
237 compositorNode.transform_id = 231 compositorNode.transform_id =
238 ensureCompositorTransformNode(clipNode->localTransformSpace()); 232 ensureCompositorTransformNode(clipNode->localTransformSpace());
239 compositorNode.target_transform_id = kRealRootNodeId; 233 compositorNode.target_transform_id = kRealRootNodeId;
240 compositorNode.target_effect_id = kSecondaryRootNodeId; 234 compositorNode.target_effect_id = kSecondaryRootNodeId;
241 compositorNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; 235 compositorNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP;
242 compositorNode.layers_are_clipped = true; 236 compositorNode.layers_are_clipped = true;
243 compositorNode.layers_are_clipped_when_surfaces_disabled = true; 237 compositorNode.layers_are_clipped_when_surfaces_disabled = true;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 // set in updateLayerScrollMapping but that should occur here. 318 // set in updateLayerScrollMapping but that should occur here.
325 } 319 }
326 320
327 void PropertyTreeManager::updateLayerScrollMapping( 321 void PropertyTreeManager::updateLayerScrollMapping(
328 cc::Layer* layer, 322 cc::Layer* layer,
329 const TransformPaintPropertyNode* transform) { 323 const TransformPaintPropertyNode* transform) {
330 auto* enclosingScrollNode = transform->findEnclosingScrollNode(); 324 auto* enclosingScrollNode = transform->findEnclosingScrollNode();
331 int scrollNodeId = ensureCompositorScrollNode(enclosingScrollNode); 325 int scrollNodeId = ensureCompositorScrollNode(enclosingScrollNode);
332 layer->SetScrollTreeIndex(scrollNodeId); 326 layer->SetScrollTreeIndex(scrollNodeId);
333 int layerId = layer->id(); 327 int layerId = layer->id();
334 m_propertyTrees.layer_id_to_scroll_node_index[layerId] = scrollNodeId; 328 auto& compositorScrollNode = *scrollTree().Node(scrollNodeId);
329
330 scrollTree().SetOwningLayerIdForNode(&compositorScrollNode, layerId);
335 331
336 if (!transform->isScrollTranslation()) 332 if (!transform->isScrollTranslation())
337 return; 333 return;
338 334
339 auto& compositorScrollNode = *scrollTree().Node(scrollNodeId);
340
341 // TODO(pdr): Remove the scroll node's owning_layer_id. This approach of 335 // TODO(pdr): Remove the scroll node's owning_layer_id. This approach of
342 // setting owning_layer_id only when it is not set lets us maintain a 1:1 336 // setting owning_layer_id only when it is not set lets us maintain a 1:1
343 // mapping from layer to scroll node. 337 // mapping from layer to scroll node.
344 if (compositorScrollNode.owning_layer_id == cc::Layer::INVALID_ID) { 338 if (compositorScrollNode.owning_layer_id == cc::Layer::INVALID_ID) {
345 compositorScrollNode.owning_layer_id = layerId; 339 compositorScrollNode.owning_layer_id = layerId;
346 auto& compositorTransformNode = 340 auto& compositorTransformNode =
347 *transformTree().Node(compositorScrollNode.transform_id); 341 *transformTree().Node(compositorScrollNode.transform_id);
348 // TODO(pdr): Set this in updateScrollAndScrollTranslationNodes once the 342 // TODO(pdr): Set this in updateScrollAndScrollTranslationNodes once the
349 // layer id is no longer needed. 343 // layer id is no longer needed.
350 scrollTree().SetScrollOffset(layerId, 344 scrollTree().SetScrollOffset(layerId,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 // We are cutting corner here by support only specific configuration. 434 // We are cutting corner here by support only specific configuration.
441 DCHECK(nextEffect->colorFilter() == ColorFilterLuminanceToAlpha); 435 DCHECK(nextEffect->colorFilter() == ColorFilterLuminanceToAlpha);
442 DCHECK(nextEffect->blendMode() == SkBlendMode::kDstIn); 436 DCHECK(nextEffect->blendMode() == SkBlendMode::kDstIn);
443 DCHECK(nextEffect->filter().isEmpty()); 437 DCHECK(nextEffect->filter().isEmpty());
444 effectNode.filters.Append(cc::FilterOperation::CreateReferenceFilter( 438 effectNode.filters.Append(cc::FilterOperation::CreateReferenceFilter(
445 SkColorFilterImageFilter::Make(SkLumaColorFilter::Make(), nullptr))); 439 SkColorFilterImageFilter::Make(SkLumaColorFilter::Make(), nullptr)));
446 } else { 440 } else {
447 effectNode.filters = nextEffect->filter().asCcFilterOperations(); 441 effectNode.filters = nextEffect->filter().asCcFilterOperations();
448 } 442 }
449 effectNode.blend_mode = nextEffect->blendMode(); 443 effectNode.blend_mode = nextEffect->blendMode();
450 m_propertyTrees.layer_id_to_effect_node_index[effectNode.owning_layer_id] = 444 effectTree().SetOwningLayerIdForNode(&effectNode, effectNode.owning_layer_id);
451 effectNode.id;
452 CompositorElementId compositorElementId = nextEffect->compositorElementId(); 445 CompositorElementId compositorElementId = nextEffect->compositorElementId();
453 if (compositorElementId) { 446 if (compositorElementId) {
454 m_propertyTrees.element_id_to_effect_node_index[compositorElementId] = 447 m_propertyTrees.element_id_to_effect_node_index[compositorElementId] =
455 effectNode.id; 448 effectNode.id;
456 } 449 }
457 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); 450 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id});
458 451
459 dummyLayer->set_property_tree_sequence_number(m_sequenceNumber); 452 dummyLayer->set_property_tree_sequence_number(m_sequenceNumber);
460 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); 453 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId);
461 dummyLayer->SetClipTreeIndex(outputClipId); 454 dummyLayer->SetClipTreeIndex(outputClipId);
462 dummyLayer->SetEffectTreeIndex(effectNode.id); 455 dummyLayer->SetEffectTreeIndex(effectNode.id);
463 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); 456 dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
464 } 457 }
465 458
466 } // namespace blink 459 } // 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