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_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
| 7 #include <algorithm> |
7 #include <cmath> | 8 #include <cmath> |
8 | 9 |
9 #include "base/bind.h" | 10 #include "base/bind.h" |
10 #include "base/command_line.h" | 11 #include "base/command_line.h" |
11 #include "base/containers/hash_tables.h" | 12 #include "base/containers/hash_tables.h" |
12 #include "base/containers/scoped_ptr_hash_map.h" | 13 #include "base/containers/scoped_ptr_hash_map.h" |
13 #include "cc/animation/scrollbar_animation_controller_thinning.h" | 14 #include "cc/animation/scrollbar_animation_controller_thinning.h" |
14 #include "cc/base/latency_info_swap_promise.h" | 15 #include "cc/base/latency_info_swap_promise.h" |
15 #include "cc/base/math_util.h" | 16 #include "cc/base/math_util.h" |
16 #include "cc/input/page_scale_animation.h" | 17 #include "cc/input/page_scale_animation.h" |
(...skipping 7419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7436 host_impl_->Animate(start_time + base::TimeDelta::FromMilliseconds(250)); | 7437 host_impl_->Animate(start_time + base::TimeDelta::FromMilliseconds(250)); |
7437 host_impl_->UpdateAnimationState(true); | 7438 host_impl_->UpdateAnimationState(true); |
7438 | 7439 |
7439 EXPECT_VECTOR_EQ(gfx::ScrollOffset(0, 100), | 7440 EXPECT_VECTOR_EQ(gfx::ScrollOffset(0, 100), |
7440 scrolling_layer->TotalScrollOffset()); | 7441 scrolling_layer->TotalScrollOffset()); |
7441 EXPECT_EQ(NULL, host_impl_->CurrentlyScrollingLayer()); | 7442 EXPECT_EQ(NULL, host_impl_->CurrentlyScrollingLayer()); |
7442 } | 7443 } |
7443 | 7444 |
7444 TEST_F(LayerTreeHostImplTest, GetPictureLayerImplPairs) { | 7445 TEST_F(LayerTreeHostImplTest, GetPictureLayerImplPairs) { |
7445 host_impl_->CreatePendingTree(); | 7446 host_impl_->CreatePendingTree(); |
7446 host_impl_->ActivateSyncTree(); | 7447 host_impl_->pending_tree()->SetRootLayer( |
7447 host_impl_->CreatePendingTree(); | 7448 PictureLayerImpl::Create(host_impl_->pending_tree(), 10)); |
7448 | 7449 |
7449 LayerTreeImpl* active_tree = host_impl_->active_tree(); | |
7450 LayerTreeImpl* pending_tree = host_impl_->pending_tree(); | 7450 LayerTreeImpl* pending_tree = host_impl_->pending_tree(); |
7451 EXPECT_NE(active_tree, pending_tree); | 7451 LayerImpl* pending_layer = pending_tree->root_layer(); |
7452 | |
7453 scoped_ptr<FakePictureLayerImpl> active_layer = | |
7454 FakePictureLayerImpl::Create(active_tree, 10); | |
7455 scoped_ptr<FakePictureLayerImpl> pending_layer = | |
7456 FakePictureLayerImpl::Create(pending_tree, 10); | |
7457 | 7452 |
7458 std::vector<PictureLayerImpl::Pair> layer_pairs; | 7453 std::vector<PictureLayerImpl::Pair> layer_pairs; |
7459 host_impl_->GetPictureLayerImplPairs(&layer_pairs); | 7454 host_impl_->GetPictureLayerImplPairs(&layer_pairs); |
| 7455 EXPECT_EQ(1u, layer_pairs.size()); |
| 7456 EXPECT_EQ(pending_layer, layer_pairs[0].pending); |
| 7457 EXPECT_EQ(nullptr, layer_pairs[0].active); |
7460 | 7458 |
7461 EXPECT_EQ(2u, layer_pairs.size()); | 7459 host_impl_->ActivateSyncTree(); |
7462 if (layer_pairs[0].active) { | |
7463 EXPECT_EQ(active_layer.get(), layer_pairs[0].active); | |
7464 EXPECT_EQ(NULL, layer_pairs[0].pending); | |
7465 } else { | |
7466 EXPECT_EQ(pending_layer.get(), layer_pairs[0].pending); | |
7467 EXPECT_EQ(NULL, layer_pairs[0].active); | |
7468 } | |
7469 | 7460 |
7470 if (layer_pairs[1].active) { | 7461 LayerTreeImpl* active_tree = host_impl_->active_tree(); |
7471 EXPECT_EQ(active_layer.get(), layer_pairs[1].active); | 7462 LayerImpl* active_layer = active_tree->root_layer(); |
7472 EXPECT_EQ(NULL, layer_pairs[1].pending); | 7463 EXPECT_NE(active_tree, pending_tree); |
7473 } else { | 7464 EXPECT_NE(active_layer, pending_layer); |
7474 EXPECT_EQ(pending_layer.get(), layer_pairs[1].pending); | 7465 EXPECT_NE(nullptr, active_tree); |
7475 EXPECT_EQ(NULL, layer_pairs[1].active); | 7466 EXPECT_NE(nullptr, active_layer); |
7476 } | |
7477 | 7467 |
7478 active_layer->set_twin_layer(pending_layer.get()); | 7468 host_impl_->CreatePendingTree(); |
7479 pending_layer->set_twin_layer(active_layer.get()); | |
7480 | 7469 |
7481 layer_pairs.clear(); | 7470 layer_pairs.clear(); |
7482 host_impl_->GetPictureLayerImplPairs(&layer_pairs); | 7471 host_impl_->GetPictureLayerImplPairs(&layer_pairs); |
7483 EXPECT_EQ(1u, layer_pairs.size()); | 7472 EXPECT_EQ(1u, layer_pairs.size()); |
| 7473 EXPECT_EQ(active_layer, layer_pairs[0].active); |
| 7474 EXPECT_EQ(pending_layer, layer_pairs[0].pending); |
7484 | 7475 |
7485 EXPECT_EQ(active_layer.get(), layer_pairs[0].active); | 7476 // Activate, the active layer has no twin now. |
7486 EXPECT_EQ(pending_layer.get(), layer_pairs[0].pending); | 7477 host_impl_->ActivateSyncTree(); |
| 7478 |
| 7479 layer_pairs.clear(); |
| 7480 host_impl_->GetPictureLayerImplPairs(&layer_pairs); |
| 7481 EXPECT_EQ(1u, layer_pairs.size()); |
| 7482 EXPECT_EQ(active_layer, layer_pairs[0].active); |
| 7483 EXPECT_EQ(nullptr, layer_pairs[0].pending); |
| 7484 |
| 7485 // Create another layer in the pending tree that's not in the active tree. We |
| 7486 // should get two pairs. |
| 7487 host_impl_->CreatePendingTree(); |
| 7488 host_impl_->pending_tree()->root_layer()->AddChild( |
| 7489 PictureLayerImpl::Create(host_impl_->pending_tree(), 11)); |
| 7490 |
| 7491 LayerImpl* new_pending_layer = pending_tree->root_layer()->children()[0]; |
| 7492 |
| 7493 layer_pairs.clear(); |
| 7494 host_impl_->GetPictureLayerImplPairs(&layer_pairs); |
| 7495 EXPECT_EQ(2u, layer_pairs.size()); |
| 7496 |
| 7497 // The pair ordering is flaky, so make it consistent. |
| 7498 if (layer_pairs[0].active != active_layer) |
| 7499 std::swap(layer_pairs[0], layer_pairs[1]); |
| 7500 |
| 7501 EXPECT_EQ(active_layer, layer_pairs[0].active); |
| 7502 EXPECT_EQ(pending_layer, layer_pairs[0].pending); |
| 7503 EXPECT_EQ(new_pending_layer, layer_pairs[1].pending); |
| 7504 EXPECT_EQ(nullptr, layer_pairs[1].active); |
7487 } | 7505 } |
7488 | 7506 |
7489 TEST_F(LayerTreeHostImplTest, DidBecomeActive) { | 7507 TEST_F(LayerTreeHostImplTest, DidBecomeActive) { |
7490 host_impl_->CreatePendingTree(); | 7508 host_impl_->CreatePendingTree(); |
7491 host_impl_->ActivateSyncTree(); | 7509 host_impl_->ActivateSyncTree(); |
7492 host_impl_->CreatePendingTree(); | 7510 host_impl_->CreatePendingTree(); |
7493 | 7511 |
7494 LayerTreeImpl* pending_tree = host_impl_->pending_tree(); | 7512 LayerTreeImpl* pending_tree = host_impl_->pending_tree(); |
7495 | 7513 |
7496 scoped_ptr<FakePictureLayerImpl> pending_layer = | 7514 scoped_ptr<FakePictureLayerImpl> pending_layer = |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7552 // surface. | 7570 // surface. |
7553 EXPECT_EQ(0, num_lost_surfaces_); | 7571 EXPECT_EQ(0, num_lost_surfaces_); |
7554 host_impl_->DidLoseOutputSurface(); | 7572 host_impl_->DidLoseOutputSurface(); |
7555 EXPECT_EQ(1, num_lost_surfaces_); | 7573 EXPECT_EQ(1, num_lost_surfaces_); |
7556 host_impl_->DidLoseOutputSurface(); | 7574 host_impl_->DidLoseOutputSurface(); |
7557 EXPECT_LE(1, num_lost_surfaces_); | 7575 EXPECT_LE(1, num_lost_surfaces_); |
7558 } | 7576 } |
7559 | 7577 |
7560 } // namespace | 7578 } // namespace |
7561 } // namespace cc | 7579 } // namespace cc |
OLD | NEW |