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/TransformPaintPropertyNode.h" | 25 #include "platform/graphics/paint/TransformPaintPropertyNode.h" |
23 #include "public/platform/Platform.h" | 26 #include "public/platform/Platform.h" |
24 #include "public/platform/WebCompositorSupport.h" | 27 #include "public/platform/WebCompositorSupport.h" |
25 #include "public/platform/WebLayer.h" | 28 #include "public/platform/WebLayer.h" |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 constexpr int kPropertyTreeSequenceNumber = 1; | 267 constexpr int kPropertyTreeSequenceNumber = 1; |
265 | 268 |
266 // Creates a minimal set of property trees for the compositor. | 269 // Creates a minimal set of property trees for the compositor. |
267 void setMinimalPropertyTrees(cc::PropertyTrees* propertyTrees, int ownerId) | 270 void setMinimalPropertyTrees(cc::PropertyTrees* propertyTrees, int ownerId) |
268 { | 271 { |
269 // cc is hardcoded to use transform node index 1 for device scale and transf
orm. | 272 // cc is hardcoded to use transform node index 1 for device scale and transf
orm. |
270 cc::TransformTree& transformTree = propertyTrees->transform_tree; | 273 cc::TransformTree& transformTree = propertyTrees->transform_tree; |
271 transformTree.clear(); | 274 transformTree.clear(); |
272 cc::TransformNode& transformNode = *transformTree.Node(transformTree.Insert(
cc::TransformNode(), kRealRootNodeId)); | 275 cc::TransformNode& transformNode = *transformTree.Node(transformTree.Insert(
cc::TransformNode(), kRealRootNodeId)); |
273 DCHECK_EQ(transformNode.id, kSecondaryRootNodeId); | 276 DCHECK_EQ(transformNode.id, kSecondaryRootNodeId); |
274 transformNode.data.source_node_id = transformNode.parent_id; | 277 transformNode.source_node_id = transformNode.parent_id; |
275 transformTree.SetTargetId(transformNode.id, kRealRootNodeId); | 278 transformTree.SetTargetId(transformNode.id, kRealRootNodeId); |
276 transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId); | 279 transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId); |
277 | 280 |
278 // cc is hardcoded to use clip node index 1 for viewport clip. | 281 // cc is hardcoded to use clip node index 1 for viewport clip. |
279 cc::ClipTree& clipTree = propertyTrees->clip_tree; | 282 cc::ClipTree& clipTree = propertyTrees->clip_tree; |
280 clipTree.clear(); | 283 clipTree.clear(); |
281 cc::ClipNode& clipNode = *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRea
lRootNodeId)); | 284 cc::ClipNode& clipNode = *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRea
lRootNodeId)); |
282 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); | 285 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); |
283 clipNode.owner_id = ownerId; | 286 clipNode.owner_id = ownerId; |
284 | 287 |
285 // cc is hardcoded to use effect node index 1 for root render surface. | 288 // cc is hardcoded to use effect node index 1 for root render surface. |
286 cc::EffectTree& effectTree = propertyTrees->effect_tree; | 289 cc::EffectTree& effectTree = propertyTrees->effect_tree; |
287 effectTree.clear(); | 290 effectTree.clear(); |
288 cc::EffectNode& effectNode = *effectTree.Node(effectTree.Insert(cc::EffectNo
de(), kRealRootNodeId)); | 291 cc::EffectNode& effectNode = *effectTree.Node(effectTree.Insert(cc::EffectNo
de(), kRealRootNodeId)); |
289 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); | 292 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); |
290 effectNode.owner_id = ownerId; | 293 effectNode.owner_id = ownerId; |
291 effectNode.data.clip_id = clipNode.id; | 294 effectNode.clip_id = clipNode.id; |
292 effectNode.data.has_render_surface = true; | 295 effectNode.has_render_surface = true; |
293 | 296 |
294 cc::ScrollTree& scrollTree = propertyTrees->scroll_tree; | 297 cc::ScrollTree& scrollTree = propertyTrees->scroll_tree; |
295 scrollTree.clear(); | 298 scrollTree.clear(); |
296 } | 299 } |
297 | 300 |
298 } // namespace | 301 } // namespace |
299 | 302 |
300 void PaintArtifactCompositor::update(const PaintArtifact& paintArtifact) | 303 void PaintArtifactCompositor::update(const PaintArtifact& paintArtifact) |
301 { | 304 { |
302 DCHECK(m_rootLayer); | 305 DCHECK(m_rootLayer); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 if (it != m_nodeMap.end()) | 405 if (it != m_nodeMap.end()) |
403 return it->value; | 406 return it->value; |
404 | 407 |
405 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); | 408 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); |
406 int parentId = compositorIdForNode(transformNode->parent()); | 409 int parentId = compositorIdForNode(transformNode->parent()); |
407 int id = m_transformTree.Insert(cc::TransformNode(), parentId); | 410 int id = m_transformTree.Insert(cc::TransformNode(), parentId); |
408 | 411 |
409 cc::TransformNode& compositorNode = *m_transformTree.Node(id); | 412 cc::TransformNode& compositorNode = *m_transformTree.Node(id); |
410 m_transformTree.SetTargetId(id, kRealRootNodeId); | 413 m_transformTree.SetTargetId(id, kRealRootNodeId); |
411 m_transformTree.SetContentTargetId(id, kRealRootNodeId); | 414 m_transformTree.SetContentTargetId(id, kRealRootNodeId); |
412 compositorNode.data.source_node_id = parentId; | 415 compositorNode.source_node_id = parentId; |
413 | 416 |
414 FloatPoint3D origin = transformNode->origin(); | 417 FloatPoint3D origin = transformNode->origin(); |
415 compositorNode.data.pre_local.matrix().setTranslate( | 418 compositorNode.pre_local.matrix().setTranslate( |
416 -origin.x(), -origin.y(), -origin.z()); | 419 -origin.x(), -origin.y(), -origin.z()); |
417 compositorNode.data.local.matrix() = TransformationMatrix::toSkMatrix44(tran
sformNode->matrix()); | 420 compositorNode.local.matrix() = TransformationMatrix::toSkMatrix44(transform
Node->matrix()); |
418 compositorNode.data.post_local.matrix().setTranslate( | 421 compositorNode.post_local.matrix().setTranslate( |
419 origin.x(), origin.y(), origin.z()); | 422 origin.x(), origin.y(), origin.z()); |
420 compositorNode.data.needs_local_transform_update = true; | 423 compositorNode.needs_local_transform_update = true; |
421 | 424 |
422 m_rootLayer->AddChild(dummyLayer); | 425 m_rootLayer->AddChild(dummyLayer); |
423 dummyLayer->SetTransformTreeIndex(id); | 426 dummyLayer->SetTransformTreeIndex(id); |
424 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); | 427 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); |
425 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); | 428 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); |
426 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 429 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
427 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 430 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
428 | 431 |
429 auto result = m_nodeMap.set(transformNode, id); | 432 auto result = m_nodeMap.set(transformNode, id); |
430 DCHECK(result.isNewEntry); | 433 DCHECK(result.isNewEntry); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 if (m_extraDataForTestingEnabled) | 469 if (m_extraDataForTestingEnabled) |
467 m_extraDataForTesting->contentLayers.append(layer); | 470 m_extraDataForTesting->contentLayers.append(layer); |
468 } | 471 } |
469 | 472 |
470 // Mark the property trees as having been rebuilt. | 473 // Mark the property trees as having been rebuilt. |
471 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber; | 474 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber; |
472 host->property_trees()->needs_rebuild = false; | 475 host->property_trees()->needs_rebuild = false; |
473 } | 476 } |
474 | 477 |
475 } // namespace blink | 478 } // namespace blink |
OLD | NEW |