| 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 31522aabdc1895955be63ff8b81a29fa07ee1796..16d589e6124fc853220de4e7f0a3587c42490511 100644
|
| --- a/cc/tiles/checker_image_tracker_unittest.cc
|
| +++ b/cc/tiles/checker_image_tracker_unittest.cc
|
| @@ -48,10 +48,7 @@ class TestImageController : public ImageController {
|
| const ImageDecodedCallback& callback) override {
|
| ImageDecodeRequestId request_id = next_image_request_id_++;
|
|
|
| - // The tracker should request a decode only once.
|
| - EXPECT_EQ(decodes_requested_.count(image->uniqueID()), 0u);
|
| decodes_requested_.insert(image->uniqueID());
|
| -
|
| locked_images_.insert(request_id);
|
|
|
| // Post the callback asynchronously to match the behaviour in
|
| @@ -332,5 +329,61 @@ TEST_F(CheckerImageTrackerTest, CancelsScheduledDecodes) {
|
| EXPECT_EQ(image_controller_.num_of_locked_images(), 2);
|
| }
|
|
|
| +TEST_F(CheckerImageTrackerTest, ClearsTracker) {
|
| + SetUpTracker(true);
|
| +
|
| + DrawImage checkerable_image = CreateImage(ImageType::CHECKERABLE);
|
| + CheckerImageTracker::ImageDecodeQueue image_decode_queue =
|
| + BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
|
| + EXPECT_EQ(image_decode_queue.size(), 1U);
|
| + checker_image_tracker_->ScheduleImageDecodeQueue(
|
| + std::move(image_decode_queue));
|
| + base::RunLoop().RunUntilIdle();
|
| + checker_image_tracker_->TakeImagesToInvalidateOnSyncTree();
|
| +
|
| + // The image is no longer checkered on the pending tree.
|
| + image_decode_queue =
|
| + BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
|
| + EXPECT_EQ(image_decode_queue.size(), 0U);
|
| + EXPECT_EQ(image_controller_.num_of_locked_images(), 1);
|
| +
|
| + // Clear the tracker without clearing the async decode tracking. This should
|
| + // drop the decode but the image should not be checkered.
|
| + bool can_clear_decode_policy_tracking = false;
|
| + checker_image_tracker_->ClearTracker(can_clear_decode_policy_tracking);
|
| + EXPECT_EQ(image_controller_.num_of_locked_images(), 0);
|
| + image_decode_queue =
|
| + BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
|
| + EXPECT_EQ(image_decode_queue.size(), 0U);
|
| + checker_image_tracker_->DidActivateSyncTree();
|
| +
|
| + // Now clear the decode tracking as well. The image will be re-checkered.
|
| + can_clear_decode_policy_tracking = true;
|
| + checker_image_tracker_->ClearTracker(can_clear_decode_policy_tracking);
|
| + image_decode_queue =
|
| + BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
|
| + image_decode_queue =
|
| + BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
|
| + EXPECT_EQ(image_decode_queue.size(), 1U);
|
| +
|
| + // If an image had been decoded and tracker was cleared after it, we should
|
| + // continue checkering it.
|
| + DrawImage checkerable_image2 = CreateImage(ImageType::CHECKERABLE);
|
| + image_decode_queue =
|
| + BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
|
| + EXPECT_EQ(image_decode_queue.size(), 1U);
|
| + checker_image_tracker_->ScheduleImageDecodeQueue(
|
| + std::move(image_decode_queue));
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_EQ(image_controller_.num_of_locked_images(), 1);
|
| + can_clear_decode_policy_tracking = false;
|
| + checker_image_tracker_->ClearTracker(can_clear_decode_policy_tracking);
|
| + EXPECT_EQ(image_controller_.num_of_locked_images(), 0);
|
| + image_decode_queue =
|
| + BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
|
| + EXPECT_EQ(image_decode_queue.size(), 1U);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|