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)); |
} |
} |