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

Unified Diff: cc/tiles/tile_manager_unittest.cc

Issue 2924233002: cc: Move pre-decodes to background worker. (Closed)
Patch Set: flake is flaky. T_T Created 3 years, 6 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
« no previous file with comments | « cc/tiles/tile_manager.cc ('k') | cc/trees/layer_tree_host_unittest_checkerimaging.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/tiles/tile_manager_unittest.cc
diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc
index cf2fbae11322bc41a69f785573c338b484ac9e72..d497d963f221f263347f29c5b22cbb903947561e 100644
--- a/cc/tiles/tile_manager_unittest.cc
+++ b/cc/tiles/tile_manager_unittest.cc
@@ -2533,6 +2533,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();
@@ -2573,7 +2578,6 @@ TEST_F(CheckerImagingTileManagerTest, BuildsImageDecodeQueueAsExpected) {
TEST_F(CheckerImagingTileManagerTest,
TileManagerCleanupClearsCheckerImagedDecodes) {
const gfx::Size layer_bounds(512, 512);
- SetupDefaultTrees(layer_bounds);
std::unique_ptr<FakeRecordingSource> recording_source =
FakeRecordingSource::CreateFilledRecordingSource(layer_bounds);
@@ -2584,28 +2588,24 @@ TEST_F(CheckerImagingTileManagerTest,
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.
+ SetupPendingTree(raster_source, gfx::Size(100, 100),
+ Region(gfx::Rect(0, 0, 500, 500)));
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();
FlushDecodeTasks();
+
EXPECT_TRUE(host_impl()
->tile_manager()
->checker_image_tracker()
.has_locked_decodes_for_testing());
+
+ host_impl()->pending_tree()->ReleaseTileResources();
CleanUpTileManager();
+
EXPECT_FALSE(host_impl()
->tile_manager()
->checker_image_tracker()
@@ -2614,6 +2614,75 @@ TEST_F(CheckerImagingTileManagerTest,
host_impl()->tile_manager()->TakeImagesToInvalidateOnSyncTree().empty());
}
+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);
+ 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);
+
+ // 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:
@@ -2686,6 +2755,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();
« no previous file with comments | « cc/tiles/tile_manager.cc ('k') | cc/trees/layer_tree_host_unittest_checkerimaging.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698