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

Unified Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 377793003: Consider occluded tiles during eviction with occluded as Tile property. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
« no previous file with comments | « no previous file | cc/resources/picture_layer_tiling.cc » ('j') | cc/resources/picture_layer_tiling.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2258655dbf6f678b4858290e86c6d30abbfed1d8..c0572f0fd3dbc4265334c4b98eddadb23dc1a924 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -3204,5 +3204,133 @@ TEST_F(OcclusionTrackingPictureLayerImplTest, DifferentOcclusionOnTrees) {
}
}
}
+
+TEST_F(OcclusionTrackingPictureLayerImplTest,
+ OccludedTilesConsideredDuringEviction) {
+ gfx::Size tile_size(102, 102);
+ gfx::Size layer_bounds(1000, 1000);
+ gfx::Size viewport_size(500, 500);
+ gfx::Point occluding_layer_position(310, 0);
+
+ scoped_refptr<FakePicturePileImpl> pending_pile =
+ FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
+ SetupPendingTree(pending_pile);
+ pending_layer_->set_fixed_tile_size(tile_size);
+
+ ASSERT_TRUE(pending_layer_->CanHaveTilings());
+
+ float low_res_factor = host_impl_.settings().low_res_contents_scale_factor;
+
+ std::vector<PictureLayerTiling*> tilings;
+ tilings.push_back(pending_layer_->AddTiling(low_res_factor));
+ tilings.push_back(pending_layer_->AddTiling(0.3f));
+ tilings.push_back(pending_layer_->AddTiling(0.7f));
+ tilings.push_back(pending_layer_->AddTiling(1.0f));
+ tilings.push_back(pending_layer_->AddTiling(2.0f));
+
+ pending_layer_->AddChild(LayerImpl::Create(host_impl_.pending_tree(), 1));
+ LayerImpl* layer1 = pending_layer_->children()[0];
+ layer1->SetBounds(layer_bounds);
+ layer1->SetContentBounds(layer_bounds);
+ layer1->SetDrawsContent(true);
+
+ // No occlusion.
+ layer1->SetContentsOpaque(false);
+
+ host_impl_.SetViewportSize(viewport_size);
+ host_impl_.pending_tree()->UpdateDrawProperties();
+
+ std::vector<Tile*> all_tiles;
+ for (std::vector<PictureLayerTiling*>::iterator tiling_iterator =
+ tilings.begin();
+ tiling_iterator != tilings.end();
+ ++tiling_iterator) {
+ std::vector<Tile*> tiles = (*tiling_iterator)->AllTilesForTesting();
+ std::copy(tiles.begin(), tiles.end(), std::back_inserter(all_tiles));
+ }
+
+ host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles);
+
+ int occluded_tile_count = 0;
+ Tile* last_tile = NULL;
+ for (PictureLayerImpl::LayerEvictionTileIterator it =
+ PictureLayerImpl::LayerEvictionTileIterator(
+ pending_layer_, NEW_CONTENT_TAKES_PRIORITY);
danakj 2014/07/09 17:38:40 what about the SAME_PRIORITY_FOR_BOTH_TREES case?
jbedley 2014/07/11 00:19:38 I added all 6 cases to the test (pending or active
+ it;
+ ++it) {
+ Tile* tile = *it;
+ if (!last_tile)
+ last_tile = tile;
+
+ EXPECT_TRUE(tile);
+
+ if (tile->is_occluded(PENDING_TREE)) {
+ occluded_tile_count++;
+ // Occluded tiles should be evicted first within each tiling.
+ if (!last_tile->is_occluded(PENDING_TREE))
+ EXPECT_NE(tile->contents_scale(), last_tile->contents_scale());
+ }
+
+ last_tile = tile;
+ }
+ EXPECT_EQ(occluded_tile_count, 0);
+
+ // Partial occlusion.
+ layer1->SetContentsOpaque(true);
+ layer1->SetPosition(occluding_layer_position);
+
+ host_impl_.pending_tree()->UpdateDrawProperties();
+
+ occluded_tile_count = 0;
+ last_tile = NULL;
+ for (PictureLayerImpl::LayerEvictionTileIterator it =
+ PictureLayerImpl::LayerEvictionTileIterator(
+ pending_layer_, NEW_CONTENT_TAKES_PRIORITY);
+ it;
+ ++it) {
+ Tile* tile = *it;
+ if (!last_tile)
+ last_tile = tile;
+
+ EXPECT_TRUE(tile);
+
+ if (tile->is_occluded(PENDING_TREE)) {
danakj 2014/07/09 17:38:40 Hm, this verifies that we don't evict an occluded
jbedley 2014/07/11 00:19:38 Done.
+ occluded_tile_count++;
+ if (!last_tile->is_occluded(PENDING_TREE))
+ EXPECT_NE(tile->contents_scale(), last_tile->contents_scale());
+ }
+
+ last_tile = tile;
+ }
+ EXPECT_EQ(occluded_tile_count, 43);
+
+ // Back to no occlusion.
+ layer1->SetContentsOpaque(false);
+
+ host_impl_.pending_tree()->UpdateDrawProperties();
+
+ occluded_tile_count = 0;
+ last_tile = NULL;
+ for (PictureLayerImpl::LayerEvictionTileIterator it =
+ PictureLayerImpl::LayerEvictionTileIterator(
+ pending_layer_, NEW_CONTENT_TAKES_PRIORITY);
+ it;
+ ++it) {
+ Tile* tile = *it;
+ if (!last_tile)
+ last_tile = tile;
+
+ EXPECT_TRUE(tile);
+
+ if (tile->is_occluded(PENDING_TREE)) {
+ occluded_tile_count++;
+ if (!last_tile->is_occluded(PENDING_TREE))
+ EXPECT_NE(tile->contents_scale(), last_tile->contents_scale());
+ }
+
+ last_tile = tile;
+ }
+ EXPECT_EQ(occluded_tile_count, 0);
+}
} // namespace
} // namespace cc
« no previous file with comments | « no previous file | cc/resources/picture_layer_tiling.cc » ('j') | cc/resources/picture_layer_tiling.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698