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

Unified Diff: cc/tiles/checker_image_tracker_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/checker_image_tracker.cc ('k') | cc/tiles/tile_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/tiles/checker_image_tracker_unittest.cc
diff --git a/cc/tiles/checker_image_tracker_unittest.cc b/cc/tiles/checker_image_tracker_unittest.cc
index aee6773bb9c84edff6e9cd4cf89e4f7bceeb0fb3..16b6ebda4905be6d83c09a0c2c6df9d2c93094d1 100644
--- a/cc/tiles/checker_image_tracker_unittest.cc
+++ b/cc/tiles/checker_image_tracker_unittest.cc
@@ -85,6 +85,8 @@ class CheckerImageTrackerTest : public testing::Test,
void SetUpTracker(bool checker_images_enabled) {
checker_image_tracker_ = base::MakeUnique<CheckerImageTracker>(
&image_controller_, this, checker_images_enabled);
+ checker_image_tracker_->SetMaxDecodePriorityAllowed(
+ CheckerImageTracker::DecodeType::kPreDecode);
}
void TearDown() override { checker_image_tracker_.reset(); }
@@ -122,7 +124,8 @@ class CheckerImageTrackerTest : public testing::Test,
CheckerImageTracker::ImageDecodeQueue decode_queue;
for (const auto& image : images) {
if (checker_image_tracker_->ShouldCheckerImage(image, tree))
- decode_queue.push_back(image.paint_image());
+ decode_queue.push_back(CheckerImageTracker::ImageDecodeRequest(
+ image.paint_image(), CheckerImageTracker::DecodeType::kRaster));
}
return decode_queue;
}
@@ -170,8 +173,8 @@ TEST_F(CheckerImageTrackerTest, UpdatesImagesAtomically) {
BuildImageDecodeQueue(draw_images, WhichTree::PENDING_TREE);
ASSERT_EQ(2u, image_decode_queue.size());
- EXPECT_EQ(checkerable_image.paint_image(), image_decode_queue[0]);
- EXPECT_EQ(checkerable_image.paint_image(), image_decode_queue[1]);
+ EXPECT_EQ(checkerable_image.paint_image(), image_decode_queue[0].paint_image);
+ EXPECT_EQ(checkerable_image.paint_image(), image_decode_queue[1].paint_image);
checker_image_tracker_->ScheduleImageDecodeQueue(image_decode_queue);
EXPECT_EQ(image_controller_.num_of_locked_images(), 1);
@@ -416,7 +419,7 @@ TEST_F(CheckerImageTrackerTest, CheckersOnlyStaticCompletedImages) {
CheckerImageTracker::ImageDecodeQueue image_decode_queue =
BuildImageDecodeQueue(draw_images, WhichTree::PENDING_TREE);
EXPECT_EQ(image_decode_queue.size(), 1U);
- EXPECT_EQ(image_decode_queue[0], static_image.paint_image());
+ EXPECT_EQ(image_decode_queue[0].paint_image, static_image.paint_image());
// Change the partial image to complete and try again. It should sstill not
// be checkered.
@@ -488,5 +491,45 @@ TEST_F(CheckerImageTrackerTest, DontCheckerMultiPartImages) {
multi_part_image, WhichTree::PENDING_TREE));
}
+TEST_F(CheckerImageTrackerTest, RespectsDecodePriority) {
+ SetUpTracker(true);
+
+ DrawImage image1 = CreateImage(ImageType::CHECKERABLE);
+ DrawImage image2 = CreateImage(ImageType::CHECKERABLE);
+ DrawImage image3 = CreateImage(ImageType::CHECKERABLE);
+ DrawImage image4 = CreateImage(ImageType::CHECKERABLE);
+ CheckerImageTracker::ImageDecodeQueue image_decode_queue =
+ BuildImageDecodeQueue({image1, image2, image3, image4},
+ WhichTree::PENDING_TREE);
+
+ // Mark the last 2 images as pre-decode.
+ EXPECT_EQ(image_decode_queue.size(), 4u);
+ image_decode_queue[2].type = CheckerImageTracker::DecodeType::kPreDecode;
+ image_decode_queue[3].type = CheckerImageTracker::DecodeType::kPreDecode;
+
+ // No decodes allowed. Nothing should be scheduled.
+ EXPECT_EQ(image_controller_.decoded_images().size(), 0u);
+ checker_image_tracker_->SetNoDecodesAllowed();
+ checker_image_tracker_->ScheduleImageDecodeQueue(image_decode_queue);
+ EXPECT_EQ(image_controller_.decoded_images().size(), 0u);
+
+ // Raster decodes allowed. Only those should be scheduled.
+ checker_image_tracker_->SetMaxDecodePriorityAllowed(
+ CheckerImageTracker::DecodeType::kRaster);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(image_controller_.decoded_images().size(), 2u);
+ EXPECT_EQ(image_controller_.decoded_images()[0], image1);
+ EXPECT_EQ(image_controller_.decoded_images()[1], image2);
+
+ // All decodes allowed. The complete queue should be flushed.
+ checker_image_tracker_->SetMaxDecodePriorityAllowed(
+ CheckerImageTracker::DecodeType::kPreDecode);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(image_controller_.decoded_images()[0], image1);
+ EXPECT_EQ(image_controller_.decoded_images()[1], image2);
+ EXPECT_EQ(image_controller_.decoded_images()[2], image3);
+ EXPECT_EQ(image_controller_.decoded_images()[3], image4);
+}
+
} // namespace
} // namespace cc
« no previous file with comments | « cc/tiles/checker_image_tracker.cc ('k') | cc/tiles/tile_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698