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

Side by Side Diff: cc/trees/tree_synchronizer_unittest.cc

Issue 1122393003: CC: Plumb LayerSettings parameter for cc::Layer construction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 7 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/trees/tree_synchronizer.h" 5 #include "cc/trees/tree_synchronizer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 MockLayerImpl(LayerTreeImpl* tree_impl, int layer_id) 44 MockLayerImpl(LayerTreeImpl* tree_impl, int layer_id)
45 : LayerImpl(tree_impl, layer_id), 45 : LayerImpl(tree_impl, layer_id),
46 layer_impl_destruction_list_(NULL) {} 46 layer_impl_destruction_list_(NULL) {}
47 47
48 std::vector<int>* layer_impl_destruction_list_; 48 std::vector<int>* layer_impl_destruction_list_;
49 }; 49 };
50 50
51 class MockLayer : public Layer { 51 class MockLayer : public Layer {
52 public: 52 public:
53 static scoped_refptr<MockLayer> Create( 53 static scoped_refptr<MockLayer> Create(
54 const LayerSettings& settings,
54 std::vector<int>* layer_impl_destruction_list) { 55 std::vector<int>* layer_impl_destruction_list) {
55 return make_scoped_refptr(new MockLayer(layer_impl_destruction_list)); 56 return make_scoped_refptr(
57 new MockLayer(settings, layer_impl_destruction_list));
56 } 58 }
57 59
58 scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override { 60 scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override {
59 return MockLayerImpl::Create(tree_impl, layer_id_); 61 return MockLayerImpl::Create(tree_impl, layer_id_);
60 } 62 }
61 63
62 void PushPropertiesTo(LayerImpl* layer_impl) override { 64 void PushPropertiesTo(LayerImpl* layer_impl) override {
63 Layer::PushPropertiesTo(layer_impl); 65 Layer::PushPropertiesTo(layer_impl);
64 66
65 MockLayerImpl* mock_layer_impl = static_cast<MockLayerImpl*>(layer_impl); 67 MockLayerImpl* mock_layer_impl = static_cast<MockLayerImpl*>(layer_impl);
66 mock_layer_impl->SetLayerImplDestructionList(layer_impl_destruction_list_); 68 mock_layer_impl->SetLayerImplDestructionList(layer_impl_destruction_list_);
67 } 69 }
68 70
69 private: 71 private:
70 explicit MockLayer(std::vector<int>* layer_impl_destruction_list) 72 explicit MockLayer(const LayerSettings& settings,
71 : Layer(), layer_impl_destruction_list_(layer_impl_destruction_list) {} 73 std::vector<int>* layer_impl_destruction_list)
74 : Layer(settings),
75 layer_impl_destruction_list_(layer_impl_destruction_list) {}
72 ~MockLayer() override {} 76 ~MockLayer() override {}
73 77
74 std::vector<int>* layer_impl_destruction_list_; 78 std::vector<int>* layer_impl_destruction_list_;
75 }; 79 };
76 80
77 class FakeLayerAnimationController : public LayerAnimationController { 81 class FakeLayerAnimationController : public LayerAnimationController {
78 public: 82 public:
79 static scoped_refptr<LayerAnimationController> Create() { 83 static scoped_refptr<LayerAnimationController> Create() {
80 return static_cast<LayerAnimationController*>( 84 return static_cast<LayerAnimationController*>(
81 new FakeLayerAnimationController); 85 new FakeLayerAnimationController);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 193
190 class TreeSynchronizerTest : public testing::Test { 194 class TreeSynchronizerTest : public testing::Test {
191 public: 195 public:
192 TreeSynchronizerTest() 196 TreeSynchronizerTest()
193 : client_(FakeLayerTreeHostClient::DIRECT_3D), 197 : client_(FakeLayerTreeHostClient::DIRECT_3D),
194 host_(FakeLayerTreeHost::Create(&client_)) {} 198 host_(FakeLayerTreeHost::Create(&client_)) {}
195 199
196 protected: 200 protected:
197 FakeLayerTreeHostClient client_; 201 FakeLayerTreeHostClient client_;
198 scoped_ptr<FakeLayerTreeHost> host_; 202 scoped_ptr<FakeLayerTreeHost> host_;
203 LayerSettings layer_settings_;
199 }; 204 };
200 205
201 // Attempts to synchronizes a null tree. This should not crash, and should 206 // Attempts to synchronizes a null tree. This should not crash, and should
202 // return a null tree. 207 // return a null tree.
203 TEST_F(TreeSynchronizerTest, SyncNullTree) { 208 TEST_F(TreeSynchronizerTest, SyncNullTree) {
204 scoped_ptr<LayerImpl> layer_impl_tree_root = 209 scoped_ptr<LayerImpl> layer_impl_tree_root =
205 TreeSynchronizer::SynchronizeTrees( 210 TreeSynchronizer::SynchronizeTrees(
206 static_cast<Layer*>(NULL), nullptr, host_->active_tree()); 211 static_cast<Layer*>(NULL), nullptr, host_->active_tree());
207 212
208 EXPECT_TRUE(!layer_impl_tree_root.get()); 213 EXPECT_TRUE(!layer_impl_tree_root.get());
209 } 214 }
210 215
211 // Constructs a very simple tree and synchronizes it without trying to reuse any 216 // Constructs a very simple tree and synchronizes it without trying to reuse any
212 // preexisting layers. 217 // preexisting layers.
213 TEST_F(TreeSynchronizerTest, SyncSimpleTreeFromEmpty) { 218 TEST_F(TreeSynchronizerTest, SyncSimpleTreeFromEmpty) {
214 scoped_refptr<Layer> layer_tree_root = Layer::Create(); 219 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings_);
215 layer_tree_root->AddChild(Layer::Create()); 220 layer_tree_root->AddChild(Layer::Create(layer_settings_));
216 layer_tree_root->AddChild(Layer::Create()); 221 layer_tree_root->AddChild(Layer::Create(layer_settings_));
217 222
218 host_->SetRootLayer(layer_tree_root); 223 host_->SetRootLayer(layer_tree_root);
219 224
220 scoped_ptr<LayerImpl> layer_impl_tree_root = 225 scoped_ptr<LayerImpl> layer_impl_tree_root =
221 TreeSynchronizer::SynchronizeTrees( 226 TreeSynchronizer::SynchronizeTrees(
222 layer_tree_root.get(), nullptr, host_->active_tree()); 227 layer_tree_root.get(), nullptr, host_->active_tree());
223 228
224 ExpectTreesAreIdentical(layer_tree_root.get(), 229 ExpectTreesAreIdentical(layer_tree_root.get(),
225 layer_impl_tree_root.get(), 230 layer_impl_tree_root.get(),
226 host_->active_tree()); 231 host_->active_tree());
227 } 232 }
228 233
229 // Constructs a very simple tree and synchronizes it attempting to reuse some 234 // Constructs a very simple tree and synchronizes it attempting to reuse some
230 // layers 235 // layers
231 TEST_F(TreeSynchronizerTest, SyncSimpleTreeReusingLayers) { 236 TEST_F(TreeSynchronizerTest, SyncSimpleTreeReusingLayers) {
232 std::vector<int> layer_impl_destruction_list; 237 std::vector<int> layer_impl_destruction_list;
233 238
234 scoped_refptr<Layer> layer_tree_root = 239 scoped_refptr<Layer> layer_tree_root =
235 MockLayer::Create(&layer_impl_destruction_list); 240 MockLayer::Create(layer_settings_, &layer_impl_destruction_list);
236 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); 241 layer_tree_root->AddChild(
237 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); 242 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
243 layer_tree_root->AddChild(
244 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
238 245
239 host_->SetRootLayer(layer_tree_root); 246 host_->SetRootLayer(layer_tree_root);
240 247
241 scoped_ptr<LayerImpl> layer_impl_tree_root = 248 scoped_ptr<LayerImpl> layer_impl_tree_root =
242 TreeSynchronizer::SynchronizeTrees( 249 TreeSynchronizer::SynchronizeTrees(
243 layer_tree_root.get(), nullptr, host_->active_tree()); 250 layer_tree_root.get(), nullptr, host_->active_tree());
244 ExpectTreesAreIdentical(layer_tree_root.get(), 251 ExpectTreesAreIdentical(layer_tree_root.get(),
245 layer_impl_tree_root.get(), 252 layer_impl_tree_root.get(),
246 host_->active_tree()); 253 host_->active_tree());
247 254
248 // We have to push properties to pick up the destruction list pointer. 255 // We have to push properties to pick up the destruction list pointer.
249 TreeSynchronizer::PushProperties(layer_tree_root.get(), 256 TreeSynchronizer::PushProperties(layer_tree_root.get(),
250 layer_impl_tree_root.get()); 257 layer_impl_tree_root.get());
251 258
252 // Add a new layer to the Layer side 259 // Add a new layer to the Layer side
253 layer_tree_root->children()[0]-> 260 layer_tree_root->children()[0]->AddChild(
254 AddChild(MockLayer::Create(&layer_impl_destruction_list)); 261 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
255 // Remove one. 262 // Remove one.
256 layer_tree_root->children()[1]->RemoveFromParent(); 263 layer_tree_root->children()[1]->RemoveFromParent();
257 int second_layer_impl_id = layer_impl_tree_root->children()[1]->id(); 264 int second_layer_impl_id = layer_impl_tree_root->children()[1]->id();
258 265
259 // Synchronize again. After the sync the trees should be equivalent and we 266 // Synchronize again. After the sync the trees should be equivalent and we
260 // should have created and destroyed one LayerImpl. 267 // should have created and destroyed one LayerImpl.
261 layer_impl_tree_root = 268 layer_impl_tree_root =
262 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), 269 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(),
263 layer_impl_tree_root.Pass(), 270 layer_impl_tree_root.Pass(),
264 host_->active_tree()); 271 host_->active_tree());
265 ExpectTreesAreIdentical(layer_tree_root.get(), 272 ExpectTreesAreIdentical(layer_tree_root.get(),
266 layer_impl_tree_root.get(), 273 layer_impl_tree_root.get(),
267 host_->active_tree()); 274 host_->active_tree());
268 275
269 ASSERT_EQ(1u, layer_impl_destruction_list.size()); 276 ASSERT_EQ(1u, layer_impl_destruction_list.size());
270 EXPECT_EQ(second_layer_impl_id, layer_impl_destruction_list[0]); 277 EXPECT_EQ(second_layer_impl_id, layer_impl_destruction_list[0]);
271 } 278 }
272 279
273 // Constructs a very simple tree and checks that a stacking-order change is 280 // Constructs a very simple tree and checks that a stacking-order change is
274 // tracked properly. 281 // tracked properly.
275 TEST_F(TreeSynchronizerTest, SyncSimpleTreeAndTrackStackingOrderChange) { 282 TEST_F(TreeSynchronizerTest, SyncSimpleTreeAndTrackStackingOrderChange) {
276 std::vector<int> layer_impl_destruction_list; 283 std::vector<int> layer_impl_destruction_list;
277 284
278 // Set up the tree and sync once. child2 needs to be synced here, too, even 285 // Set up the tree and sync once. child2 needs to be synced here, too, even
279 // though we remove it to set up the intended scenario. 286 // though we remove it to set up the intended scenario.
280 scoped_refptr<Layer> layer_tree_root = 287 scoped_refptr<Layer> layer_tree_root =
281 MockLayer::Create(&layer_impl_destruction_list); 288 MockLayer::Create(layer_settings_, &layer_impl_destruction_list);
282 scoped_refptr<Layer> child2 = MockLayer::Create(&layer_impl_destruction_list); 289 scoped_refptr<Layer> child2 =
283 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); 290 MockLayer::Create(layer_settings_, &layer_impl_destruction_list);
291 layer_tree_root->AddChild(
292 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
284 layer_tree_root->AddChild(child2); 293 layer_tree_root->AddChild(child2);
285 294
286 host_->SetRootLayer(layer_tree_root); 295 host_->SetRootLayer(layer_tree_root);
287 296
288 scoped_ptr<LayerImpl> layer_impl_tree_root = 297 scoped_ptr<LayerImpl> layer_impl_tree_root =
289 TreeSynchronizer::SynchronizeTrees( 298 TreeSynchronizer::SynchronizeTrees(
290 layer_tree_root.get(), nullptr, host_->active_tree()); 299 layer_tree_root.get(), nullptr, host_->active_tree());
291 ExpectTreesAreIdentical(layer_tree_root.get(), 300 ExpectTreesAreIdentical(layer_tree_root.get(),
292 layer_impl_tree_root.get(), 301 layer_impl_tree_root.get(),
293 host_->active_tree()); 302 host_->active_tree());
(...skipping 18 matching lines...) Expand all
312 TreeSynchronizer::PushProperties(layer_tree_root.get(), 321 TreeSynchronizer::PushProperties(layer_tree_root.get(),
313 layer_impl_tree_root.get()); 322 layer_impl_tree_root.get());
314 323
315 // Check that the impl thread properly tracked the change. 324 // Check that the impl thread properly tracked the change.
316 EXPECT_FALSE(layer_impl_tree_root->LayerPropertyChanged()); 325 EXPECT_FALSE(layer_impl_tree_root->LayerPropertyChanged());
317 EXPECT_FALSE(layer_impl_tree_root->children()[0]->LayerPropertyChanged()); 326 EXPECT_FALSE(layer_impl_tree_root->children()[0]->LayerPropertyChanged());
318 EXPECT_TRUE(layer_impl_tree_root->children()[1]->LayerPropertyChanged()); 327 EXPECT_TRUE(layer_impl_tree_root->children()[1]->LayerPropertyChanged());
319 } 328 }
320 329
321 TEST_F(TreeSynchronizerTest, SyncSimpleTreeAndProperties) { 330 TEST_F(TreeSynchronizerTest, SyncSimpleTreeAndProperties) {
322 scoped_refptr<Layer> layer_tree_root = Layer::Create(); 331 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings_);
323 layer_tree_root->AddChild(Layer::Create()); 332 layer_tree_root->AddChild(Layer::Create(layer_settings_));
324 layer_tree_root->AddChild(Layer::Create()); 333 layer_tree_root->AddChild(Layer::Create(layer_settings_));
325 334
326 host_->SetRootLayer(layer_tree_root); 335 host_->SetRootLayer(layer_tree_root);
327 336
328 // Pick some random properties to set. The values are not important, we're 337 // Pick some random properties to set. The values are not important, we're
329 // just testing that at least some properties are making it through. 338 // just testing that at least some properties are making it through.
330 gfx::PointF root_position = gfx::PointF(2.3f, 7.4f); 339 gfx::PointF root_position = gfx::PointF(2.3f, 7.4f);
331 layer_tree_root->SetPosition(root_position); 340 layer_tree_root->SetPosition(root_position);
332 341
333 float first_child_opacity = 0.25f; 342 float first_child_opacity = 0.25f;
334 layer_tree_root->children()[0]->SetOpacity(first_child_opacity); 343 layer_tree_root->children()[0]->SetOpacity(first_child_opacity);
(...skipping 30 matching lines...) Expand all
365 } 374 }
366 375
367 TEST_F(TreeSynchronizerTest, ReuseLayerImplsAfterStructuralChange) { 376 TEST_F(TreeSynchronizerTest, ReuseLayerImplsAfterStructuralChange) {
368 std::vector<int> layer_impl_destruction_list; 377 std::vector<int> layer_impl_destruction_list;
369 378
370 // Set up a tree with this sort of structure: 379 // Set up a tree with this sort of structure:
371 // root --- A --- B ---+--- C 380 // root --- A --- B ---+--- C
372 // | 381 // |
373 // +--- D 382 // +--- D
374 scoped_refptr<Layer> layer_tree_root = 383 scoped_refptr<Layer> layer_tree_root =
375 MockLayer::Create(&layer_impl_destruction_list); 384 MockLayer::Create(layer_settings_, &layer_impl_destruction_list);
376 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); 385 layer_tree_root->AddChild(
386 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
377 387
378 scoped_refptr<Layer> layer_a = layer_tree_root->children()[0].get(); 388 scoped_refptr<Layer> layer_a = layer_tree_root->children()[0].get();
379 layer_a->AddChild(MockLayer::Create(&layer_impl_destruction_list)); 389 layer_a->AddChild(
390 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
380 391
381 scoped_refptr<Layer> layer_b = layer_a->children()[0].get(); 392 scoped_refptr<Layer> layer_b = layer_a->children()[0].get();
382 layer_b->AddChild(MockLayer::Create(&layer_impl_destruction_list)); 393 layer_b->AddChild(
394 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
383 395
384 scoped_refptr<Layer> layer_c = layer_b->children()[0].get(); 396 scoped_refptr<Layer> layer_c = layer_b->children()[0].get();
385 layer_b->AddChild(MockLayer::Create(&layer_impl_destruction_list)); 397 layer_b->AddChild(
398 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
386 scoped_refptr<Layer> layer_d = layer_b->children()[1].get(); 399 scoped_refptr<Layer> layer_d = layer_b->children()[1].get();
387 400
388 host_->SetRootLayer(layer_tree_root); 401 host_->SetRootLayer(layer_tree_root);
389 402
390 scoped_ptr<LayerImpl> layer_impl_tree_root = 403 scoped_ptr<LayerImpl> layer_impl_tree_root =
391 TreeSynchronizer::SynchronizeTrees( 404 TreeSynchronizer::SynchronizeTrees(
392 layer_tree_root.get(), nullptr, host_->active_tree()); 405 layer_tree_root.get(), nullptr, host_->active_tree());
393 ExpectTreesAreIdentical(layer_tree_root.get(), 406 ExpectTreesAreIdentical(layer_tree_root.get(),
394 layer_impl_tree_root.get(), 407 layer_impl_tree_root.get(),
395 host_->active_tree()); 408 host_->active_tree());
(...skipping 28 matching lines...) Expand all
424 437
425 EXPECT_EQ(0u, layer_impl_destruction_list.size()); 438 EXPECT_EQ(0u, layer_impl_destruction_list.size());
426 } 439 }
427 440
428 // Constructs a very simple tree, synchronizes it, then synchronizes to a 441 // Constructs a very simple tree, synchronizes it, then synchronizes to a
429 // totally new tree. All layers from the old tree should be deleted. 442 // totally new tree. All layers from the old tree should be deleted.
430 TEST_F(TreeSynchronizerTest, SyncSimpleTreeThenDestroy) { 443 TEST_F(TreeSynchronizerTest, SyncSimpleTreeThenDestroy) {
431 std::vector<int> layer_impl_destruction_list; 444 std::vector<int> layer_impl_destruction_list;
432 445
433 scoped_refptr<Layer> old_layer_tree_root = 446 scoped_refptr<Layer> old_layer_tree_root =
434 MockLayer::Create(&layer_impl_destruction_list); 447 MockLayer::Create(layer_settings_, &layer_impl_destruction_list);
435 old_layer_tree_root->AddChild( 448 old_layer_tree_root->AddChild(
436 MockLayer::Create(&layer_impl_destruction_list)); 449 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
437 old_layer_tree_root->AddChild( 450 old_layer_tree_root->AddChild(
438 MockLayer::Create(&layer_impl_destruction_list)); 451 MockLayer::Create(layer_settings_, &layer_impl_destruction_list));
439 452
440 host_->SetRootLayer(old_layer_tree_root); 453 host_->SetRootLayer(old_layer_tree_root);
441 454
442 int old_tree_root_layer_id = old_layer_tree_root->id(); 455 int old_tree_root_layer_id = old_layer_tree_root->id();
443 int old_tree_first_child_layer_id = old_layer_tree_root->children()[0]->id(); 456 int old_tree_first_child_layer_id = old_layer_tree_root->children()[0]->id();
444 int old_tree_second_child_layer_id = old_layer_tree_root->children()[1]->id(); 457 int old_tree_second_child_layer_id = old_layer_tree_root->children()[1]->id();
445 458
446 scoped_ptr<LayerImpl> layer_impl_tree_root = 459 scoped_ptr<LayerImpl> layer_impl_tree_root =
447 TreeSynchronizer::SynchronizeTrees( 460 TreeSynchronizer::SynchronizeTrees(
448 old_layer_tree_root.get(), nullptr, host_->active_tree()); 461 old_layer_tree_root.get(), nullptr, host_->active_tree());
449 ExpectTreesAreIdentical(old_layer_tree_root.get(), 462 ExpectTreesAreIdentical(old_layer_tree_root.get(),
450 layer_impl_tree_root.get(), 463 layer_impl_tree_root.get(),
451 host_->active_tree()); 464 host_->active_tree());
452 465
453 // We have to push properties to pick up the destruction list pointer. 466 // We have to push properties to pick up the destruction list pointer.
454 TreeSynchronizer::PushProperties(old_layer_tree_root.get(), 467 TreeSynchronizer::PushProperties(old_layer_tree_root.get(),
455 layer_impl_tree_root.get()); 468 layer_impl_tree_root.get());
456 469
457 // Remove all children on the Layer side. 470 // Remove all children on the Layer side.
458 old_layer_tree_root->RemoveAllChildren(); 471 old_layer_tree_root->RemoveAllChildren();
459 472
460 // Synchronize again. After the sync all LayerImpls from the old tree should 473 // Synchronize again. After the sync all LayerImpls from the old tree should
461 // be deleted. 474 // be deleted.
462 scoped_refptr<Layer> new_layer_tree_root = Layer::Create(); 475 scoped_refptr<Layer> new_layer_tree_root = Layer::Create(layer_settings_);
463 host_->SetRootLayer(new_layer_tree_root); 476 host_->SetRootLayer(new_layer_tree_root);
464 layer_impl_tree_root = 477 layer_impl_tree_root =
465 TreeSynchronizer::SynchronizeTrees(new_layer_tree_root.get(), 478 TreeSynchronizer::SynchronizeTrees(new_layer_tree_root.get(),
466 layer_impl_tree_root.Pass(), 479 layer_impl_tree_root.Pass(),
467 host_->active_tree()); 480 host_->active_tree());
468 ExpectTreesAreIdentical(new_layer_tree_root.get(), 481 ExpectTreesAreIdentical(new_layer_tree_root.get(),
469 layer_impl_tree_root.get(), 482 layer_impl_tree_root.get(),
470 host_->active_tree()); 483 host_->active_tree());
471 484
472 ASSERT_EQ(3u, layer_impl_destruction_list.size()); 485 ASSERT_EQ(3u, layer_impl_destruction_list.size());
473 486
474 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(), 487 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(),
475 layer_impl_destruction_list.end(), 488 layer_impl_destruction_list.end(),
476 old_tree_root_layer_id) != 489 old_tree_root_layer_id) !=
477 layer_impl_destruction_list.end()); 490 layer_impl_destruction_list.end());
478 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(), 491 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(),
479 layer_impl_destruction_list.end(), 492 layer_impl_destruction_list.end(),
480 old_tree_first_child_layer_id) != 493 old_tree_first_child_layer_id) !=
481 layer_impl_destruction_list.end()); 494 layer_impl_destruction_list.end());
482 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(), 495 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(),
483 layer_impl_destruction_list.end(), 496 layer_impl_destruction_list.end(),
484 old_tree_second_child_layer_id) != 497 old_tree_second_child_layer_id) !=
485 layer_impl_destruction_list.end()); 498 layer_impl_destruction_list.end());
486 } 499 }
487 500
488 // Constructs+syncs a tree with mask, replica, and replica mask layers. 501 // Constructs+syncs a tree with mask, replica, and replica mask layers.
489 TEST_F(TreeSynchronizerTest, SyncMaskReplicaAndReplicaMaskLayers) { 502 TEST_F(TreeSynchronizerTest, SyncMaskReplicaAndReplicaMaskLayers) {
490 scoped_refptr<Layer> layer_tree_root = Layer::Create(); 503 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings_);
491 layer_tree_root->AddChild(Layer::Create()); 504 layer_tree_root->AddChild(Layer::Create(layer_settings_));
492 layer_tree_root->AddChild(Layer::Create()); 505 layer_tree_root->AddChild(Layer::Create(layer_settings_));
493 layer_tree_root->AddChild(Layer::Create()); 506 layer_tree_root->AddChild(Layer::Create(layer_settings_));
494 507
495 // First child gets a mask layer. 508 // First child gets a mask layer.
496 scoped_refptr<Layer> mask_layer = Layer::Create(); 509 scoped_refptr<Layer> mask_layer = Layer::Create(layer_settings_);
497 layer_tree_root->children()[0]->SetMaskLayer(mask_layer.get()); 510 layer_tree_root->children()[0]->SetMaskLayer(mask_layer.get());
498 511
499 // Second child gets a replica layer. 512 // Second child gets a replica layer.
500 scoped_refptr<Layer> replica_layer = Layer::Create(); 513 scoped_refptr<Layer> replica_layer = Layer::Create(layer_settings_);
501 layer_tree_root->children()[1]->SetReplicaLayer(replica_layer.get()); 514 layer_tree_root->children()[1]->SetReplicaLayer(replica_layer.get());
502 515
503 // Third child gets a replica layer with a mask layer. 516 // Third child gets a replica layer with a mask layer.
504 scoped_refptr<Layer> replica_layer_with_mask = Layer::Create(); 517 scoped_refptr<Layer> replica_layer_with_mask = Layer::Create(layer_settings_);
505 scoped_refptr<Layer> replica_mask_layer = Layer::Create(); 518 scoped_refptr<Layer> replica_mask_layer = Layer::Create(layer_settings_);
506 replica_layer_with_mask->SetMaskLayer(replica_mask_layer.get()); 519 replica_layer_with_mask->SetMaskLayer(replica_mask_layer.get());
507 layer_tree_root->children()[2]-> 520 layer_tree_root->children()[2]->
508 SetReplicaLayer(replica_layer_with_mask.get()); 521 SetReplicaLayer(replica_layer_with_mask.get());
509 522
510 host_->SetRootLayer(layer_tree_root); 523 host_->SetRootLayer(layer_tree_root);
511 524
512 scoped_ptr<LayerImpl> layer_impl_tree_root = 525 scoped_ptr<LayerImpl> layer_impl_tree_root =
513 TreeSynchronizer::SynchronizeTrees( 526 TreeSynchronizer::SynchronizeTrees(
514 layer_tree_root.get(), nullptr, host_->active_tree()); 527 layer_tree_root.get(), nullptr, host_->active_tree());
515 528
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 LayerTreeSettings settings; 565 LayerTreeSettings settings;
553 FakeProxy proxy; 566 FakeProxy proxy;
554 DebugScopedSetImplThread impl(&proxy); 567 DebugScopedSetImplThread impl(&proxy);
555 FakeRenderingStatsInstrumentation stats_instrumentation; 568 FakeRenderingStatsInstrumentation stats_instrumentation;
556 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 569 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
557 new TestSharedBitmapManager()); 570 new TestSharedBitmapManager());
558 scoped_ptr<LayerTreeHostImpl> host_impl = 571 scoped_ptr<LayerTreeHostImpl> host_impl =
559 LayerTreeHostImpl::Create(settings, NULL, &proxy, &stats_instrumentation, 572 LayerTreeHostImpl::Create(settings, NULL, &proxy, &stats_instrumentation,
560 shared_bitmap_manager.get(), NULL, NULL, 0); 573 shared_bitmap_manager.get(), NULL, NULL, 0);
561 574
562 scoped_refptr<Layer> layer_tree_root = Layer::Create(); 575 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings_);
563 host_->SetRootLayer(layer_tree_root); 576 host_->SetRootLayer(layer_tree_root);
564 577
565 layer_tree_root->SetLayerAnimationControllerForTest( 578 layer_tree_root->SetLayerAnimationControllerForTest(
566 FakeLayerAnimationController::Create()); 579 FakeLayerAnimationController::Create());
567 580
568 EXPECT_FALSE(static_cast<FakeLayerAnimationController*>( 581 EXPECT_FALSE(static_cast<FakeLayerAnimationController*>(
569 layer_tree_root->layer_animation_controller())->SynchronizedAnimations()); 582 layer_tree_root->layer_animation_controller())->SynchronizedAnimations());
570 583
571 scoped_ptr<LayerImpl> layer_impl_tree_root = 584 scoped_ptr<LayerImpl> layer_impl_tree_root =
572 TreeSynchronizer::SynchronizeTrees( 585 TreeSynchronizer::SynchronizeTrees(
(...skipping 13 matching lines...) Expand all
586 LayerTreeSettings settings; 599 LayerTreeSettings settings;
587 FakeProxy proxy; 600 FakeProxy proxy;
588 DebugScopedSetImplThread impl(&proxy); 601 DebugScopedSetImplThread impl(&proxy);
589 FakeRenderingStatsInstrumentation stats_instrumentation; 602 FakeRenderingStatsInstrumentation stats_instrumentation;
590 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 603 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
591 new TestSharedBitmapManager()); 604 new TestSharedBitmapManager());
592 scoped_ptr<LayerTreeHostImpl> host_impl = 605 scoped_ptr<LayerTreeHostImpl> host_impl =
593 LayerTreeHostImpl::Create(settings, NULL, &proxy, &stats_instrumentation, 606 LayerTreeHostImpl::Create(settings, NULL, &proxy, &stats_instrumentation,
594 shared_bitmap_manager.get(), NULL, NULL, 0); 607 shared_bitmap_manager.get(), NULL, NULL, 0);
595 608
596 scoped_refptr<Layer> layer_tree_root = Layer::Create(); 609 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings_);
597 scoped_refptr<Layer> scroll_parent = Layer::Create(); 610 scoped_refptr<Layer> scroll_parent = Layer::Create(layer_settings_);
598 layer_tree_root->AddChild(scroll_parent); 611 layer_tree_root->AddChild(scroll_parent);
599 layer_tree_root->AddChild(Layer::Create()); 612 layer_tree_root->AddChild(Layer::Create(layer_settings_));
600 layer_tree_root->AddChild(Layer::Create()); 613 layer_tree_root->AddChild(Layer::Create(layer_settings_));
601 614
602 host_->SetRootLayer(layer_tree_root); 615 host_->SetRootLayer(layer_tree_root);
603 616
604 // First child is the second and third child's scroll parent. 617 // First child is the second and third child's scroll parent.
605 layer_tree_root->children()[1]->SetScrollParent(scroll_parent.get()); 618 layer_tree_root->children()[1]->SetScrollParent(scroll_parent.get());
606 layer_tree_root->children()[2]->SetScrollParent(scroll_parent.get()); 619 layer_tree_root->children()[2]->SetScrollParent(scroll_parent.get());
607 620
608 scoped_ptr<LayerImpl> layer_impl_tree_root = 621 scoped_ptr<LayerImpl> layer_impl_tree_root =
609 TreeSynchronizer::SynchronizeTrees( 622 TreeSynchronizer::SynchronizeTrees(
610 layer_tree_root.get(), nullptr, host_impl->active_tree()); 623 layer_tree_root.get(), nullptr, host_impl->active_tree());
(...skipping 15 matching lines...) Expand all
626 TreeSynchronizer::PushProperties(layer_tree_root.get(), 639 TreeSynchronizer::PushProperties(layer_tree_root.get(),
627 layer_impl_tree_root.get()); 640 layer_impl_tree_root.get());
628 { 641 {
629 SCOPED_TRACE("case two"); 642 SCOPED_TRACE("case two");
630 ExpectTreesAreIdentical(layer_tree_root.get(), 643 ExpectTreesAreIdentical(layer_tree_root.get(),
631 layer_impl_tree_root.get(), 644 layer_impl_tree_root.get(),
632 host_impl->active_tree()); 645 host_impl->active_tree());
633 } 646 }
634 647
635 // Add an additional scroll layer. 648 // Add an additional scroll layer.
636 scoped_refptr<Layer> additional_scroll_child = Layer::Create(); 649 scoped_refptr<Layer> additional_scroll_child = Layer::Create(layer_settings_);
637 layer_tree_root->AddChild(additional_scroll_child); 650 layer_tree_root->AddChild(additional_scroll_child);
638 additional_scroll_child->SetScrollParent(scroll_parent.get()); 651 additional_scroll_child->SetScrollParent(scroll_parent.get());
639 layer_impl_tree_root = 652 layer_impl_tree_root =
640 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), 653 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(),
641 layer_impl_tree_root.Pass(), 654 layer_impl_tree_root.Pass(),
642 host_impl->active_tree()); 655 host_impl->active_tree());
643 TreeSynchronizer::PushProperties(layer_tree_root.get(), 656 TreeSynchronizer::PushProperties(layer_tree_root.get(),
644 layer_impl_tree_root.get()); 657 layer_impl_tree_root.get());
645 { 658 {
646 SCOPED_TRACE("case three"); 659 SCOPED_TRACE("case three");
647 ExpectTreesAreIdentical(layer_tree_root.get(), 660 ExpectTreesAreIdentical(layer_tree_root.get(),
648 layer_impl_tree_root.get(), 661 layer_impl_tree_root.get(),
649 host_impl->active_tree()); 662 host_impl->active_tree());
650 } 663 }
651 } 664 }
652 665
653 TEST_F(TreeSynchronizerTest, SynchronizeClipParent) { 666 TEST_F(TreeSynchronizerTest, SynchronizeClipParent) {
654 LayerTreeSettings settings; 667 LayerTreeSettings settings;
655 FakeProxy proxy; 668 FakeProxy proxy;
656 DebugScopedSetImplThread impl(&proxy); 669 DebugScopedSetImplThread impl(&proxy);
657 FakeRenderingStatsInstrumentation stats_instrumentation; 670 FakeRenderingStatsInstrumentation stats_instrumentation;
658 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 671 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
659 new TestSharedBitmapManager()); 672 new TestSharedBitmapManager());
660 scoped_ptr<LayerTreeHostImpl> host_impl = 673 scoped_ptr<LayerTreeHostImpl> host_impl =
661 LayerTreeHostImpl::Create(settings, NULL, &proxy, &stats_instrumentation, 674 LayerTreeHostImpl::Create(settings, NULL, &proxy, &stats_instrumentation,
662 shared_bitmap_manager.get(), NULL, NULL, 0); 675 shared_bitmap_manager.get(), NULL, NULL, 0);
663 676
664 scoped_refptr<Layer> layer_tree_root = Layer::Create(); 677 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings_);
665 scoped_refptr<Layer> clip_parent = Layer::Create(); 678 scoped_refptr<Layer> clip_parent = Layer::Create(layer_settings_);
666 scoped_refptr<Layer> intervening = Layer::Create(); 679 scoped_refptr<Layer> intervening = Layer::Create(layer_settings_);
667 scoped_refptr<Layer> clip_child1 = Layer::Create(); 680 scoped_refptr<Layer> clip_child1 = Layer::Create(layer_settings_);
668 scoped_refptr<Layer> clip_child2 = Layer::Create(); 681 scoped_refptr<Layer> clip_child2 = Layer::Create(layer_settings_);
669 layer_tree_root->AddChild(clip_parent); 682 layer_tree_root->AddChild(clip_parent);
670 clip_parent->AddChild(intervening); 683 clip_parent->AddChild(intervening);
671 intervening->AddChild(clip_child1); 684 intervening->AddChild(clip_child1);
672 intervening->AddChild(clip_child2); 685 intervening->AddChild(clip_child2);
673 686
674 host_->SetRootLayer(layer_tree_root); 687 host_->SetRootLayer(layer_tree_root);
675 688
676 // First child is the second and third child's scroll parent. 689 // First child is the second and third child's scroll parent.
677 clip_child1->SetClipParent(clip_parent.get()); 690 clip_child1->SetClipParent(clip_parent.get());
678 clip_child2->SetClipParent(clip_parent.get()); 691 clip_child2->SetClipParent(clip_parent.get());
(...skipping 15 matching lines...) Expand all
694 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), 707 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(),
695 layer_impl_tree_root.Pass(), 708 layer_impl_tree_root.Pass(),
696 host_impl->active_tree()); 709 host_impl->active_tree());
697 TreeSynchronizer::PushProperties(layer_tree_root.get(), 710 TreeSynchronizer::PushProperties(layer_tree_root.get(),
698 layer_impl_tree_root.get()); 711 layer_impl_tree_root.get());
699 ExpectTreesAreIdentical(layer_tree_root.get(), 712 ExpectTreesAreIdentical(layer_tree_root.get(),
700 layer_impl_tree_root.get(), 713 layer_impl_tree_root.get(),
701 host_impl->active_tree()); 714 host_impl->active_tree());
702 715
703 // Add an additional clip child. 716 // Add an additional clip child.
704 scoped_refptr<Layer> additional_clip_child = Layer::Create(); 717 scoped_refptr<Layer> additional_clip_child = Layer::Create(layer_settings_);
705 intervening->AddChild(additional_clip_child); 718 intervening->AddChild(additional_clip_child);
706 additional_clip_child->SetClipParent(clip_parent.get()); 719 additional_clip_child->SetClipParent(clip_parent.get());
707 layer_impl_tree_root = 720 layer_impl_tree_root =
708 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), 721 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(),
709 layer_impl_tree_root.Pass(), 722 layer_impl_tree_root.Pass(),
710 host_impl->active_tree()); 723 host_impl->active_tree());
711 TreeSynchronizer::PushProperties(layer_tree_root.get(), 724 TreeSynchronizer::PushProperties(layer_tree_root.get(),
712 layer_impl_tree_root.get()); 725 layer_impl_tree_root.get());
713 ExpectTreesAreIdentical(layer_tree_root.get(), 726 ExpectTreesAreIdentical(layer_tree_root.get(),
714 layer_impl_tree_root.get(), 727 layer_impl_tree_root.get(),
(...skipping 13 matching lines...) Expand all
728 host_impl->active_tree()); 741 host_impl->active_tree());
729 742
730 // The clip children should have been unhooked. 743 // The clip children should have been unhooked.
731 EXPECT_EQ(2u, intervening->children().size()); 744 EXPECT_EQ(2u, intervening->children().size());
732 EXPECT_FALSE(clip_child2->clip_parent()); 745 EXPECT_FALSE(clip_child2->clip_parent());
733 EXPECT_FALSE(additional_clip_child->clip_parent()); 746 EXPECT_FALSE(additional_clip_child->clip_parent());
734 } 747 }
735 748
736 } // namespace 749 } // namespace
737 } // namespace cc 750 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/occlusion_tracker_unittest.cc ('k') | chrome/browser/android/compositor/compositor_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698