| 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/compositing_display_item.h" | 10 #include "cc/playback/compositing_display_item.h" |
| (...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 transformTree.set_needs_update(true); | 709 transformTree.set_needs_update(true); |
| 710 | 710 |
| 711 m_transformNodeMap.set(TransformPaintPropertyNode::root(), transformNode.id); | 711 m_transformNodeMap.set(TransformPaintPropertyNode::root(), transformNode.id); |
| 712 m_rootLayer->SetTransformTreeIndex(transformNode.id); | 712 m_rootLayer->SetTransformTreeIndex(transformNode.id); |
| 713 } | 713 } |
| 714 | 714 |
| 715 void PropertyTreeManager::setupRootClipNode() { | 715 void PropertyTreeManager::setupRootClipNode() { |
| 716 // cc is hardcoded to use clip node index 1 for viewport clip. | 716 // cc is hardcoded to use clip node index 1 for viewport clip. |
| 717 cc::ClipTree& clipTree = m_propertyTrees.clip_tree; | 717 cc::ClipTree& clipTree = m_propertyTrees.clip_tree; |
| 718 clipTree.clear(); | 718 clipTree.clear(); |
| 719 m_propertyTrees.clip_id_to_index_map.clear(); | 719 m_propertyTrees.layer_id_to_clip_node_index.clear(); |
| 720 cc::ClipNode& clipNode = | 720 cc::ClipNode& clipNode = |
| 721 *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRealRootNodeId)); | 721 *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRealRootNodeId)); |
| 722 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); | 722 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); |
| 723 | 723 |
| 724 clipNode.resets_clip = true; | 724 clipNode.resets_clip = true; |
| 725 clipNode.owning_layer_id = m_rootLayer->id(); | 725 clipNode.owning_layer_id = m_rootLayer->id(); |
| 726 clipNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; | 726 clipNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; |
| 727 clipNode.clip = gfx::RectF( | 727 clipNode.clip = gfx::RectF( |
| 728 gfx::SizeF(m_rootLayer->GetLayerTree()->device_viewport_size())); | 728 gfx::SizeF(m_rootLayer->GetLayerTree()->device_viewport_size())); |
| 729 clipNode.transform_id = kRealRootNodeId; | 729 clipNode.transform_id = kRealRootNodeId; |
| 730 clipNode.target_transform_id = kRealRootNodeId; | 730 clipNode.target_transform_id = kRealRootNodeId; |
| 731 clipNode.target_effect_id = kSecondaryRootNodeId; | 731 clipNode.target_effect_id = kSecondaryRootNodeId; |
| 732 m_propertyTrees.clip_id_to_index_map[clipNode.owning_layer_id] = clipNode.id; | 732 m_propertyTrees.layer_id_to_clip_node_index[clipNode.owning_layer_id] = |
| 733 clipNode.id; |
| 733 | 734 |
| 734 m_clipNodeMap.set(ClipPaintPropertyNode::root(), clipNode.id); | 735 m_clipNodeMap.set(ClipPaintPropertyNode::root(), clipNode.id); |
| 735 m_rootLayer->SetClipTreeIndex(clipNode.id); | 736 m_rootLayer->SetClipTreeIndex(clipNode.id); |
| 736 } | 737 } |
| 737 | 738 |
| 738 void PropertyTreeManager::setupRootEffectNode() { | 739 void PropertyTreeManager::setupRootEffectNode() { |
| 739 // cc is hardcoded to use effect node index 1 for root render surface. | 740 // cc is hardcoded to use effect node index 1 for root render surface. |
| 740 cc::EffectTree& effectTree = m_propertyTrees.effect_tree; | 741 cc::EffectTree& effectTree = m_propertyTrees.effect_tree; |
| 741 effectTree.clear(); | 742 effectTree.clear(); |
| 742 m_propertyTrees.effect_id_to_index_map.clear(); | 743 m_propertyTrees.layer_id_to_effect_node_index.clear(); |
| 743 cc::EffectNode& effectNode = | 744 cc::EffectNode& effectNode = |
| 744 *effectTree.Node(effectTree.Insert(cc::EffectNode(), kInvalidNodeId)); | 745 *effectTree.Node(effectTree.Insert(cc::EffectNode(), kInvalidNodeId)); |
| 745 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); | 746 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); |
| 746 effectNode.owning_layer_id = m_rootLayer->id(); | 747 effectNode.owning_layer_id = m_rootLayer->id(); |
| 747 effectNode.transform_id = kRealRootNodeId; | 748 effectNode.transform_id = kRealRootNodeId; |
| 748 effectNode.clip_id = kSecondaryRootNodeId; | 749 effectNode.clip_id = kSecondaryRootNodeId; |
| 749 effectNode.has_render_surface = true; | 750 effectNode.has_render_surface = true; |
| 750 m_propertyTrees.effect_id_to_index_map[effectNode.owning_layer_id] = | 751 m_propertyTrees.layer_id_to_effect_node_index[effectNode.owning_layer_id] = |
| 751 effectNode.id; | 752 effectNode.id; |
| 752 | 753 |
| 753 m_effectStack.push_back( | 754 m_effectStack.push_back( |
| 754 BlinkEffectAndCcIdPair{EffectPaintPropertyNode::root(), effectNode.id}); | 755 BlinkEffectAndCcIdPair{EffectPaintPropertyNode::root(), effectNode.id}); |
| 755 m_rootLayer->SetEffectTreeIndex(effectNode.id); | 756 m_rootLayer->SetEffectTreeIndex(effectNode.id); |
| 756 } | 757 } |
| 757 | 758 |
| 758 void PropertyTreeManager::setupRootScrollNode() { | 759 void PropertyTreeManager::setupRootScrollNode() { |
| 759 cc::ScrollTree& scrollTree = m_propertyTrees.scroll_tree; | 760 cc::ScrollTree& scrollTree = m_propertyTrees.scroll_tree; |
| 760 scrollTree.clear(); | 761 scrollTree.clear(); |
| 761 m_propertyTrees.scroll_id_to_index_map.clear(); | 762 m_propertyTrees.layer_id_to_scroll_node_index.clear(); |
| 762 cc::ScrollNode& scrollNode = | 763 cc::ScrollNode& scrollNode = |
| 763 *scrollTree.Node(scrollTree.Insert(cc::ScrollNode(), kRealRootNodeId)); | 764 *scrollTree.Node(scrollTree.Insert(cc::ScrollNode(), kRealRootNodeId)); |
| 764 DCHECK_EQ(scrollNode.id, kSecondaryRootNodeId); | 765 DCHECK_EQ(scrollNode.id, kSecondaryRootNodeId); |
| 765 scrollNode.owning_layer_id = m_rootLayer->id(); | 766 scrollNode.owning_layer_id = m_rootLayer->id(); |
| 766 scrollNode.transform_id = kSecondaryRootNodeId; | 767 scrollNode.transform_id = kSecondaryRootNodeId; |
| 767 m_propertyTrees.scroll_id_to_index_map[scrollNode.owning_layer_id] = | 768 m_propertyTrees.layer_id_to_scroll_node_index[scrollNode.owning_layer_id] = |
| 768 scrollNode.id; | 769 scrollNode.id; |
| 769 | 770 |
| 770 m_scrollNodeMap.set(ScrollPaintPropertyNode::root(), scrollNode.id); | 771 m_scrollNodeMap.set(ScrollPaintPropertyNode::root(), scrollNode.id); |
| 771 m_rootLayer->SetScrollTreeIndex(scrollNode.id); | 772 m_rootLayer->SetScrollTreeIndex(scrollNode.id); |
| 772 } | 773 } |
| 773 | 774 |
| 774 int PropertyTreeManager::compositorIdForTransformNode( | 775 int PropertyTreeManager::compositorIdForTransformNode( |
| 775 const TransformPaintPropertyNode* transformNode) { | 776 const TransformPaintPropertyNode* transformNode) { |
| 776 DCHECK(transformNode); | 777 DCHECK(transformNode); |
| 777 // TODO(crbug.com/645615): Remove the failsafe here. | 778 // TODO(crbug.com/645615): Remove the failsafe here. |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 auto it = m_clipNodeMap.find(clipNode); | 827 auto it = m_clipNodeMap.find(clipNode); |
| 827 if (it != m_clipNodeMap.end()) | 828 if (it != m_clipNodeMap.end()) |
| 828 return it->value; | 829 return it->value; |
| 829 | 830 |
| 830 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); | 831 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); |
| 831 int parentId = compositorIdForClipNode(clipNode->parent()); | 832 int parentId = compositorIdForClipNode(clipNode->parent()); |
| 832 int id = clipTree().Insert(cc::ClipNode(), parentId); | 833 int id = clipTree().Insert(cc::ClipNode(), parentId); |
| 833 | 834 |
| 834 cc::ClipNode& compositorNode = *clipTree().Node(id); | 835 cc::ClipNode& compositorNode = *clipTree().Node(id); |
| 835 compositorNode.owning_layer_id = dummyLayer->id(); | 836 compositorNode.owning_layer_id = dummyLayer->id(); |
| 836 m_propertyTrees.clip_id_to_index_map[compositorNode.owning_layer_id] = id; | 837 m_propertyTrees.layer_id_to_clip_node_index[compositorNode.owning_layer_id] = |
| 838 id; |
| 837 | 839 |
| 838 // TODO(jbroman): Don't discard rounded corners. | 840 // TODO(jbroman): Don't discard rounded corners. |
| 839 compositorNode.clip = clipNode->clipRect().rect(); | 841 compositorNode.clip = clipNode->clipRect().rect(); |
| 840 compositorNode.transform_id = | 842 compositorNode.transform_id = |
| 841 compositorIdForTransformNode(clipNode->localTransformSpace()); | 843 compositorIdForTransformNode(clipNode->localTransformSpace()); |
| 842 compositorNode.target_transform_id = kRealRootNodeId; | 844 compositorNode.target_transform_id = kRealRootNodeId; |
| 843 compositorNode.target_effect_id = kSecondaryRootNodeId; | 845 compositorNode.target_effect_id = kSecondaryRootNodeId; |
| 844 compositorNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; | 846 compositorNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; |
| 845 compositorNode.layers_are_clipped = true; | 847 compositorNode.layers_are_clipped = true; |
| 846 compositorNode.layers_are_clipped_when_surfaces_disabled = true; | 848 compositorNode.layers_are_clipped_when_surfaces_disabled = true; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 867 | 869 |
| 868 auto it = m_scrollNodeMap.find(scrollNode); | 870 auto it = m_scrollNodeMap.find(scrollNode); |
| 869 if (it != m_scrollNodeMap.end()) | 871 if (it != m_scrollNodeMap.end()) |
| 870 return it->value; | 872 return it->value; |
| 871 | 873 |
| 872 int parentId = compositorIdForScrollNode(scrollNode->parent()); | 874 int parentId = compositorIdForScrollNode(scrollNode->parent()); |
| 873 int id = scrollTree().Insert(cc::ScrollNode(), parentId); | 875 int id = scrollTree().Insert(cc::ScrollNode(), parentId); |
| 874 | 876 |
| 875 cc::ScrollNode& compositorNode = *scrollTree().Node(id); | 877 cc::ScrollNode& compositorNode = *scrollTree().Node(id); |
| 876 compositorNode.owning_layer_id = parentId; | 878 compositorNode.owning_layer_id = parentId; |
| 877 m_propertyTrees.scroll_id_to_index_map[compositorNode.owning_layer_id] = id; | 879 m_propertyTrees |
| 880 .layer_id_to_scroll_node_index[compositorNode.owning_layer_id] = id; |
| 878 | 881 |
| 879 compositorNode.scrollable = true; | 882 compositorNode.scrollable = true; |
| 880 | 883 |
| 881 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(), | 884 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(), |
| 882 scrollNode->clip().height()); | 885 scrollNode->clip().height()); |
| 883 compositorNode.bounds.SetSize(scrollNode->bounds().width(), | 886 compositorNode.bounds.SetSize(scrollNode->bounds().width(), |
| 884 scrollNode->bounds().height()); | 887 scrollNode->bounds().height()); |
| 885 compositorNode.user_scrollable_horizontal = | 888 compositorNode.user_scrollable_horizontal = |
| 886 scrollNode->userScrollableHorizontal(); | 889 scrollNode->userScrollableHorizontal(); |
| 887 compositorNode.user_scrollable_vertical = | 890 compositorNode.user_scrollable_vertical = |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1021 // or a child with exotic blend mode is detected. | 1024 // or a child with exotic blend mode is detected. |
| 1022 // TODO(crbug.com/504464): There is ongoing work in cc to delay render surface | 1025 // TODO(crbug.com/504464): There is ongoing work in cc to delay render surface |
| 1023 // decision until later phase of the pipeline. Remove premature optimization | 1026 // decision until later phase of the pipeline. Remove premature optimization |
| 1024 // here once the work is ready. | 1027 // here once the work is ready. |
| 1025 if (!nextEffect->filter().isEmpty() || | 1028 if (!nextEffect->filter().isEmpty() || |
| 1026 nextEffect->blendMode() != SkBlendMode::kSrcOver) | 1029 nextEffect->blendMode() != SkBlendMode::kSrcOver) |
| 1027 effectNode.has_render_surface = true; | 1030 effectNode.has_render_surface = true; |
| 1028 effectNode.opacity = nextEffect->opacity(); | 1031 effectNode.opacity = nextEffect->opacity(); |
| 1029 effectNode.filters = nextEffect->filter().asCcFilterOperations(); | 1032 effectNode.filters = nextEffect->filter().asCcFilterOperations(); |
| 1030 effectNode.blend_mode = nextEffect->blendMode(); | 1033 effectNode.blend_mode = nextEffect->blendMode(); |
| 1031 m_propertyTrees.effect_id_to_index_map[effectNode.owning_layer_id] = | 1034 m_propertyTrees.layer_id_to_effect_node_index[effectNode.owning_layer_id] = |
| 1032 effectNode.id; | 1035 effectNode.id; |
| 1033 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); | 1036 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); |
| 1034 | 1037 |
| 1035 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 1038 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 1036 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); | 1039 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); |
| 1037 dummyLayer->SetClipTreeIndex(outputClipId); | 1040 dummyLayer->SetClipTreeIndex(outputClipId); |
| 1038 dummyLayer->SetEffectTreeIndex(effectNode.id); | 1041 dummyLayer->SetEffectTreeIndex(effectNode.id); |
| 1039 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 1042 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 1040 } | 1043 } |
| 1041 | 1044 |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1228 #ifndef NDEBUG | 1231 #ifndef NDEBUG |
| 1229 void PaintArtifactCompositor::showDebugData() { | 1232 void PaintArtifactCompositor::showDebugData() { |
| 1230 LOG(ERROR) << layersAsJSON(LayerTreeIncludesDebugInfo) | 1233 LOG(ERROR) << layersAsJSON(LayerTreeIncludesDebugInfo) |
| 1231 ->toPrettyJSONString() | 1234 ->toPrettyJSONString() |
| 1232 .utf8() | 1235 .utf8() |
| 1233 .data(); | 1236 .data(); |
| 1234 } | 1237 } |
| 1235 #endif | 1238 #endif |
| 1236 | 1239 |
| 1237 } // namespace blink | 1240 } // namespace blink |
| OLD | NEW |