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

Unified Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 2899403003: cc: Give non-drawing layers that are rasterized a lower priority. (Closed)
Patch Set: priority bin Created 3 years, 7 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/trees/layer_tree_host_impl_unittest.cc
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index a9e5a559a68a02739e4a0aea73abb2d1255eccb2..0e07a66280bbf447b9c2e6bc13b55a8f11fc06aa 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -12396,5 +12396,77 @@ TEST_F(LayerTreeHostImplTest, RasterColorSpace) {
EXPECT_EQ(host_impl_->GetRasterColorSpace(), gfx::ColorSpace::CreateSRGB());
}
+TEST_F(LayerTreeHostImplTest, RasterTilePrioritizationForNonDrawingLayers) {
+ gfx::Size layer_bounds(500, 500);
+
+ host_impl_->SetViewportSize(layer_bounds);
+ host_impl_->CreatePendingTree();
+ std::unique_ptr<LayerImpl> scoped_root =
+ LayerImpl::Create(host_impl_->pending_tree(), 1);
+ scoped_root->SetBounds(layer_bounds);
+ LayerImpl* root = scoped_root.get();
+ host_impl_->pending_tree()->SetRootLayerForTesting(std::move(scoped_root));
+
+ scoped_refptr<FakeRasterSource> raster_source(
+ FakeRasterSource::CreateFilled(layer_bounds));
+
+ std::unique_ptr<FakePictureLayerImpl> scoped_hidden_layer =
+ FakePictureLayerImpl::CreateWithRasterSource(host_impl_->pending_tree(),
+ 2, raster_source);
+ scoped_hidden_layer->SetBounds(layer_bounds);
+ scoped_hidden_layer->SetDrawsContent(true);
+ scoped_hidden_layer->set_contributes_to_drawn_render_surface(true);
+ FakePictureLayerImpl* hidden_layer = scoped_hidden_layer.get();
+ root->test_properties()->AddChild(std::move(scoped_hidden_layer));
+
+ std::unique_ptr<FakePictureLayerImpl> scoped_drawing_layer =
+ FakePictureLayerImpl::CreateWithRasterSource(host_impl_->pending_tree(),
+ 3, raster_source);
+ scoped_drawing_layer->SetBounds(layer_bounds);
+ scoped_drawing_layer->SetDrawsContent(true);
+ scoped_drawing_layer->set_contributes_to_drawn_render_surface(true);
+ FakePictureLayerImpl* drawing_layer = scoped_drawing_layer.get();
+ root->test_properties()->AddChild(std::move(scoped_drawing_layer));
+
+ gfx::Rect layer_rect(0, 0, 500, 500);
+ gfx::Rect empty_rect(0, 0, 0, 0);
+ host_impl_->pending_tree()->BuildPropertyTreesForTesting();
+
+ hidden_layer->tilings()->AddTiling(gfx::AxisTransform2d(), raster_source);
+ PictureLayerTiling* hidden_tiling = hidden_layer->tilings()->tiling_at(0);
+ hidden_tiling->set_resolution(TileResolution::LOW_RESOLUTION);
+ hidden_tiling->CreateAllTilesForTesting();
+ hidden_tiling->SetTilePriorityRectsForTesting(
+ layer_rect, // Visible rect.
+ layer_rect, // Skewport rect.
+ layer_rect, // Soon rect.
+ layer_rect); // Eventually rect.
+
+ drawing_layer->tilings()->AddTiling(gfx::AxisTransform2d(), raster_source);
+ PictureLayerTiling* drawing_tiling = drawing_layer->tilings()->tiling_at(0);
+ drawing_tiling->set_resolution(TileResolution::HIGH_RESOLUTION);
+ drawing_tiling->CreateAllTilesForTesting();
+ drawing_tiling->SetTilePriorityRectsForTesting(
+ layer_rect, // Visible rect.
+ layer_rect, // Skewport rect.
+ layer_rect, // Soon rect.
+ layer_rect); // Eventually rect.
+
+ // Both layers are drawn. Since the hidden layer has a low resolution tiling,
+ // in smoothness priority mode its tile is higher priority.
+ std::unique_ptr<RasterTilePriorityQueue> queue =
+ host_impl_->BuildRasterQueue(TreePriority::SMOOTHNESS_TAKES_PRIORITY,
+ RasterTilePriorityQueue::Type::ALL);
+ EXPECT_EQ(queue->Top().tile()->layer_id(), 2);
+
+ // Hide the hidden layer and set it to so it still rasters. Now the drawing
+ // layer should be prioritized over the hidden layer.
+ hidden_layer->set_contributes_to_drawn_render_surface(false);
+ hidden_layer->set_raster_even_if_not_in_rsll(true);
+ queue = host_impl_->BuildRasterQueue(TreePriority::SMOOTHNESS_TAKES_PRIORITY,
+ RasterTilePriorityQueue::Type::ALL);
+ EXPECT_EQ(queue->Top().tile()->layer_id(), 3);
+}
+
} // namespace
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698