Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(837)

Side by Side Diff: cc/layers/layer_unittest.cc

Issue 2159513003: Setup LayerTree class, refactor 2 functions from LayerTreeHost to it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Layer GetLayerTree now directly uses LayerTree pointer. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/layers/layer.h" 5 #include "cc/layers/layer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "cc/animation/animation_host.h" 10 #include "cc/animation/animation_host.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 using ::testing::StrictMock; 49 using ::testing::StrictMock;
50 using ::testing::_; 50 using ::testing::_;
51 51
52 #define EXPECT_SET_NEEDS_FULL_TREE_SYNC(expect, code_to_test) \ 52 #define EXPECT_SET_NEEDS_FULL_TREE_SYNC(expect, code_to_test) \
53 do { \ 53 do { \
54 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times((expect)); \ 54 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times((expect)); \
55 code_to_test; \ 55 code_to_test; \
56 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); \ 56 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); \
57 } while (false) 57 } while (false)
58 58
59 #define EXECUTE_AND_VERIFY_SUBTREE_CHANGED(code_to_test) \ 59 #define EXECUTE_AND_VERIFY_SUBTREE_CHANGED(code_to_test) \
60 code_to_test; \ 60 code_to_test; \
61 root->layer_tree_host()->BuildPropertyTreesForTesting(); \ 61 root->layer_tree_host()->BuildPropertyTreesForTesting(); \
62 EXPECT_TRUE(root->subtree_property_changed()); \ 62 EXPECT_TRUE(root->subtree_property_changed()); \
63 EXPECT_TRUE(root->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \ 63 EXPECT_TRUE( \
64 root.get())); \ 64 root->GetLayerTree()->LayerNeedsPushPropertiesForTesting(root.get())); \
65 EXPECT_TRUE(child->subtree_property_changed()); \ 65 EXPECT_TRUE(child->subtree_property_changed()); \
66 EXPECT_TRUE(child->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \ 66 EXPECT_TRUE( \
67 child.get())); \ 67 child->GetLayerTree()->LayerNeedsPushPropertiesForTesting(child.get())); \
68 EXPECT_TRUE(grand_child->subtree_property_changed()); \ 68 EXPECT_TRUE(grand_child->subtree_property_changed()); \
69 EXPECT_TRUE( \ 69 EXPECT_TRUE(grand_child->GetLayerTree()->LayerNeedsPushPropertiesForTesting( \
70 grand_child->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \ 70 grand_child.get()));
71
72 #define EXECUTE_AND_VERIFY_SUBTREE_CHANGES_RESET(code_to_test) \
73 code_to_test; \
74 EXPECT_FALSE(root->subtree_property_changed()); \
75 EXPECT_FALSE( \
76 root->GetLayerTree()->LayerNeedsPushPropertiesForTesting(root.get())); \
77 EXPECT_FALSE(child->subtree_property_changed()); \
78 EXPECT_FALSE( \
79 child->GetLayerTree()->LayerNeedsPushPropertiesForTesting(child.get())); \
80 EXPECT_FALSE(grand_child->subtree_property_changed()); \
81 EXPECT_FALSE( \
82 grand_child->GetLayerTree()->LayerNeedsPushPropertiesForTesting( \
71 grand_child.get())); 83 grand_child.get()));
72 84
73 #define EXECUTE_AND_VERIFY_SUBTREE_CHANGES_RESET(code_to_test) \ 85 #define EXECUTE_AND_VERIFY_ONLY_LAYER_CHANGED(code_to_test) \
74 code_to_test; \ 86 code_to_test; \
75 EXPECT_FALSE(root->subtree_property_changed()); \ 87 root->layer_tree_host()->BuildPropertyTreesForTesting(); \
76 EXPECT_FALSE(root->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \ 88 EXPECT_TRUE(root->layer_property_changed()); \
77 root.get())); \ 89 EXPECT_FALSE(root->subtree_property_changed()); \
78 EXPECT_FALSE(child->subtree_property_changed()); \ 90 EXPECT_TRUE( \
79 EXPECT_FALSE(child->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \ 91 root->GetLayerTree()->LayerNeedsPushPropertiesForTesting(root.get())); \
80 child.get())); \ 92 EXPECT_FALSE(child->layer_property_changed()); \
81 EXPECT_FALSE(grand_child->subtree_property_changed()); \ 93 EXPECT_FALSE(child->subtree_property_changed()); \
82 EXPECT_FALSE( \ 94 EXPECT_FALSE( \
83 grand_child->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \ 95 child->GetLayerTree()->LayerNeedsPushPropertiesForTesting(child.get())); \
84 grand_child.get())); 96 EXPECT_FALSE(grand_child->layer_property_changed()); \
85 97 EXPECT_FALSE(grand_child->subtree_property_changed()); \
86 #define EXECUTE_AND_VERIFY_ONLY_LAYER_CHANGED(code_to_test) \ 98 EXPECT_FALSE( \
87 code_to_test; \ 99 grand_child->GetLayerTree()->LayerNeedsPushPropertiesForTesting( \
88 root->layer_tree_host()->BuildPropertyTreesForTesting(); \
89 EXPECT_TRUE(root->layer_property_changed()); \
90 EXPECT_FALSE(root->subtree_property_changed()); \
91 EXPECT_TRUE(root->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \
92 root.get())); \
93 EXPECT_FALSE(child->layer_property_changed()); \
94 EXPECT_FALSE(child->subtree_property_changed()); \
95 EXPECT_FALSE(child->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \
96 child.get())); \
97 EXPECT_FALSE(grand_child->layer_property_changed()); \
98 EXPECT_FALSE(grand_child->subtree_property_changed()); \
99 EXPECT_FALSE( \
100 grand_child->layer_tree_host()->LayerNeedsPushPropertiesForTesting( \
101 grand_child.get())); 100 grand_child.get()));
102 101
103 namespace cc { 102 namespace cc {
104 103
105 // This class is a friend of Layer, and is used as a wrapper for all the tests 104 // This class is a friend of Layer, and is used as a wrapper for all the tests
106 // related to proto serialization. This is done so that it is unnecessary to 105 // related to proto serialization. This is done so that it is unnecessary to
107 // add FRIEND_TEST_ALL_PREFIXES in //cc/layers/layer.h for all the tests. 106 // add FRIEND_TEST_ALL_PREFIXES in //cc/layers/layer.h for all the tests.
108 // It is in the cc namespace so that it can be a friend of Layer. 107 // It is in the cc namespace so that it can be a friend of Layer.
109 // The tests still have helpful names, and a test with the name FooBar would 108 // The tests still have helpful names, and a test with the name FooBar would
110 // have a wrapper method in this class called RunFooBarTest. 109 // have a wrapper method in this class called RunFooBarTest.
(...skipping 22 matching lines...) Expand all
133 132
134 // Serialize |src| to protobuf and read the first entry in the 133 // Serialize |src| to protobuf and read the first entry in the
135 // LayerUpdate. There are no descendants, so the serialization 134 // LayerUpdate. There are no descendants, so the serialization
136 // of |src| is the only entry. 135 // of |src| is the only entry.
137 proto::LayerUpdate layer_update; 136 proto::LayerUpdate layer_update;
138 src->ToLayerPropertiesProto(&layer_update); 137 src->ToLayerPropertiesProto(&layer_update);
139 ASSERT_EQ(1, layer_update.layers_size()); 138 ASSERT_EQ(1, layer_update.layers_size());
140 proto::LayerProperties props = layer_update.layers(0); 139 proto::LayerProperties props = layer_update.layers(0);
141 140
142 // The |dest| layer needs to be able to lookup the scroll and clip parents. 141 // The |dest| layer needs to be able to lookup the scroll and clip parents.
142 LayerTree* layer_tree = layer_tree_host_->GetLayerTree();
143 if (src->inputs_.scroll_parent) 143 if (src->inputs_.scroll_parent)
144 layer_tree_host_->RegisterLayer(src->inputs_.scroll_parent); 144 layer_tree->RegisterLayer(src->inputs_.scroll_parent);
145 if (src->scroll_children_) { 145 if (src->scroll_children_) {
146 for (auto* child : *(src->scroll_children_)) 146 for (auto* child : *(src->scroll_children_))
147 layer_tree_host_->RegisterLayer(child); 147 layer_tree->RegisterLayer(child);
148 } 148 }
149 if (src->inputs_.clip_parent) 149 if (src->inputs_.clip_parent)
150 layer_tree_host_->RegisterLayer(src->inputs_.clip_parent); 150 layer_tree->RegisterLayer(src->inputs_.clip_parent);
151 if (src->clip_children_) { 151 if (src->clip_children_) {
152 for (auto* child : *(src->clip_children_)) 152 for (auto* child : *(src->clip_children_))
153 layer_tree_host_->RegisterLayer(child); 153 layer_tree->RegisterLayer(child);
154 } 154 }
155 // Reset the LayerTreeHost registration for the |src| layer so 155 // Reset the LayerTreeHost registration for the |src| layer so
156 // it can be re-used for the |dest| layer. 156 // it can be re-used for the |dest| layer.
157 src->SetLayerTreeHost(nullptr); 157 src->SetLayerTreeHost(nullptr);
158 158
159 scoped_refptr<Layer> dest = Layer::Create(); 159 scoped_refptr<Layer> dest = Layer::Create();
160 dest->inputs_.layer_id = src->inputs_.layer_id; 160 dest->inputs_.layer_id = src->inputs_.layer_id;
161 dest->SetLayerTreeHost(layer_tree_host_.get()); 161 dest->SetLayerTreeHost(layer_tree_host_.get());
162 dest->FromLayerPropertiesProto(props); 162 dest->FromLayerPropertiesProto(props);
163 163
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 } 241 }
242 242
243 // The following member should have been reset during serialization. 243 // The following member should have been reset during serialization.
244 EXPECT_EQ(gfx::Rect(), src->inputs_.update_rect); 244 EXPECT_EQ(gfx::Rect(), src->inputs_.update_rect);
245 245
246 // Before deleting |dest|, the LayerTreeHost must be unset. 246 // Before deleting |dest|, the LayerTreeHost must be unset.
247 dest->SetLayerTreeHost(nullptr); 247 dest->SetLayerTreeHost(nullptr);
248 248
249 // Cleanup scroll tree. 249 // Cleanup scroll tree.
250 if (src->inputs_.scroll_parent) 250 if (src->inputs_.scroll_parent)
251 layer_tree_host_->UnregisterLayer(src->inputs_.scroll_parent); 251 layer_tree->UnregisterLayer(src->inputs_.scroll_parent);
252 src->inputs_.scroll_parent = nullptr; 252 src->inputs_.scroll_parent = nullptr;
253 dest->inputs_.scroll_parent = nullptr; 253 dest->inputs_.scroll_parent = nullptr;
254 if (src->scroll_children_) { 254 if (src->scroll_children_) {
255 for (auto* child : *(src->scroll_children_)) 255 for (auto* child : *(src->scroll_children_))
256 layer_tree_host_->UnregisterLayer(child); 256 layer_tree->UnregisterLayer(child);
257 src->scroll_children_.reset(); 257 src->scroll_children_.reset();
258 dest->scroll_children_.reset(); 258 dest->scroll_children_.reset();
259 } 259 }
260 260
261 // Cleanup clip tree. 261 // Cleanup clip tree.
262 if (src->inputs_.clip_parent) 262 if (src->inputs_.clip_parent)
263 layer_tree_host_->UnregisterLayer(src->inputs_.clip_parent); 263 layer_tree->UnregisterLayer(src->inputs_.clip_parent);
264 src->inputs_.clip_parent = nullptr; 264 src->inputs_.clip_parent = nullptr;
265 dest->inputs_.clip_parent = nullptr; 265 dest->inputs_.clip_parent = nullptr;
266 if (src->clip_children_) { 266 if (src->clip_children_) {
267 for (auto* child : *(src->clip_children_)) 267 for (auto* child : *(src->clip_children_))
268 layer_tree_host_->UnregisterLayer(child); 268 layer_tree->UnregisterLayer(child);
269 src->clip_children_.reset(); 269 src->clip_children_.reset();
270 dest->clip_children_.reset(); 270 dest->clip_children_.reset();
271 } 271 }
272 } 272 }
273 273
274 void RunNoMembersChangedTest() { 274 void RunNoMembersChangedTest() {
275 scoped_refptr<Layer> layer = Layer::Create(); 275 scoped_refptr<Layer> layer = Layer::Create();
276 VerifyBaseLayerPropertiesSerializationAndDeserialization(layer.get()); 276 VerifyBaseLayerPropertiesSerializationAndDeserialization(layer.get());
277 } 277 }
278 278
(...skipping 1123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 1402
1403 EXPECT_SET_NEEDS_COMMIT(2, child1->SetScrollParent(child2.get())); 1403 EXPECT_SET_NEEDS_COMMIT(2, child1->SetScrollParent(child2.get()));
1404 1404
1405 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, child2->RemoveFromParent()); 1405 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, child2->RemoveFromParent());
1406 1406
1407 child1->ResetNeedsPushPropertiesForTesting(); 1407 child1->ResetNeedsPushPropertiesForTesting();
1408 1408
1409 EXPECT_SET_NEEDS_COMMIT(1, child2 = nullptr); 1409 EXPECT_SET_NEEDS_COMMIT(1, child2 = nullptr);
1410 1410
1411 EXPECT_TRUE( 1411 EXPECT_TRUE(
1412 layer_tree_host_->LayerNeedsPushPropertiesForTesting(child1.get())); 1412 layer_tree_host_->GetLayerTree()->LayerNeedsPushPropertiesForTesting(
1413 child1.get()));
1413 1414
1414 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr)); 1415 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr));
1415 } 1416 }
1416 1417
1417 TEST_F(LayerTest, DeleteRemovedScrollChild) { 1418 TEST_F(LayerTest, DeleteRemovedScrollChild) {
1418 scoped_refptr<Layer> parent = Layer::Create(); 1419 scoped_refptr<Layer> parent = Layer::Create();
1419 scoped_refptr<Layer> child1 = Layer::Create(); 1420 scoped_refptr<Layer> child1 = Layer::Create();
1420 scoped_refptr<Layer> child2 = Layer::Create(); 1421 scoped_refptr<Layer> child2 = Layer::Create();
1421 1422
1422 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent)); 1423 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent));
1423 1424
1424 ASSERT_EQ(0U, parent->children().size()); 1425 ASSERT_EQ(0U, parent->children().size());
1425 1426
1426 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child1, 0)); 1427 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child1, 0));
1427 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child2, 1)); 1428 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child2, 1));
1428 1429
1429 ASSERT_EQ(2U, parent->children().size()); 1430 ASSERT_EQ(2U, parent->children().size());
1430 EXPECT_EQ(child1, parent->children()[0]); 1431 EXPECT_EQ(child1, parent->children()[0]);
1431 EXPECT_EQ(child2, parent->children()[1]); 1432 EXPECT_EQ(child2, parent->children()[1]);
1432 1433
1433 EXPECT_SET_NEEDS_COMMIT(2, child1->SetScrollParent(child2.get())); 1434 EXPECT_SET_NEEDS_COMMIT(2, child1->SetScrollParent(child2.get()));
1434 1435
1435 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, child1->RemoveFromParent()); 1436 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, child1->RemoveFromParent());
1436 1437
1437 child2->ResetNeedsPushPropertiesForTesting(); 1438 child2->ResetNeedsPushPropertiesForTesting();
1438 1439
1439 EXPECT_SET_NEEDS_COMMIT(1, child1 = nullptr); 1440 EXPECT_SET_NEEDS_COMMIT(1, child1 = nullptr);
1440 1441
1441 EXPECT_TRUE( 1442 EXPECT_TRUE(
1442 layer_tree_host_->LayerNeedsPushPropertiesForTesting(child2.get())); 1443 layer_tree_host_->GetLayerTree()->LayerNeedsPushPropertiesForTesting(
1444 child2.get()));
1443 1445
1444 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr)); 1446 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr));
1445 } 1447 }
1446 1448
1447 TEST_F(LayerTest, ReplaceChildWithSameChild) { 1449 TEST_F(LayerTest, ReplaceChildWithSameChild) {
1448 CreateSimpleTestTree(); 1450 CreateSimpleTestTree();
1449 1451
1450 // SetNeedsFullTreeSync / SetNeedsCommit should not be called because its the 1452 // SetNeedsFullTreeSync / SetNeedsCommit should not be called because its the
1451 // same child. 1453 // same child.
1452 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0); 1454 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0);
(...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after
2531 EXPECT_EQ(MutableProperty::kNone, impl_layer->mutable_properties()); 2533 EXPECT_EQ(MutableProperty::kNone, impl_layer->mutable_properties());
2532 2534
2533 test_layer->PushPropertiesTo(impl_layer.get()); 2535 test_layer->PushPropertiesTo(impl_layer.get());
2534 2536
2535 EXPECT_EQ(ElementId(2, 0), impl_layer->element_id()); 2537 EXPECT_EQ(ElementId(2, 0), impl_layer->element_id());
2536 EXPECT_EQ(MutableProperty::kTransform, impl_layer->mutable_properties()); 2538 EXPECT_EQ(MutableProperty::kTransform, impl_layer->mutable_properties());
2537 } 2539 }
2538 2540
2539 } // namespace 2541 } // namespace
2540 } // namespace cc 2542 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698