| 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 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 CompositorElementId compositorElementId = | 190 CompositorElementId compositorElementId = |
| 191 transformNode->compositorElementId(); | 191 transformNode->compositorElementId(); |
| 192 if (compositorElementId) { | 192 if (compositorElementId) { |
| 193 m_propertyTrees.element_id_to_transform_node_index[compositorElementId] = | 193 m_propertyTrees.element_id_to_transform_node_index[compositorElementId] = |
| 194 id; | 194 id; |
| 195 } | 195 } |
| 196 | 196 |
| 197 auto result = m_transformNodeMap.set(transformNode, id); | 197 auto result = m_transformNodeMap.set(transformNode, id); |
| 198 DCHECK(result.isNewEntry); | 198 DCHECK(result.isNewEntry); |
| 199 transformTree().set_needs_update(true); | 199 transformTree().set_needs_update(true); |
| 200 |
| 201 if (transformNode->scrollNode()) |
| 202 updateScrollAndScrollTranslationNodes(transformNode); |
| 203 |
| 200 return id; | 204 return id; |
| 201 } | 205 } |
| 202 | 206 |
| 203 int PropertyTreeManager::ensureCompositorClipNode( | 207 int PropertyTreeManager::ensureCompositorClipNode( |
| 204 const ClipPaintPropertyNode* clipNode) { | 208 const ClipPaintPropertyNode* clipNode) { |
| 205 DCHECK(clipNode); | 209 DCHECK(clipNode); |
| 206 // TODO(crbug.com/645615): Remove the failsafe here. | 210 // TODO(crbug.com/645615): Remove the failsafe here. |
| 207 if (!clipNode) | 211 if (!clipNode) |
| 208 return kSecondaryRootNodeId; | 212 return kSecondaryRootNodeId; |
| 209 | 213 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 compositorNode.scrollable = true; | 271 compositorNode.scrollable = true; |
| 268 | 272 |
| 269 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(), | 273 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(), |
| 270 scrollNode->clip().height()); | 274 scrollNode->clip().height()); |
| 271 compositorNode.bounds.SetSize(scrollNode->bounds().width(), | 275 compositorNode.bounds.SetSize(scrollNode->bounds().width(), |
| 272 scrollNode->bounds().height()); | 276 scrollNode->bounds().height()); |
| 273 compositorNode.user_scrollable_horizontal = | 277 compositorNode.user_scrollable_horizontal = |
| 274 scrollNode->userScrollableHorizontal(); | 278 scrollNode->userScrollableHorizontal(); |
| 275 compositorNode.user_scrollable_vertical = | 279 compositorNode.user_scrollable_vertical = |
| 276 scrollNode->userScrollableVertical(); | 280 scrollNode->userScrollableVertical(); |
| 277 compositorNode.transform_id = | |
| 278 ensureCompositorTransformNode(scrollNode->scrollOffsetTranslation()); | |
| 279 compositorNode.main_thread_scrolling_reasons = | 281 compositorNode.main_thread_scrolling_reasons = |
| 280 scrollNode->mainThreadScrollingReasons(); | 282 scrollNode->mainThreadScrollingReasons(); |
| 281 CompositorElementId compositorElementId = scrollNode->compositorElementId(); | |
| 282 if (compositorElementId) { | |
| 283 compositorNode.element_id = compositorElementId; | |
| 284 m_propertyTrees.element_id_to_scroll_node_index[compositorElementId] = id; | |
| 285 } | |
| 286 | 283 |
| 287 auto result = m_scrollNodeMap.set(scrollNode, id); | 284 auto result = m_scrollNodeMap.set(scrollNode, id); |
| 288 DCHECK(result.isNewEntry); | 285 DCHECK(result.isNewEntry); |
| 289 scrollTree().set_needs_update(true); | 286 scrollTree().set_needs_update(true); |
| 290 | 287 |
| 291 return id; | 288 return id; |
| 292 } | 289 } |
| 293 | 290 |
| 294 void PropertyTreeManager::updateScrollOffset( | 291 void PropertyTreeManager::updateScrollAndScrollTranslationNodes( |
| 295 const ScrollPaintPropertyNode* scrollNode) { | 292 const TransformPaintPropertyNode* scrollOffsetNode) { |
| 296 int scrollNodeId = ensureCompositorScrollNode(scrollNode); | 293 DCHECK(scrollOffsetNode->scrollNode()); |
| 297 cc::ScrollNode& compositorScrollNode = *scrollTree().Node(scrollNodeId); | 294 int scrollNodeId = ensureCompositorScrollNode(scrollOffsetNode->scrollNode()); |
| 298 cc::TransformNode& compositorTransformNode = | 295 auto& compositorScrollNode = *scrollTree().Node(scrollNodeId); |
| 299 *transformTree().Node(compositorScrollNode.transform_id); | 296 int transformNodeId = ensureCompositorTransformNode(scrollOffsetNode); |
| 297 auto& compositorTransformNode = *transformTree().Node(transformNodeId); |
| 298 |
| 299 auto compositorElementId = scrollOffsetNode->compositorElementId(); |
| 300 if (compositorElementId) { |
| 301 compositorScrollNode.element_id = compositorElementId; |
| 302 m_propertyTrees.element_id_to_scroll_node_index[compositorElementId] = |
| 303 scrollNodeId; |
| 304 } |
| 305 |
| 306 compositorScrollNode.transform_id = transformNodeId; |
| 300 | 307 |
| 301 // Blink creates a 2d transform node just for scroll offset whereas cc's | 308 // Blink creates a 2d transform node just for scroll offset whereas cc's |
| 302 // transform node has a special scroll offset field. To handle this we adjust | 309 // transform node has a special scroll offset field. To handle this we adjust |
| 303 // cc's transform node to remove the 2d scroll translation and instead set the | 310 // cc's transform node to remove the 2d scroll translation and instead set the |
| 304 // scroll_offset field. | 311 // scroll_offset field. |
| 305 auto* scrollOffsetTransform = scrollNode->scrollOffsetTranslation(); | 312 auto scrollOffsetSize = scrollOffsetNode->matrix().to2DTranslation(); |
| 306 auto scrollOffsetSize = scrollOffsetTransform->matrix().to2DTranslation(); | |
| 307 auto scrollOffset = | 313 auto scrollOffset = |
| 308 gfx::ScrollOffset(-scrollOffsetSize.width(), -scrollOffsetSize.height()); | 314 gfx::ScrollOffset(-scrollOffsetSize.width(), -scrollOffsetSize.height()); |
| 309 DCHECK(compositorTransformNode.local.IsIdentityOr2DTranslation()); | 315 DCHECK(compositorTransformNode.local.IsIdentityOr2DTranslation()); |
| 310 compositorTransformNode.scroll_offset = scrollOffset; | 316 compositorTransformNode.scroll_offset = scrollOffset; |
| 311 compositorTransformNode.local.MakeIdentity(); | 317 compositorTransformNode.local.MakeIdentity(); |
| 312 compositorTransformNode.scrolls = true; | 318 compositorTransformNode.scrolls = true; |
| 313 transformTree().set_needs_update(true); | 319 transformTree().set_needs_update(true); |
| 314 // TODO(pdr): The scroll tree's scroll offset will need to be set here. | 320 // TODO(pdr): The scroll tree's scroll offset will need to be set here. |
| 315 } | 321 } |
| 316 | 322 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); | 410 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); |
| 405 | 411 |
| 406 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 412 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 407 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); | 413 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); |
| 408 dummyLayer->SetClipTreeIndex(outputClipId); | 414 dummyLayer->SetClipTreeIndex(outputClipId); |
| 409 dummyLayer->SetEffectTreeIndex(effectNode.id); | 415 dummyLayer->SetEffectTreeIndex(effectNode.id); |
| 410 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 416 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 411 } | 417 } |
| 412 | 418 |
| 413 } // namespace blink | 419 } // namespace blink |
| OLD | NEW |