| 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" |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 layer->SetBounds(combinedBounds.size()); | 330 layer->SetBounds(combinedBounds.size()); |
| 331 layer->SetIsDrawable(true); | 331 layer->SetIsDrawable(true); |
| 332 if (paintChunk.knownToBeOpaque) | 332 if (paintChunk.knownToBeOpaque) |
| 333 layer->SetContentsOpaque(true); | 333 layer->SetContentsOpaque(true); |
| 334 m_contentLayerClients.append(std::move(contentLayerClient)); | 334 m_contentLayerClients.append(std::move(contentLayerClient)); |
| 335 return layer; | 335 return layer; |
| 336 } | 336 } |
| 337 | 337 |
| 338 namespace { | 338 namespace { |
| 339 | 339 |
| 340 class TransformTreeManager { | 340 class PropertyTreeManager { |
| 341 WTF_MAKE_NONCOPYABLE(TransformTreeManager); | 341 WTF_MAKE_NONCOPYABLE(PropertyTreeManager); |
| 342 public: | 342 public: |
| 343 TransformTreeManager(cc::TransformTree& transformTree, cc::Layer* rootLayer) | 343 PropertyTreeManager(cc::PropertyTrees& propertyTrees, cc::Layer* rootLayer) |
| 344 : m_transformTree(transformTree) | 344 : m_propertyTrees(propertyTrees) |
| 345 , m_rootLayer(rootLayer) {} | 345 , m_rootLayer(rootLayer) {} |
| 346 | 346 |
| 347 int compositorIdForNode(const TransformPaintPropertyNode*); | 347 int compositorIdForTransformNode(const TransformPaintPropertyNode*); |
| 348 | 348 |
| 349 private: | 349 private: |
| 350 // Transform tree which should be updated by the manager. | 350 cc::TransformTree& transformTree() { return m_propertyTrees.transform_tree;
} |
| 351 cc::TransformTree& m_transformTree; | 351 |
| 352 // Property trees which should be updated by the manager. |
| 353 cc::PropertyTrees& m_propertyTrees; |
| 352 | 354 |
| 353 // Layer to which transform "owner" layers should be added. These will not | 355 // Layer to which transform "owner" layers should be added. These will not |
| 354 // have any actual children, but at present must exist in the tree. | 356 // have any actual children, but at present must exist in the tree. |
| 355 cc::Layer* m_rootLayer; | 357 cc::Layer* m_rootLayer; |
| 356 | 358 |
| 357 // Map from Blink-side transform nodes to cc transform node indices. | 359 // Map from Blink-side transform nodes to cc transform node indices. |
| 358 HashMap<const TransformPaintPropertyNode*, int> m_nodeMap; | 360 HashMap<const TransformPaintPropertyNode*, int> m_transformNodeMap; |
| 359 }; | 361 }; |
| 360 | 362 |
| 361 int TransformTreeManager::compositorIdForNode(const TransformPaintPropertyNode*
transformNode) | 363 int PropertyTreeManager::compositorIdForTransformNode(const TransformPaintProper
tyNode* transformNode) |
| 362 { | 364 { |
| 363 if (!transformNode) | 365 if (!transformNode) |
| 364 return kSecondaryRootNodeId; | 366 return kSecondaryRootNodeId; |
| 365 | 367 |
| 366 auto it = m_nodeMap.find(transformNode); | 368 auto it = m_transformNodeMap.find(transformNode); |
| 367 if (it != m_nodeMap.end()) | 369 if (it != m_transformNodeMap.end()) |
| 368 return it->value; | 370 return it->value; |
| 369 | 371 |
| 370 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); | 372 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); |
| 371 int parentId = compositorIdForNode(transformNode->parent()); | 373 int parentId = compositorIdForTransformNode(transformNode->parent()); |
| 372 int id = m_transformTree.Insert(cc::TransformNode(), parentId); | 374 int id = transformTree().Insert(cc::TransformNode(), parentId); |
| 373 | 375 |
| 374 cc::TransformNode& compositorNode = *m_transformTree.Node(id); | 376 cc::TransformNode& compositorNode = *transformTree().Node(id); |
| 375 m_transformTree.SetTargetId(id, kRealRootNodeId); | 377 transformTree().SetTargetId(id, kRealRootNodeId); |
| 376 m_transformTree.SetContentTargetId(id, kRealRootNodeId); | 378 transformTree().SetContentTargetId(id, kRealRootNodeId); |
| 377 compositorNode.data.source_node_id = parentId; | 379 compositorNode.data.source_node_id = parentId; |
| 378 | 380 |
| 379 FloatPoint3D origin = transformNode->origin(); | 381 FloatPoint3D origin = transformNode->origin(); |
| 380 compositorNode.data.pre_local.matrix().setTranslate( | 382 compositorNode.data.pre_local.matrix().setTranslate( |
| 381 -origin.x(), -origin.y(), -origin.z()); | 383 -origin.x(), -origin.y(), -origin.z()); |
| 382 compositorNode.data.local.matrix() = TransformationMatrix::toSkMatrix44(tran
sformNode->matrix()); | 384 compositorNode.data.local.matrix() = TransformationMatrix::toSkMatrix44(tran
sformNode->matrix()); |
| 383 compositorNode.data.post_local.matrix().setTranslate( | 385 compositorNode.data.post_local.matrix().setTranslate( |
| 384 origin.x(), origin.y(), origin.z()); | 386 origin.x(), origin.y(), origin.z()); |
| 385 compositorNode.data.needs_local_transform_update = true; | 387 compositorNode.data.needs_local_transform_update = true; |
| 386 | 388 |
| 387 m_rootLayer->AddChild(dummyLayer); | 389 m_rootLayer->AddChild(dummyLayer); |
| 388 dummyLayer->SetTransformTreeIndex(id); | 390 dummyLayer->SetTransformTreeIndex(id); |
| 389 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); | 391 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); |
| 390 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); | 392 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); |
| 391 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 393 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 392 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 394 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 393 | 395 |
| 394 auto result = m_nodeMap.set(transformNode, id); | 396 auto result = m_transformNodeMap.set(transformNode, id); |
| 395 DCHECK(result.isNewEntry); | 397 DCHECK(result.isNewEntry); |
| 396 m_transformTree.set_needs_update(true); | 398 transformTree().set_needs_update(true); |
| 397 return id; | 399 return id; |
| 398 } | 400 } |
| 399 | 401 |
| 400 } // namespace | 402 } // namespace |
| 401 | 403 |
| 402 void PaintArtifactCompositor::updateInLayerListMode(const PaintArtifact& paintAr
tifact) | 404 void PaintArtifactCompositor::updateInLayerListMode(const PaintArtifact& paintAr
tifact) |
| 403 { | 405 { |
| 404 cc::LayerTreeHost* host = m_rootLayer->layer_tree_host(); | 406 cc::LayerTreeHost* host = m_rootLayer->layer_tree_host(); |
| 405 | 407 |
| 406 setMinimalPropertyTrees(host->property_trees(), m_rootLayer->id()); | 408 setMinimalPropertyTrees(host->property_trees(), m_rootLayer->id()); |
| 407 m_rootLayer->RemoveAllChildren(); | 409 m_rootLayer->RemoveAllChildren(); |
| 408 m_rootLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 410 m_rootLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 409 m_rootLayer->SetTransformTreeIndex(kSecondaryRootNodeId); | 411 m_rootLayer->SetTransformTreeIndex(kSecondaryRootNodeId); |
| 410 m_rootLayer->SetClipTreeIndex(kSecondaryRootNodeId); | 412 m_rootLayer->SetClipTreeIndex(kSecondaryRootNodeId); |
| 411 m_rootLayer->SetEffectTreeIndex(kSecondaryRootNodeId); | 413 m_rootLayer->SetEffectTreeIndex(kSecondaryRootNodeId); |
| 412 m_rootLayer->SetScrollTreeIndex(kRealRootNodeId); | 414 m_rootLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 413 | 415 |
| 414 TransformTreeManager transformTreeManager(host->property_trees()->transform_
tree, m_rootLayer.get()); | 416 PropertyTreeManager propertyTreeManager(*host->property_trees(), m_rootLayer
.get()); |
| 415 m_contentLayerClients.clear(); | 417 m_contentLayerClients.clear(); |
| 416 m_contentLayerClients.reserveCapacity(paintArtifact.paintChunks().size()); | 418 m_contentLayerClients.reserveCapacity(paintArtifact.paintChunks().size()); |
| 417 for (const PaintChunk& paintChunk : paintArtifact.paintChunks()) { | 419 for (const PaintChunk& paintChunk : paintArtifact.paintChunks()) { |
| 418 gfx::Vector2dF layerOffset; | 420 gfx::Vector2dF layerOffset; |
| 419 scoped_refptr<cc::Layer> layer = layerForPaintChunk(paintArtifact, paint
Chunk, layerOffset); | 421 scoped_refptr<cc::Layer> layer = layerForPaintChunk(paintArtifact, paint
Chunk, layerOffset); |
| 420 | 422 |
| 421 int transformId = transformTreeManager.compositorIdForNode(paintChunk.pr
operties.transform.get()); | 423 int transformId = propertyTreeManager.compositorIdForTransformNode(paint
Chunk.properties.transform.get()); |
| 422 layer->set_offset_to_transform_parent(layerOffset); | 424 layer->set_offset_to_transform_parent(layerOffset); |
| 423 | 425 |
| 424 m_rootLayer->AddChild(layer); | 426 m_rootLayer->AddChild(layer); |
| 425 layer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 427 layer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 426 layer->SetTransformTreeIndex(transformId); | 428 layer->SetTransformTreeIndex(transformId); |
| 427 layer->SetClipTreeIndex(kSecondaryRootNodeId); | 429 layer->SetClipTreeIndex(kSecondaryRootNodeId); |
| 428 layer->SetEffectTreeIndex(kSecondaryRootNodeId); | 430 layer->SetEffectTreeIndex(kSecondaryRootNodeId); |
| 429 layer->SetScrollTreeIndex(kRealRootNodeId); | 431 layer->SetScrollTreeIndex(kRealRootNodeId); |
| 430 | 432 |
| 431 if (m_extraDataForTestingEnabled) | 433 if (m_extraDataForTestingEnabled) |
| 432 m_extraDataForTesting->contentLayers.append(layer); | 434 m_extraDataForTesting->contentLayers.append(layer); |
| 433 } | 435 } |
| 434 | 436 |
| 435 // Mark the property trees as having been rebuilt. | 437 // Mark the property trees as having been rebuilt. |
| 436 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber; | 438 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber; |
| 437 host->property_trees()->needs_rebuild = false; | 439 host->property_trees()->needs_rebuild = false; |
| 438 } | 440 } |
| 439 | 441 |
| 440 } // namespace blink | 442 } // namespace blink |
| OLD | NEW |