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 |