OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/layer_tree_host_common.h" | 5 #include "cc/trees/layer_tree_host_common.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <set> | 10 #include <set> |
(...skipping 9930 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9941 scroll_and_scale_set.ToProtobuf(&proto); | 9941 scroll_and_scale_set.ToProtobuf(&proto); |
9942 ScrollAndScaleSet new_scroll_and_scale_set; | 9942 ScrollAndScaleSet new_scroll_and_scale_set; |
9943 new_scroll_and_scale_set.FromProtobuf(proto); | 9943 new_scroll_and_scale_set.FromProtobuf(proto); |
9944 | 9944 |
9945 EXPECT_TRUE(scroll_and_scale_set.EqualsForTesting(new_scroll_and_scale_set)); | 9945 EXPECT_TRUE(scroll_and_scale_set.EqualsForTesting(new_scroll_and_scale_set)); |
9946 } | 9946 } |
9947 | 9947 |
9948 TEST_F(LayerTreeHostCommonTest, ScrollTreeBuilderTest) { | 9948 TEST_F(LayerTreeHostCommonTest, ScrollTreeBuilderTest) { |
9949 // Test the behavior of scroll tree builder | 9949 // Test the behavior of scroll tree builder |
9950 // Topology: | 9950 // Topology: |
9951 // +root1(1) | 9951 // +root1(1)[inner_viewport_container_layer] |
9952 // +--parent2(2)[kHasBackgroundAttachmentFixedObjects|kScrollbarScrolling & | 9952 // +-page_scale_layer |
9953 // scrollable] | 9953 // +----parent2(2)[kHasBackgroundAttachmentFixedObjects|kScrollbarScrolling & |
9954 // +----child6(6)[kScrollbarScrolling] | 9954 // scrollable, inner_viewport_scroll_layer] |
9955 // +------grand_child10(10)[kScrollbarScrolling] | 9955 // +------child6(6)[kScrollbarScrolling] |
9956 // +--parent3(3) | 9956 // +--------grand_child10(10)[kScrollbarScrolling] |
9957 // +----child7(7)[scrollable] | 9957 // +----parent3(3) |
9958 // +----child8(8)[scroll_parent=7] | 9958 // +------child7(7)[scrollable] |
9959 // +------grand_child11(11)[scrollable] | 9959 // +------child8(8)[scroll_parent=7] |
9960 // +--parent4(4) | 9960 // +--------grand_child11(11)[scrollable] |
9961 // +----child9(9) | 9961 // +----parent4(4) |
9962 // +------grand_child12(12) | 9962 // +------child9(9) |
9963 // +--parent5(5)[contains_non_fast_scrollable_region] | 9963 // +--------grand_child12(12) |
| 9964 // +----parent5(5)[contains_non_fast_scrollable_region] |
9964 // | 9965 // |
9965 // Expected scroll tree topology: | 9966 // Expected scroll tree topology: |
9966 // +property_tree_root---owner:-1 | 9967 // +property_tree_root---owner:-1 |
9967 // +--root---owner:1, id:1 | 9968 // +--root---owner:1, id:1 |
9968 // +----node---owner:2, id:2 | 9969 // +----node---owner:2, id:2 |
9969 // +------node---owner:6, id:3 | 9970 // +------node---owner:6, id:3 |
9970 // +----node---owner:7, id:4 | 9971 // +----node---owner:7, id:4 |
9971 // +------node---owner:11, id:5 | 9972 // +------node---owner:11, id:5 |
9972 // +----node---owner:5, id:6 | 9973 // +----node---owner:5, id:6 |
9973 // | 9974 // |
9974 // Extra check: | 9975 // Extra check: |
9975 // scroll_tree_index() of: | 9976 // scroll_tree_index() of: |
9976 // grand_child10:3 | 9977 // grand_child10:3 |
9977 // parent3:1 | 9978 // parent3:1 |
9978 // child8:4 | 9979 // child8:4 |
9979 // parent4:1 | 9980 // parent4:1 |
9980 // child9:1 | 9981 // child9:1 |
9981 // grand_child12:1 | 9982 // grand_child12:1 |
9982 scoped_refptr<Layer> root1 = Layer::Create(layer_settings()); | 9983 scoped_refptr<Layer> root1 = Layer::Create(layer_settings()); |
| 9984 scoped_refptr<Layer> page_scale_layer = Layer::Create(layer_settings()); |
9983 scoped_refptr<Layer> parent2 = Layer::Create(layer_settings()); | 9985 scoped_refptr<Layer> parent2 = Layer::Create(layer_settings()); |
9984 scoped_refptr<Layer> parent3 = Layer::Create(layer_settings()); | 9986 scoped_refptr<Layer> parent3 = Layer::Create(layer_settings()); |
9985 scoped_refptr<Layer> parent4 = Layer::Create(layer_settings()); | 9987 scoped_refptr<Layer> parent4 = Layer::Create(layer_settings()); |
9986 scoped_refptr<Layer> parent5 = Layer::Create(layer_settings()); | 9988 scoped_refptr<Layer> parent5 = Layer::Create(layer_settings()); |
9987 scoped_refptr<Layer> child6 = Layer::Create(layer_settings()); | 9989 scoped_refptr<Layer> child6 = Layer::Create(layer_settings()); |
9988 scoped_refptr<Layer> child7 = Layer::Create(layer_settings()); | 9990 scoped_refptr<Layer> child7 = Layer::Create(layer_settings()); |
9989 scoped_refptr<Layer> child8 = Layer::Create(layer_settings()); | 9991 scoped_refptr<Layer> child8 = Layer::Create(layer_settings()); |
9990 scoped_refptr<Layer> child9 = Layer::Create(layer_settings()); | 9992 scoped_refptr<Layer> child9 = Layer::Create(layer_settings()); |
9991 scoped_refptr<Layer> grand_child10 = Layer::Create(layer_settings()); | 9993 scoped_refptr<Layer> grand_child10 = Layer::Create(layer_settings()); |
9992 scoped_refptr<Layer> grand_child11 = Layer::Create(layer_settings()); | 9994 scoped_refptr<Layer> grand_child11 = Layer::Create(layer_settings()); |
9993 scoped_refptr<Layer> grand_child12 = Layer::Create(layer_settings()); | 9995 scoped_refptr<Layer> grand_child12 = Layer::Create(layer_settings()); |
9994 | 9996 |
9995 root1->AddChild(parent2); | 9997 root1->AddChild(page_scale_layer); |
9996 root1->AddChild(parent3); | 9998 page_scale_layer->AddChild(parent2); |
9997 root1->AddChild(parent4); | 9999 page_scale_layer->AddChild(parent3); |
9998 root1->AddChild(parent5); | 10000 page_scale_layer->AddChild(parent4); |
| 10001 page_scale_layer->AddChild(parent5); |
9999 parent2->AddChild(child6); | 10002 parent2->AddChild(child6); |
10000 parent3->AddChild(child7); | 10003 parent3->AddChild(child7); |
10001 parent3->AddChild(child8); | 10004 parent3->AddChild(child8); |
10002 parent4->AddChild(child9); | 10005 parent4->AddChild(child9); |
10003 child6->AddChild(grand_child10); | 10006 child6->AddChild(grand_child10); |
10004 child8->AddChild(grand_child11); | 10007 child8->AddChild(grand_child11); |
10005 child9->AddChild(grand_child12); | 10008 child9->AddChild(grand_child12); |
10006 host()->SetRootLayer(root1); | 10009 host()->SetRootLayer(root1); |
10007 | 10010 |
10008 parent2->AddMainThreadScrollingReasons( | 10011 parent2->AddMainThreadScrollingReasons( |
10009 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects); | 10012 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects); |
10010 parent2->AddMainThreadScrollingReasons( | 10013 parent2->AddMainThreadScrollingReasons( |
10011 MainThreadScrollingReason::kScrollbarScrolling); | 10014 MainThreadScrollingReason::kScrollbarScrolling); |
10012 parent2->SetScrollClipLayerId(root1->id()); | 10015 parent2->SetScrollClipLayerId(root1->id()); |
10013 child6->AddMainThreadScrollingReasons( | 10016 child6->AddMainThreadScrollingReasons( |
10014 MainThreadScrollingReason::kScrollbarScrolling); | 10017 MainThreadScrollingReason::kScrollbarScrolling); |
10015 grand_child10->AddMainThreadScrollingReasons( | 10018 grand_child10->AddMainThreadScrollingReasons( |
10016 MainThreadScrollingReason::kScrollbarScrolling); | 10019 MainThreadScrollingReason::kScrollbarScrolling); |
10017 | 10020 |
10018 child7->SetScrollClipLayerId(root1->id()); | 10021 child7->SetScrollClipLayerId(parent3->id()); |
| 10022 |
10019 child8->SetScrollParent(child7.get()); | 10023 child8->SetScrollParent(child7.get()); |
10020 grand_child11->SetScrollClipLayerId(root1->id()); | 10024 grand_child11->SetScrollClipLayerId(parent3->id()); |
10021 | 10025 |
10022 parent5->SetNonFastScrollableRegion(gfx::Rect(0, 0, 50, 50)); | 10026 parent5->SetNonFastScrollableRegion(gfx::Rect(0, 0, 50, 50)); |
| 10027 parent5->SetBounds(gfx::Size(10, 10)); |
10023 | 10028 |
| 10029 host()->RegisterViewportLayers(NULL, page_scale_layer, parent2, NULL); |
10024 ExecuteCalculateDrawPropertiesWithPropertyTrees(root1.get()); | 10030 ExecuteCalculateDrawPropertiesWithPropertyTrees(root1.get()); |
10025 | 10031 |
10026 const int kInvalidPropertyTreeNodeId = -1; | 10032 const int kInvalidPropertyTreeNodeId = -1; |
10027 const int kRootPropertyTreeNodeId = 0; | 10033 const int kRootPropertyTreeNodeId = 0; |
10028 | 10034 |
10029 // Property tree root | 10035 // Property tree root |
10030 ScrollTree scroll_tree = host()->property_trees()->scroll_tree; | 10036 ScrollTree scroll_tree = host()->property_trees()->scroll_tree; |
10031 ScrollTree expected_scroll_tree; | 10037 ScrollTree expected_scroll_tree; |
10032 ScrollNode* property_tree_root = expected_scroll_tree.Node(0); | 10038 ScrollNode* property_tree_root = expected_scroll_tree.Node(0); |
10033 property_tree_root->id = kRootPropertyTreeNodeId; | 10039 property_tree_root->id = kRootPropertyTreeNodeId; |
10034 property_tree_root->parent_id = kInvalidPropertyTreeNodeId; | 10040 property_tree_root->parent_id = kInvalidPropertyTreeNodeId; |
10035 property_tree_root->owner_id = kInvalidPropertyTreeNodeId; | 10041 property_tree_root->owner_id = kInvalidPropertyTreeNodeId; |
10036 property_tree_root->data.scrollable = false; | 10042 property_tree_root->data.scrollable = false; |
10037 property_tree_root->data.main_thread_scrolling_reasons = | 10043 property_tree_root->data.main_thread_scrolling_reasons = |
10038 MainThreadScrollingReason::kNotScrollingOnMain; | 10044 MainThreadScrollingReason::kNotScrollingOnMain; |
10039 property_tree_root->data.contains_non_fast_scrollable_region = false; | 10045 property_tree_root->data.contains_non_fast_scrollable_region = false; |
10040 property_tree_root->data.transform_id = kRootPropertyTreeNodeId; | |
10041 | 10046 |
10042 // The node owned by root1 | 10047 // The node owned by root1 |
10043 ScrollNode scroll_root1; | 10048 ScrollNode scroll_root1; |
10044 scroll_root1.id = 1; | 10049 scroll_root1.id = 1; |
10045 scroll_root1.owner_id = root1->id(); | 10050 scroll_root1.owner_id = root1->id(); |
10046 scroll_root1.data.transform_id = root1->transform_tree_index(); | |
10047 expected_scroll_tree.Insert(scroll_root1, 0); | 10051 expected_scroll_tree.Insert(scroll_root1, 0); |
10048 | 10052 |
10049 // The node owned by parent2 | 10053 // The node owned by parent2 |
10050 ScrollNode scroll_parent2; | 10054 ScrollNode scroll_parent2; |
10051 scroll_parent2.id = 2; | 10055 scroll_parent2.id = 2; |
10052 scroll_parent2.owner_id = parent2->id(); | 10056 scroll_parent2.owner_id = parent2->id(); |
10053 scroll_parent2.data.scrollable = true; | 10057 scroll_parent2.data.scrollable = true; |
10054 scroll_parent2.data.main_thread_scrolling_reasons = | 10058 scroll_parent2.data.main_thread_scrolling_reasons = |
10055 parent2->main_thread_scrolling_reasons(); | 10059 parent2->main_thread_scrolling_reasons(); |
10056 scroll_parent2.data.transform_id = parent2->transform_tree_index(); | 10060 scroll_parent2.data.scroll_clip_layer_bounds = root1->bounds(); |
| 10061 scroll_parent2.data.bounds = parent2->bounds(); |
| 10062 scroll_parent2.data.max_scroll_offset_affected_by_page_scale = true; |
| 10063 scroll_parent2.data.is_inner_viewport_scroll_layer = true; |
10057 expected_scroll_tree.Insert(scroll_parent2, 1); | 10064 expected_scroll_tree.Insert(scroll_parent2, 1); |
10058 | 10065 |
10059 // The node owned by child6 | 10066 // The node owned by child6 |
10060 ScrollNode scroll_child6; | 10067 ScrollNode scroll_child6; |
10061 scroll_child6.id = 3; | 10068 scroll_child6.id = 3; |
10062 scroll_child6.owner_id = child6->id(); | 10069 scroll_child6.owner_id = child6->id(); |
10063 scroll_child6.data.main_thread_scrolling_reasons = | 10070 scroll_child6.data.main_thread_scrolling_reasons = |
10064 child6->main_thread_scrolling_reasons(); | 10071 child6->main_thread_scrolling_reasons(); |
10065 scroll_child6.data.transform_id = child6->transform_tree_index(); | |
10066 expected_scroll_tree.Insert(scroll_child6, 2); | 10072 expected_scroll_tree.Insert(scroll_child6, 2); |
10067 | 10073 |
10068 // The node owned by child7, child7 also owns a transform node | 10074 // The node owned by child7, child7 also owns a transform node |
10069 ScrollNode scroll_child7; | 10075 ScrollNode scroll_child7; |
10070 scroll_child7.id = 4; | 10076 scroll_child7.id = 4; |
10071 scroll_child7.owner_id = child7->id(); | 10077 scroll_child7.owner_id = child7->id(); |
10072 scroll_child7.data.scrollable = true; | 10078 scroll_child7.data.scrollable = true; |
10073 scroll_child7.data.transform_id = child7->transform_tree_index(); | 10079 scroll_parent2.data.scroll_clip_layer_bounds = parent3->bounds(); |
| 10080 scroll_parent2.data.bounds = child7->bounds(); |
10074 expected_scroll_tree.Insert(scroll_child7, 1); | 10081 expected_scroll_tree.Insert(scroll_child7, 1); |
10075 | 10082 |
10076 // The node owned by grand_child11, grand_child11 also owns a transform node | 10083 // The node owned by grand_child11, grand_child11 also owns a transform node |
10077 ScrollNode scroll_grand_child11; | 10084 ScrollNode scroll_grand_child11; |
10078 scroll_grand_child11.id = 5; | 10085 scroll_grand_child11.id = 5; |
10079 scroll_grand_child11.owner_id = grand_child11->id(); | 10086 scroll_grand_child11.owner_id = grand_child11->id(); |
10080 scroll_grand_child11.data.scrollable = true; | 10087 scroll_grand_child11.data.scrollable = true; |
10081 scroll_grand_child11.data.transform_id = | |
10082 grand_child11->transform_tree_index(); | |
10083 expected_scroll_tree.Insert(scroll_grand_child11, 4); | 10088 expected_scroll_tree.Insert(scroll_grand_child11, 4); |
10084 | 10089 |
10085 // The node owned by parent5 | 10090 // The node owned by parent5 |
10086 ScrollNode scroll_parent5; | 10091 ScrollNode scroll_parent5; |
10087 scroll_parent5.id = 8; | 10092 scroll_parent5.id = 8; |
10088 scroll_parent5.owner_id = parent5->id(); | 10093 scroll_parent5.owner_id = parent5->id(); |
10089 scroll_parent5.data.contains_non_fast_scrollable_region = true; | 10094 scroll_parent5.data.contains_non_fast_scrollable_region = true; |
10090 scroll_parent5.data.transform_id = parent5->transform_tree_index(); | 10095 scroll_parent5.data.bounds = gfx::Size(10, 10); |
10091 expected_scroll_tree.Insert(scroll_parent5, 1); | 10096 expected_scroll_tree.Insert(scroll_parent5, 1); |
10092 | 10097 |
10093 expected_scroll_tree.set_needs_update(false); | 10098 expected_scroll_tree.set_needs_update(false); |
10094 | 10099 |
10095 EXPECT_EQ(expected_scroll_tree, scroll_tree); | 10100 EXPECT_EQ(expected_scroll_tree, scroll_tree); |
10096 | 10101 |
10097 // Check other layers' scroll_tree_index | 10102 // Check other layers' scroll_tree_index |
| 10103 EXPECT_EQ(scroll_root1.id, page_scale_layer->scroll_tree_index()); |
10098 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); | 10104 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); |
10099 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); | 10105 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); |
10100 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); | 10106 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); |
10101 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); | 10107 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); |
10102 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); | 10108 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); |
10103 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); | 10109 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); |
10104 } | 10110 } |
10105 | 10111 |
10106 } // namespace | 10112 } // namespace |
10107 } // namespace cc | 10113 } // namespace cc |
OLD | NEW |