| Index: cc/layers/picture_layer_impl_unittest.cc
|
| diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
|
| index 401df7e2710c3c5a76c202a9331ac12463fe8245..f0495d705ed7a63e2cf17c8cb32140b392946042 100644
|
| --- a/cc/layers/picture_layer_impl_unittest.cc
|
| +++ b/cc/layers/picture_layer_impl_unittest.cc
|
| @@ -80,6 +80,16 @@ class PictureLayerImplTest : public testing::Test {
|
| SetupTrees(pending_pile, active_pile);
|
| }
|
|
|
| + void SetupDefaultPendingTree(const gfx::Size& layer_bounds) {
|
| + gfx::Size tile_size(100, 100);
|
| +
|
| + scoped_refptr<FakePicturePileImpl> pending_pile =
|
| + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
|
| +
|
| + SetupPendingTree(pending_pile);
|
| + host_impl_.pending_tree()->SetPageScaleFactorAndLimits(1.f, 0.25f, 100.f);
|
| + }
|
| +
|
| void ActivateTree() {
|
| host_impl_.ActivateSyncTree();
|
| CHECK(!host_impl_.pending_tree());
|
| @@ -1490,40 +1500,128 @@ TEST_F(PictureLayerImplTest, ActivateUninitializedLayer) {
|
| EXPECT_FALSE(active_layer_->needs_post_commit_initialization());
|
| }
|
|
|
| -TEST_F(PictureLayerImplTest, RemoveInvalidTilesOnActivation) {
|
| +TEST_F(PictureLayerImplTest, ShareTilesOnSync) {
|
| + SetupDefaultTrees(gfx::Size(1500, 1500));
|
| + AddDefaultTilingsWithInvalidation(gfx::Rect());
|
| +
|
| + host_impl_.ActivateSyncTree();
|
| + host_impl_.CreatePendingTree();
|
| + active_layer_ = static_cast<FakePictureLayerImpl*>(
|
| + host_impl_.active_tree()->LayerById(id_));
|
| +
|
| + // Force the active tree to sync to the pending tree "post-commit".
|
| + pending_layer_->DoPostCommitInitializationIfNeeded();
|
| +
|
| + // Both invalidations should drop tiles from the pending tree.
|
| + EXPECT_EQ(3u, active_layer_->num_tilings());
|
| + EXPECT_EQ(3u, pending_layer_->num_tilings());
|
| + for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
|
| + PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i);
|
| + PictureLayerTiling* pending_tiling =
|
| + pending_layer_->tilings()->tiling_at(i);
|
| +
|
| + ASSERT_TRUE(active_tiling);
|
| + ASSERT_TRUE(pending_tiling);
|
| +
|
| + EXPECT_TRUE(active_tiling->TileAt(0, 0));
|
| + EXPECT_TRUE(active_tiling->TileAt(1, 0));
|
| + EXPECT_TRUE(active_tiling->TileAt(0, 1));
|
| + EXPECT_TRUE(active_tiling->TileAt(1, 1));
|
| +
|
| + EXPECT_TRUE(pending_tiling->TileAt(0, 0));
|
| + EXPECT_TRUE(pending_tiling->TileAt(1, 0));
|
| + EXPECT_TRUE(pending_tiling->TileAt(0, 1));
|
| + EXPECT_TRUE(pending_tiling->TileAt(1, 1));
|
| +
|
| + EXPECT_EQ(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0));
|
| + EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0));
|
| + EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1));
|
| + EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1));
|
| + }
|
| +}
|
| +
|
| +TEST_F(PictureLayerImplTest, RemoveInvalidActiveTreeTilesOnSync) {
|
| SetupDefaultTrees(gfx::Size(1500, 1500));
|
| AddDefaultTilingsWithInvalidation(gfx::Rect(0, 0, 1, 1));
|
|
|
| - FakePictureLayerImpl* recycled_layer = pending_layer_;
|
| + // This activates the 0,0,1,1 invalidation.
|
| host_impl_.ActivateSyncTree();
|
| + host_impl_.CreatePendingTree();
|
| + active_layer_ = static_cast<FakePictureLayerImpl*>(
|
| + host_impl_.active_tree()->LayerById(id_));
|
| +
|
| + // Force the active tree to sync to the pending tree "post-commit".
|
| + pending_layer_->DoPostCommitInitializationIfNeeded();
|
| +
|
| + // Both invalidations should drop tiles from the pending tree.
|
| + EXPECT_EQ(3u, active_layer_->num_tilings());
|
| + EXPECT_EQ(3u, pending_layer_->num_tilings());
|
| + for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
|
| + PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i);
|
| + PictureLayerTiling* pending_tiling =
|
| + pending_layer_->tilings()->tiling_at(i);
|
| +
|
| + ASSERT_TRUE(active_tiling);
|
| + ASSERT_TRUE(pending_tiling);
|
| +
|
| + EXPECT_TRUE(active_tiling->TileAt(0, 0));
|
| + EXPECT_TRUE(active_tiling->TileAt(1, 0));
|
| + EXPECT_TRUE(active_tiling->TileAt(0, 1));
|
| + EXPECT_TRUE(active_tiling->TileAt(1, 1));
|
| +
|
| + EXPECT_TRUE(pending_tiling->TileAt(0, 0));
|
| + EXPECT_TRUE(pending_tiling->TileAt(1, 0));
|
| + EXPECT_TRUE(pending_tiling->TileAt(0, 1));
|
| + EXPECT_TRUE(pending_tiling->TileAt(1, 1));
|
| +
|
| + EXPECT_NE(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0));
|
| + EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0));
|
| + EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1));
|
| + EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1));
|
| + }
|
| +}
|
| +
|
| +TEST_F(PictureLayerImplTest, RemoveInvalidPendingTreeTilesOnSync) {
|
| + SetupDefaultTrees(gfx::Size(1500, 1500));
|
| + AddDefaultTilingsWithInvalidation(gfx::Rect());
|
|
|
| + host_impl_.ActivateSyncTree();
|
| + host_impl_.CreatePendingTree();
|
| active_layer_ = static_cast<FakePictureLayerImpl*>(
|
| host_impl_.active_tree()->LayerById(id_));
|
|
|
| + // Set some invalidation on the pending tree "during commit". We should
|
| + // replace raster tiles that touch this.
|
| + pending_layer_->set_invalidation(gfx::Rect(1, 1));
|
| +
|
| + // Force the active tree to sync to the pending tree "post-commit".
|
| + pending_layer_->DoPostCommitInitializationIfNeeded();
|
| +
|
| + // Both invalidations should drop tiles from the pending tree.
|
| EXPECT_EQ(3u, active_layer_->num_tilings());
|
| - EXPECT_EQ(3u, recycled_layer->num_tilings());
|
| - EXPECT_FALSE(host_impl_.pending_tree());
|
| + EXPECT_EQ(3u, pending_layer_->num_tilings());
|
| for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
|
| PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i);
|
| - PictureLayerTiling* recycled_tiling =
|
| - recycled_layer->tilings()->tiling_at(i);
|
| + PictureLayerTiling* pending_tiling =
|
| + pending_layer_->tilings()->tiling_at(i);
|
|
|
| ASSERT_TRUE(active_tiling);
|
| - ASSERT_TRUE(recycled_tiling);
|
| + ASSERT_TRUE(pending_tiling);
|
|
|
| EXPECT_TRUE(active_tiling->TileAt(0, 0));
|
| EXPECT_TRUE(active_tiling->TileAt(1, 0));
|
| EXPECT_TRUE(active_tiling->TileAt(0, 1));
|
| EXPECT_TRUE(active_tiling->TileAt(1, 1));
|
|
|
| - EXPECT_FALSE(recycled_tiling->TileAt(0, 0));
|
| - EXPECT_TRUE(recycled_tiling->TileAt(1, 0));
|
| - EXPECT_TRUE(recycled_tiling->TileAt(0, 1));
|
| - EXPECT_TRUE(recycled_tiling->TileAt(1, 1));
|
| + EXPECT_TRUE(pending_tiling->TileAt(0, 0));
|
| + EXPECT_TRUE(pending_tiling->TileAt(1, 0));
|
| + EXPECT_TRUE(pending_tiling->TileAt(0, 1));
|
| + EXPECT_TRUE(pending_tiling->TileAt(1, 1));
|
|
|
| - EXPECT_EQ(active_tiling->TileAt(1, 0), recycled_tiling->TileAt(1, 0));
|
| - EXPECT_EQ(active_tiling->TileAt(0, 1), recycled_tiling->TileAt(0, 1));
|
| - EXPECT_EQ(active_tiling->TileAt(1, 1), recycled_tiling->TileAt(1, 1));
|
| + EXPECT_NE(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0));
|
| + EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0));
|
| + EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1));
|
| + EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1));
|
| }
|
| }
|
|
|
|
|