| 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/PaintArtifactCompositor.h" | 5 #include "platform/graphics/compositing/PaintArtifactCompositor.h" |
| 6 | 6 |
| 7 #include "cc/layers/content_layer_client.h" | 7 #include "cc/layers/content_layer_client.h" |
| 8 #include "cc/layers/layer.h" | 8 #include "cc/layers/layer.h" |
| 9 #include "cc/layers/picture_layer.h" | 9 #include "cc/layers/picture_layer.h" |
| 10 #include "cc/playback/display_item_list.h" | 10 #include "cc/playback/display_item_list.h" |
| 11 #include "cc/playback/display_item_list_settings.h" | 11 #include "cc/playback/display_item_list_settings.h" |
| 12 #include "cc/playback/drawing_display_item.h" | 12 #include "cc/playback/drawing_display_item.h" |
| 13 #include "cc/playback/transform_display_item.h" | 13 #include "cc/playback/transform_display_item.h" |
| 14 #include "cc/trees/clip_node.h" |
| 15 #include "cc/trees/effect_node.h" |
| 14 #include "cc/trees/layer_tree_host.h" | 16 #include "cc/trees/layer_tree_host.h" |
| 15 #include "cc/trees/property_tree.h" | 17 #include "cc/trees/property_tree.h" |
| 18 #include "cc/trees/transform_node.h" |
| 16 #include "platform/RuntimeEnabledFeatures.h" | 19 #include "platform/RuntimeEnabledFeatures.h" |
| 17 #include "platform/graphics/paint/ClipPaintPropertyNode.h" | 20 #include "platform/graphics/paint/ClipPaintPropertyNode.h" |
| 18 #include "platform/graphics/paint/DisplayItem.h" | 21 #include "platform/graphics/paint/DisplayItem.h" |
| 19 #include "platform/graphics/paint/DrawingDisplayItem.h" | 22 #include "platform/graphics/paint/DrawingDisplayItem.h" |
| 20 #include "platform/graphics/paint/ForeignLayerDisplayItem.h" | 23 #include "platform/graphics/paint/ForeignLayerDisplayItem.h" |
| 21 #include "platform/graphics/paint/PaintArtifact.h" | 24 #include "platform/graphics/paint/PaintArtifact.h" |
| 22 #include "platform/graphics/paint/PropertyTreeState.h" | 25 #include "platform/graphics/paint/PropertyTreeState.h" |
| 23 #include "platform/graphics/paint/TransformPaintPropertyNode.h" | 26 #include "platform/graphics/paint/TransformPaintPropertyNode.h" |
| 24 #include "public/platform/Platform.h" | 27 #include "public/platform/Platform.h" |
| 25 #include "public/platform/WebCompositorSupport.h" | 28 #include "public/platform/WebCompositorSupport.h" |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 constexpr int kPropertyTreeSequenceNumber = 1; | 232 constexpr int kPropertyTreeSequenceNumber = 1; |
| 230 | 233 |
| 231 // Creates a minimal set of property trees for the compositor. | 234 // Creates a minimal set of property trees for the compositor. |
| 232 void setMinimalPropertyTrees(cc::PropertyTrees* propertyTrees, int ownerId) | 235 void setMinimalPropertyTrees(cc::PropertyTrees* propertyTrees, int ownerId) |
| 233 { | 236 { |
| 234 // cc is hardcoded to use transform node index 1 for device scale and transf
orm. | 237 // cc is hardcoded to use transform node index 1 for device scale and transf
orm. |
| 235 cc::TransformTree& transformTree = propertyTrees->transform_tree; | 238 cc::TransformTree& transformTree = propertyTrees->transform_tree; |
| 236 transformTree.clear(); | 239 transformTree.clear(); |
| 237 cc::TransformNode& transformNode = *transformTree.Node(transformTree.Insert(
cc::TransformNode(), kRealRootNodeId)); | 240 cc::TransformNode& transformNode = *transformTree.Node(transformTree.Insert(
cc::TransformNode(), kRealRootNodeId)); |
| 238 DCHECK_EQ(transformNode.id, kSecondaryRootNodeId); | 241 DCHECK_EQ(transformNode.id, kSecondaryRootNodeId); |
| 239 transformNode.data.source_node_id = transformNode.parent_id; | 242 transformNode.source_node_id = transformNode.parent_id; |
| 240 transformTree.SetTargetId(transformNode.id, kRealRootNodeId); | 243 transformTree.SetTargetId(transformNode.id, kRealRootNodeId); |
| 241 transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId); | 244 transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId); |
| 242 | 245 |
| 243 // cc is hardcoded to use clip node index 1 for viewport clip. | 246 // cc is hardcoded to use clip node index 1 for viewport clip. |
| 244 cc::ClipTree& clipTree = propertyTrees->clip_tree; | 247 cc::ClipTree& clipTree = propertyTrees->clip_tree; |
| 245 clipTree.clear(); | 248 clipTree.clear(); |
| 246 cc::ClipNode& clipNode = *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRea
lRootNodeId)); | 249 cc::ClipNode& clipNode = *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRea
lRootNodeId)); |
| 247 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); | 250 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); |
| 248 clipNode.owner_id = ownerId; | 251 clipNode.owner_id = ownerId; |
| 249 | 252 |
| 250 // cc is hardcoded to use effect node index 1 for root render surface. | 253 // cc is hardcoded to use effect node index 1 for root render surface. |
| 251 cc::EffectTree& effectTree = propertyTrees->effect_tree; | 254 cc::EffectTree& effectTree = propertyTrees->effect_tree; |
| 252 effectTree.clear(); | 255 effectTree.clear(); |
| 253 cc::EffectNode& effectNode = *effectTree.Node(effectTree.Insert(cc::EffectNo
de(), kRealRootNodeId)); | 256 cc::EffectNode& effectNode = *effectTree.Node(effectTree.Insert(cc::EffectNo
de(), kRealRootNodeId)); |
| 254 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); | 257 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); |
| 255 effectNode.owner_id = ownerId; | 258 effectNode.owner_id = ownerId; |
| 256 effectNode.data.clip_id = clipNode.id; | 259 effectNode.clip_id = clipNode.id; |
| 257 effectNode.data.has_render_surface = true; | 260 effectNode.has_render_surface = true; |
| 258 | 261 |
| 259 cc::ScrollTree& scrollTree = propertyTrees->scroll_tree; | 262 cc::ScrollTree& scrollTree = propertyTrees->scroll_tree; |
| 260 scrollTree.clear(); | 263 scrollTree.clear(); |
| 261 } | 264 } |
| 262 | 265 |
| 263 } // namespace | 266 } // namespace |
| 264 | 267 |
| 265 void PaintArtifactCompositor::update(const PaintArtifact& paintArtifact) | 268 void PaintArtifactCompositor::update(const PaintArtifact& paintArtifact) |
| 266 { | 269 { |
| 267 DCHECK(m_rootLayer); | 270 DCHECK(m_rootLayer); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 if (it != m_transformNodeMap.end()) | 375 if (it != m_transformNodeMap.end()) |
| 373 return it->value; | 376 return it->value; |
| 374 | 377 |
| 375 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); | 378 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); |
| 376 int parentId = compositorIdForTransformNode(transformNode->parent()); | 379 int parentId = compositorIdForTransformNode(transformNode->parent()); |
| 377 int id = transformTree().Insert(cc::TransformNode(), parentId); | 380 int id = transformTree().Insert(cc::TransformNode(), parentId); |
| 378 | 381 |
| 379 cc::TransformNode& compositorNode = *transformTree().Node(id); | 382 cc::TransformNode& compositorNode = *transformTree().Node(id); |
| 380 transformTree().SetTargetId(id, kRealRootNodeId); | 383 transformTree().SetTargetId(id, kRealRootNodeId); |
| 381 transformTree().SetContentTargetId(id, kRealRootNodeId); | 384 transformTree().SetContentTargetId(id, kRealRootNodeId); |
| 382 compositorNode.data.source_node_id = parentId; | 385 compositorNode.source_node_id = parentId; |
| 383 | 386 |
| 384 FloatPoint3D origin = transformNode->origin(); | 387 FloatPoint3D origin = transformNode->origin(); |
| 385 compositorNode.data.pre_local.matrix().setTranslate( | 388 compositorNode.pre_local.matrix().setTranslate( |
| 386 -origin.x(), -origin.y(), -origin.z()); | 389 -origin.x(), -origin.y(), -origin.z()); |
| 387 compositorNode.data.local.matrix() = TransformationMatrix::toSkMatrix44(tran
sformNode->matrix()); | 390 compositorNode.local.matrix() = TransformationMatrix::toSkMatrix44(transform
Node->matrix()); |
| 388 compositorNode.data.post_local.matrix().setTranslate( | 391 compositorNode.post_local.matrix().setTranslate( |
| 389 origin.x(), origin.y(), origin.z()); | 392 origin.x(), origin.y(), origin.z()); |
| 390 compositorNode.data.needs_local_transform_update = true; | 393 compositorNode.needs_local_transform_update = true; |
| 391 | 394 |
| 392 m_rootLayer->AddChild(dummyLayer); | 395 m_rootLayer->AddChild(dummyLayer); |
| 393 dummyLayer->SetTransformTreeIndex(id); | 396 dummyLayer->SetTransformTreeIndex(id); |
| 394 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); | 397 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); |
| 395 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); | 398 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); |
| 396 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 399 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 397 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 400 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 398 | 401 |
| 399 auto result = m_transformNodeMap.set(transformNode, id); | 402 auto result = m_transformNodeMap.set(transformNode, id); |
| 400 DCHECK(result.isNewEntry); | 403 DCHECK(result.isNewEntry); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 412 return it->value; | 415 return it->value; |
| 413 | 416 |
| 414 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); | 417 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); |
| 415 int parentId = compositorIdForClipNode(clipNode->parent()); | 418 int parentId = compositorIdForClipNode(clipNode->parent()); |
| 416 int id = clipTree().Insert(cc::ClipNode(), parentId); | 419 int id = clipTree().Insert(cc::ClipNode(), parentId); |
| 417 | 420 |
| 418 cc::ClipNode& compositorNode = *clipTree().Node(id); | 421 cc::ClipNode& compositorNode = *clipTree().Node(id); |
| 419 compositorNode.owner_id = dummyLayer->id(); | 422 compositorNode.owner_id = dummyLayer->id(); |
| 420 | 423 |
| 421 // TODO(jbroman): Don't discard rounded corners. | 424 // TODO(jbroman): Don't discard rounded corners. |
| 422 compositorNode.data.clip = clipNode->clipRect().rect(); | 425 compositorNode.clip = clipNode->clipRect().rect(); |
| 423 compositorNode.data.transform_id = compositorIdForTransformNode(clipNode->lo
calTransformSpace()); | 426 compositorNode.transform_id = compositorIdForTransformNode(clipNode->localTr
ansformSpace()); |
| 424 compositorNode.data.target_id = kRealRootNodeId; | 427 compositorNode.target_id = kRealRootNodeId; |
| 425 compositorNode.data.applies_local_clip = true; | 428 compositorNode.applies_local_clip = true; |
| 426 compositorNode.data.layers_are_clipped = true; | 429 compositorNode.layers_are_clipped = true; |
| 427 compositorNode.data.layers_are_clipped_when_surfaces_disabled = true; | 430 compositorNode.layers_are_clipped_when_surfaces_disabled = true; |
| 428 | 431 |
| 429 m_rootLayer->AddChild(dummyLayer); | 432 m_rootLayer->AddChild(dummyLayer); |
| 430 dummyLayer->SetTransformTreeIndex(compositorNode.data.transform_id); | 433 dummyLayer->SetTransformTreeIndex(compositorNode.transform_id); |
| 431 dummyLayer->SetClipTreeIndex(id); | 434 dummyLayer->SetClipTreeIndex(id); |
| 432 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); | 435 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); |
| 433 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 436 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 434 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 437 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 435 | 438 |
| 436 auto result = m_clipNodeMap.set(clipNode, id); | 439 auto result = m_clipNodeMap.set(clipNode, id); |
| 437 DCHECK(result.isNewEntry); | 440 DCHECK(result.isNewEntry); |
| 438 clipTree().set_needs_update(true); | 441 clipTree().set_needs_update(true); |
| 439 return id; | 442 return id; |
| 440 } | 443 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 if (m_extraDataForTestingEnabled) | 478 if (m_extraDataForTestingEnabled) |
| 476 m_extraDataForTesting->contentLayers.append(layer); | 479 m_extraDataForTesting->contentLayers.append(layer); |
| 477 } | 480 } |
| 478 | 481 |
| 479 // Mark the property trees as having been rebuilt. | 482 // Mark the property trees as having been rebuilt. |
| 480 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber; | 483 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber; |
| 481 host->property_trees()->needs_rebuild = false; | 484 host->property_trees()->needs_rebuild = false; |
| 482 } | 485 } |
| 483 | 486 |
| 484 } // namespace blink | 487 } // namespace blink |
| OLD | NEW |