| Index: cc/tiles/tile_manager_unittest.cc
|
| diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc
|
| index 5e116400c8feaa614aaa2b6bf294de0d964b3f3e..0c85f4dc50afa6acd20250bc6863cf9633094b59 100644
|
| --- a/cc/tiles/tile_manager_unittest.cc
|
| +++ b/cc/tiles/tile_manager_unittest.cc
|
| @@ -2527,6 +2527,11 @@ TEST_F(CheckerImagingTileManagerTest, BuildsImageDecodeQueueAsExpected) {
|
| gfx::Rect(rect_to_raster)); // Eventually rect.
|
| host_impl()->tile_manager()->PrepareTiles(host_impl()->global_tile_state());
|
|
|
| + // Finish all raster and dispatch completion callback so that the decode work
|
| + // for checkered images can be scheduled.
|
| + static_cast<SynchronousTaskGraphRunner*>(task_graph_runner())->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| // Run decode tasks to trigger completion of any pending decodes.
|
| FlushDecodeTasks();
|
|
|
| @@ -2564,6 +2569,74 @@ TEST_F(CheckerImagingTileManagerTest, BuildsImageDecodeQueueAsExpected) {
|
| EXPECT_FALSE(host_impl()->client()->did_request_impl_side_invalidation());
|
| }
|
|
|
| +TEST_F(CheckerImagingTileManagerTest,
|
| + TileManagerCorrectlyPrioritizesCheckerImagedDecodes) {
|
| + gfx::Size layer_bounds(500, 500);
|
| +
|
| + std::unique_ptr<FakeRecordingSource> recording_source =
|
| + FakeRecordingSource::CreateFilledRecordingSource(layer_bounds);
|
| + recording_source->set_fill_with_nonsolid_color(true);
|
| +
|
| + recording_source->Rerecord();
|
| + scoped_refptr<RasterSource> raster_source =
|
| + RasterSource::CreateFromRecordingSource(recording_source.get(), false);
|
| +
|
| + // Required for activation tiles block checker-imaged decodes.
|
| + SetupPendingTree(raster_source, gfx::Size(100, 100),
|
| + Region(gfx::Rect(0, 0, 500, 500)));
|
| + host_impl()->tile_manager()->PrepareTiles(host_impl()->global_tile_state());
|
| + EXPECT_TRUE(host_impl()->tile_manager()->HasScheduledTileTasksForTesting());
|
| + EXPECT_TRUE(host_impl()
|
| + ->tile_manager()
|
| + ->checker_image_tracker()
|
| + .no_decodes_allowed_for_testing());
|
| + while (!host_impl()->client()->ready_to_activate()) {
|
| + static_cast<SynchronousTaskGraphRunner*>(task_graph_runner())
|
| + ->RunSingleTaskForTesting();
|
| + base::RunLoop().RunUntilIdle();
|
| + }
|
| + EXPECT_EQ(host_impl()
|
| + ->tile_manager()
|
| + ->checker_image_tracker()
|
| + .decode_priority_allowed_for_testing(),
|
| + CheckerImageTracker::DecodeType::kRaster);
|
| +
|
| + // Finishing all tasks allows pre-decodes.
|
| + static_cast<SynchronousTaskGraphRunner*>(task_graph_runner())->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(host_impl()
|
| + ->tile_manager()
|
| + ->checker_image_tracker()
|
| + .decode_priority_allowed_for_testing(),
|
| + CheckerImageTracker::DecodeType::kPreDecode);
|
| +
|
| + // Required for draw tiles block checker-imaged decodes.
|
| + // Free all tile resources and perform another PrepareTiles.
|
| + ActivateTree();
|
| + EXPECT_TRUE(host_impl()->tile_manager()->IsReadyToDraw());
|
| + host_impl()->tile_manager()->PrepareTiles(
|
| + GlobalStateThatImpactsTilePriority());
|
| + EXPECT_FALSE(host_impl()->tile_manager()->IsReadyToDraw());
|
| +
|
| + host_impl()->client()->reset_ready_to_draw();
|
| + host_impl()->tile_manager()->PrepareTiles(host_impl()->global_tile_state());
|
| + EXPECT_TRUE(host_impl()->tile_manager()->HasScheduledTileTasksForTesting());
|
| + EXPECT_TRUE(host_impl()
|
| + ->tile_manager()
|
| + ->checker_image_tracker()
|
| + .no_decodes_allowed_for_testing());
|
| + while (!host_impl()->client()->ready_to_draw()) {
|
| + static_cast<SynchronousTaskGraphRunner*>(task_graph_runner())
|
| + ->RunSingleTaskForTesting();
|
| + base::RunLoop().RunUntilIdle();
|
| + }
|
| + EXPECT_EQ(host_impl()
|
| + ->tile_manager()
|
| + ->checker_image_tracker()
|
| + .decode_priority_allowed_for_testing(),
|
| + CheckerImageTracker::DecodeType::kRaster);
|
| +}
|
| +
|
| class CheckerImagingTileManagerMemoryTest
|
| : public CheckerImagingTileManagerTest {
|
| public:
|
| @@ -2636,6 +2709,11 @@ TEST_F(CheckerImagingTileManagerMemoryTest, AddsAllNowTilesToImageDecodeQueue) {
|
| complete_tiling_rect); // Eventually rect.
|
| host_impl()->tile_manager()->PrepareTiles(host_impl()->global_tile_state());
|
|
|
| + // Finish all raster work so the decode work for checkered images can be
|
| + // scheduled.
|
| + static_cast<SynchronousTaskGraphRunner*>(task_graph_runner())->RunUntilIdle();
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| // Flush all decode tasks. The tiles with checkered images should be
|
| // invalidated.
|
| FlushDecodeTasks();
|
|
|