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..cf2fbae11322bc41a69f785573c338b484ac9e72 100644 |
--- a/cc/tiles/tile_manager_unittest.cc |
+++ b/cc/tiles/tile_manager_unittest.cc |
@@ -2359,6 +2359,12 @@ class CheckerImagingTileManagerTest : public TestLayerTreeHostBase { |
} |
} |
+ void CleanUpTileManager() { |
+ task_runner_->set_run_tasks_synchronously(true); |
+ host_impl()->tile_manager()->FinishTasksAndCleanUp(); |
+ task_runner_->set_run_tasks_synchronously(false); |
+ } |
+ |
private: |
scoped_refptr<SynchronousSimpleTaskRunner> task_runner_; |
}; |
@@ -2564,6 +2570,50 @@ TEST_F(CheckerImagingTileManagerTest, BuildsImageDecodeQueueAsExpected) { |
EXPECT_FALSE(host_impl()->client()->did_request_impl_side_invalidation()); |
} |
+TEST_F(CheckerImagingTileManagerTest, |
+ TileManagerCleanupClearsCheckerImagedDecodes) { |
+ const gfx::Size layer_bounds(512, 512); |
+ SetupDefaultTrees(layer_bounds); |
+ |
+ std::unique_ptr<FakeRecordingSource> recording_source = |
+ FakeRecordingSource::CreateFilledRecordingSource(layer_bounds); |
+ recording_source->set_fill_with_nonsolid_color(true); |
+ sk_sp<SkImage> image = CreateDiscardableImage(gfx::Size(512, 512)); |
+ recording_source->add_draw_image(image, gfx::Point(0, 0)); |
+ recording_source->Rerecord(); |
+ scoped_refptr<RasterSource> raster_source = |
+ RasterSource::CreateFromRecordingSource(recording_source.get(), false); |
+ |
+ std::unique_ptr<PictureLayerImpl> layer_impl = PictureLayerImpl::Create( |
+ host_impl()->active_tree(), 1, Layer::LayerMaskType::NOT_MASK); |
+ layer_impl->set_contributes_to_drawn_render_surface(true); |
+ PictureLayerTilingSet* tiling_set = layer_impl->picture_layer_tiling_set(); |
+ |
+ PictureLayerTiling* tiling = |
+ tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source); |
+ tiling->set_resolution(HIGH_RESOLUTION); |
+ tiling->CreateAllTilesForTesting(); |
+ tiling->SetTilePriorityRectsForTesting( |
+ gfx::Rect(layer_bounds), // Visible rect. |
+ gfx::Rect(layer_bounds), // Skewport rect. |
+ gfx::Rect(layer_bounds), // Soon rect. |
+ gfx::Rect(layer_bounds)); // Eventually rect. |
+ |
+ host_impl()->tile_manager()->PrepareTiles(host_impl()->global_tile_state()); |
+ FlushDecodeTasks(); |
+ EXPECT_TRUE(host_impl() |
+ ->tile_manager() |
+ ->checker_image_tracker() |
+ .has_locked_decodes_for_testing()); |
+ CleanUpTileManager(); |
+ EXPECT_FALSE(host_impl() |
+ ->tile_manager() |
+ ->checker_image_tracker() |
+ .has_locked_decodes_for_testing()); |
+ EXPECT_TRUE( |
+ host_impl()->tile_manager()->TakeImagesToInvalidateOnSyncTree().empty()); |
+} |
+ |
class CheckerImagingTileManagerMemoryTest |
: public CheckerImagingTileManagerTest { |
public: |