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

Unified Diff: cc/resources/tile_manager_unittest.cc

Issue 690063002: cc: Do not ignore layers without valid priorities during eviction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase: CreateWith{Pile => RasterSource} Created 6 years, 1 month 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 | « cc/resources/picture_layer_tiling.cc ('k') | cc/test/fake_picture_layer_tiling_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/tile_manager_unittest.cc
diff --git a/cc/resources/tile_manager_unittest.cc b/cc/resources/tile_manager_unittest.cc
index 4a4c8b4f1c1b33669f9348c6871a2fec10a8802e..a25367201771d0837ceb54feffc1826dfa29fcaf 100644
--- a/cc/resources/tile_manager_unittest.cc
+++ b/cc/resources/tile_manager_unittest.cc
@@ -669,6 +669,104 @@ TEST_F(TileManagerTilePriorityQueueTest,
EXPECT_EQ(expected_occluded_count, occluded_count);
}
+TEST_F(TileManagerTilePriorityQueueTest,
+ EvictionTilePriorityQueueWithTransparentLayer) {
+ gfx::Size tile_size(102, 102);
+ gfx::Size layer_bounds(1000, 1000);
+
+ scoped_refptr<FakePicturePileImpl> pending_pile =
+ FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
+ SetupPendingTree(pending_pile);
+ pending_layer_->CreateDefaultTilingsAndTiles();
+
+ scoped_ptr<FakePictureLayerImpl> pending_child =
+ FakePictureLayerImpl::CreateWithRasterSource(host_impl_.pending_tree(), 2,
+ pending_pile);
+ pending_layer_->AddChild(pending_child.Pass());
+
+ // Create a fully transparent child layer so that its tile priorities are not
+ // considered to be valid.
+ FakePictureLayerImpl* pending_child_layer =
+ static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]);
+ pending_child_layer->SetDrawsContent(true);
+ pending_child_layer->CreateDefaultTilingsAndTiles();
+ pending_child_layer->SetOpacity(0.0);
+ pending_child_layer->layer_tree_impl()->UpdateDrawProperties();
+ pending_child_layer->DoPostCommitInitializationIfNeeded();
+
+ // Renew all of the tile priorities.
+ gfx::Rect viewport(layer_bounds);
+ pending_layer_->HighResTiling()->ComputeTilePriorityRects(
+ PENDING_TREE, viewport, 1.0f, 1.0, Occlusion());
+ pending_layer_->LowResTiling()->ComputeTilePriorityRects(
+ PENDING_TREE, viewport, 1.0f, 1.0, Occlusion());
+ pending_child_layer->HighResTiling()->ComputeTilePriorityRects(
+ PENDING_TREE, viewport, 1.0f, 1.0, Occlusion());
+ pending_child_layer->LowResTiling()->ComputeTilePriorityRects(
+ PENDING_TREE, viewport, 1.0f, 1.0, Occlusion());
+
+ // Populate all tiles directly from the tilings.
+ std::set<Tile*> all_pending_tiles;
+ std::vector<Tile*> pending_high_res_tiles =
+ pending_layer_->HighResTiling()->AllTilesForTesting();
+ all_pending_tiles.insert(pending_high_res_tiles.begin(),
+ pending_high_res_tiles.end());
+ EXPECT_EQ(16u, pending_high_res_tiles.size());
+
+ std::vector<Tile*> pending_low_res_tiles =
+ pending_layer_->LowResTiling()->AllTilesForTesting();
+ all_pending_tiles.insert(pending_low_res_tiles.begin(),
+ pending_low_res_tiles.end());
+ EXPECT_EQ(1u, pending_low_res_tiles.size());
+
+ std::set<Tile*> all_pending_child_tiles;
+ std::vector<Tile*> pending_child_high_res_tiles =
+ pending_child_layer->HighResTiling()->AllTilesForTesting();
+ all_pending_child_tiles.insert(pending_child_high_res_tiles.begin(),
+ pending_child_high_res_tiles.end());
+ EXPECT_EQ(16u, pending_child_high_res_tiles.size());
+
+ std::vector<Tile*> pending_child_low_res_tiles =
+ pending_child_layer->LowResTiling()->AllTilesForTesting();
+ all_pending_child_tiles.insert(pending_child_low_res_tiles.begin(),
+ pending_child_low_res_tiles.end());
+ EXPECT_EQ(1u, pending_child_low_res_tiles.size());
+
+ std::set<Tile*> all_tiles = all_pending_tiles;
+ all_tiles.insert(all_pending_child_tiles.begin(),
+ all_pending_child_tiles.end());
+
+ tile_manager()->InitializeTilesWithResourcesForTesting(
+ std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
+
+ EXPECT_TRUE(pending_layer_->HasValidTilePriorities());
+ EXPECT_FALSE(pending_child_layer->HasValidTilePriorities());
+
+ // Verify that eviction queue returns tiles also from layers without valid
+ // tile priorities and that the tile priority bin of those tiles is (at most)
+ // EVENTUALLY.
+ TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY;
+ std::set<Tile*> new_content_tiles;
+ size_t tile_count = 0;
+ EvictionTilePriorityQueue queue;
+ host_impl_.BuildEvictionQueue(&queue, tree_priority);
+ while (!queue.IsEmpty()) {
+ Tile* tile = queue.Top();
+ const TilePriority& pending_priority = tile->priority(PENDING_TREE);
+ EXPECT_NE(std::numeric_limits<float>::infinity(),
+ pending_priority.distance_to_visible);
+ if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end())
+ EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin);
+ else
+ EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin);
+ new_content_tiles.insert(tile);
+ ++tile_count;
+ queue.Pop();
+ }
+ EXPECT_EQ(tile_count, new_content_tiles.size());
+ EXPECT_EQ(all_tiles, new_content_tiles);
+}
+
TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) {
SetupDefaultTrees(gfx::Size(1000, 1000));
« no previous file with comments | « cc/resources/picture_layer_tiling.cc ('k') | cc/test/fake_picture_layer_tiling_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698