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

Unified Diff: cc/tiles/picture_layer_tiling_unittest.cc

Issue 1381163002: Add a flag to disable partial raster in renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove "--enable-persistent-gpu-memory-buffer" Created 5 years, 2 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/tiles/picture_layer_tiling_unittest.cc
diff --git a/cc/tiles/picture_layer_tiling_unittest.cc b/cc/tiles/picture_layer_tiling_unittest.cc
index ec3b87024d78931c0df77bd8fef84c3b76646fd1..2c0cf7b8d6a8d6494670fc2dce35428f551c11a2 100644
--- a/cc/tiles/picture_layer_tiling_unittest.cc
+++ b/cc/tiles/picture_layer_tiling_unittest.cc
@@ -1796,5 +1796,161 @@ TEST_F(PictureLayerTilingIteratorTest, GiantRect) {
VerifyTilesExactlyCoverRect(contents_scale, content_rect);
}
+// Invalidates a tiling and ensures that if partial raster is enabled, the
+// tiling provides tiles with an invalidated id.
+TEST_F(PictureLayerTilingIteratorTest, InvalidateRespectsEnabledPartialRaster) {
+ gfx::Size tile_size(100, 100);
+ gfx::Size original_layer_size(10, 10);
+ client_.SetTileSize(tile_size);
+ client_.set_partial_raster_enabled(true);
+ LayerTreeSettings settings;
+ settings.use_partial_raster = true;
+
+ scoped_refptr<FakeDisplayListRasterSource> raster_source =
+ FakeDisplayListRasterSource::CreateFilled(original_layer_size);
+ tiling_ = TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.f, raster_source,
+ &client_, settings);
+ tiling_->set_resolution(HIGH_RESOLUTION);
+ SetLiveRectAndVerifyTiles(gfx::Rect(original_layer_size));
+
+ // Tiling only has one tile, since its total size is less than one.
+ Tile::Id original_id = tiling_->TileAt(0, 0)->id();
+ EXPECT_NE(0u, original_id);
+ EXPECT_EQ(0u, tiling_->TileAt(0, 0)->invalidated_id());
+
+ Region invalidation =
+ SubtractRegions(gfx::Rect(tile_size), gfx::Rect(original_layer_size));
+ tiling_->Invalidate(invalidation);
+ EXPECT_EQ(original_id, tiling_->TileAt(0, 0)->invalidated_id());
+}
+
+// Invalidates a tiling and ensures that if partial raster is disabled, the
+// tiling does not provide tiles with an invalidated id.
+TEST_F(PictureLayerTilingIteratorTest,
+ InvalidateRespectsDisabledPartialRaster) {
+ gfx::Size tile_size(100, 100);
+ gfx::Size original_layer_size(10, 10);
+ client_.SetTileSize(tile_size);
+ scoped_refptr<FakeDisplayListRasterSource> raster_source =
+ FakeDisplayListRasterSource::CreateFilled(original_layer_size);
+ tiling_ = TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.f, raster_source,
+ &client_, LayerTreeSettings());
+ tiling_->set_resolution(HIGH_RESOLUTION);
+ SetLiveRectAndVerifyTiles(gfx::Rect(original_layer_size));
+
+ // Tiling only has one tile, since its total size is less than one.
+ EXPECT_NE(0u, tiling_->TileAt(0, 0)->id());
+ EXPECT_EQ(0u, tiling_->TileAt(0, 0)->invalidated_id());
+
+ Region invalidation =
+ SubtractRegions(gfx::Rect(tile_size), gfx::Rect(original_layer_size));
+ tiling_->Invalidate(invalidation);
+ EXPECT_EQ(0u, tiling_->TileAt(0, 0)->invalidated_id());
+}
+
+// Ensures that if partial raster is enabled, we copy the tile ids from the
+// active tiling to the invalidated ids of any new tiles created by
+// CreateMissingTilesInLiveTilesRect.
+TEST_F(PictureLayerTilingIteratorTest,
+ CreateMissingRespectsEnabledPartialRaster) {
+ gfx::Size tile_size(100, 100);
+ gfx::Size original_layer_size(10, 10);
+ LayerTreeSettings settings;
+ settings.use_partial_raster = true;
+ Region invalidation =
+ SubtractRegions(gfx::Rect(tile_size), gfx::Rect(original_layer_size));
+ scoped_refptr<FakeDisplayListRasterSource> empty_raster_source =
+ FakeDisplayListRasterSource::CreatePartiallyFilled(original_layer_size,
+ gfx::Rect());
+ scoped_refptr<FakeDisplayListRasterSource> filled_raster_source =
+ FakeDisplayListRasterSource::CreateFilled(original_layer_size);
+
+ // Set up the client.
+ client_.SetTileSize(tile_size);
+ client_.set_partial_raster_enabled(settings.use_partial_raster);
+ client_.set_invalidation(invalidation);
+
+ // Create a twin tiling based on the filled raster source and set it to the
+ // client.
+ scoped_ptr<TestablePictureLayerTiling> twin_tiling =
+ TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.f, filled_raster_source,
+ &client_, settings);
+ twin_tiling->set_resolution(HIGH_RESOLUTION);
+ twin_tiling->SetLiveTilesRect(gfx::Rect(original_layer_size));
+ client_.set_twin_tiling(twin_tiling.get());
+
+ // The twin tiling should have a valid tile at 0,0.
+ Tile::Id original_tile_id = twin_tiling->TileAt(0, 0)->id();
+ DCHECK_NE(0u, original_tile_id);
+
+ // Crate an empty tiling which will have CreateMissingTilesInLiveTilesRect
+ // called on it.
+ scoped_ptr<TestablePictureLayerTiling> empty_tiling =
+ TestablePictureLayerTiling::Create(PENDING_TREE, 1.f, empty_raster_source,
+ &client_, settings);
+ empty_tiling->set_resolution(HIGH_RESOLUTION);
+ empty_tiling->SetLiveTilesRect(gfx::Rect(original_layer_size));
+ EXPECT_EQ(nullptr, empty_tiling->TileAt(0, 0));
+
+ // Now update the |empty_tiling|'s raster source to the filled source, so
+ // that it will attempt to create tiles when CreateMissingTilesInLiveTilesRect
+ // is called.
+ empty_tiling->SetRasterSourceAndResize(filled_raster_source);
+
+ empty_tiling->CreateMissingTilesInLiveTilesRect();
+ EXPECT_EQ(original_tile_id, empty_tiling->TileAt(0, 0)->invalidated_id());
+}
+
+// Ensures that if partial raster is disavbled, we do not set invalidated ids on
+// any new tiles created by CreateMissingTilesInLiveTilesRect.
+TEST_F(PictureLayerTilingIteratorTest,
+ CreateMissingRespectsDisabledPartialRaster) {
+ gfx::Size tile_size(100, 100);
+ gfx::Size original_layer_size(10, 10);
+ LayerTreeSettings settings;
+ settings.use_partial_raster = false;
+ Region invalidation =
+ SubtractRegions(gfx::Rect(tile_size), gfx::Rect(original_layer_size));
+ scoped_refptr<FakeDisplayListRasterSource> empty_raster_source =
+ FakeDisplayListRasterSource::CreatePartiallyFilled(original_layer_size,
+ gfx::Rect());
+ scoped_refptr<FakeDisplayListRasterSource> filled_raster_source =
+ FakeDisplayListRasterSource::CreateFilled(original_layer_size);
+
+ // Set up the client.
+ client_.SetTileSize(tile_size);
+ client_.set_partial_raster_enabled(settings.use_partial_raster);
+ client_.set_invalidation(invalidation);
+
+ // Create a twin tiling based on the filled raster source and set it to the
+ // client.
+ scoped_ptr<TestablePictureLayerTiling> twin_tiling =
+ TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.f, filled_raster_source,
+ &client_, settings);
+ twin_tiling->set_resolution(HIGH_RESOLUTION);
+ twin_tiling->SetLiveTilesRect(gfx::Rect(original_layer_size));
+ client_.set_twin_tiling(twin_tiling.get());
+
+ // The twin tiling should have a valid tile at 0,0.
+ DCHECK_NE(0u, twin_tiling->TileAt(0, 0)->id());
+
+ // Crate an empty tiling which will have CreateMissingTilesInLiveTilesRect
+ // called on it.
+ scoped_ptr<TestablePictureLayerTiling> empty_tiling =
+ TestablePictureLayerTiling::Create(PENDING_TREE, 1.f, empty_raster_source,
+ &client_, settings);
+ empty_tiling->set_resolution(HIGH_RESOLUTION);
+ empty_tiling->SetLiveTilesRect(gfx::Rect(original_layer_size));
+ EXPECT_EQ(nullptr, empty_tiling->TileAt(0, 0));
+
+ // Now update the |empty_tiling|'s raster source to the filled source, so
+ // that it will attempt to create tiles when CreateMissingTilesInLiveTilesRect
+ // is called.
+ empty_tiling->SetRasterSourceAndResize(filled_raster_source);
+
+ empty_tiling->CreateMissingTilesInLiveTilesRect();
+ EXPECT_EQ(0u, empty_tiling->TileAt(0, 0)->invalidated_id());
+}
+
} // namespace
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698