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 |