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

Unified Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 375923005: cc: Explicitly invalidate all dropped recordings on the main thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: invalid-resize: . Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
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));
}
}

Powered by Google App Engine
This is Rietveld 408576698