Chromium Code Reviews| Index: cc/tiles/checker_image_tracker.cc |
| diff --git a/cc/tiles/checker_image_tracker.cc b/cc/tiles/checker_image_tracker.cc |
| index c8113d4d56052edb486948d64999a2680ce952d8..d4c36092c9e19e28e1c296dd38a34b83556fa9c4 100644 |
| --- a/cc/tiles/checker_image_tracker.cc |
| +++ b/cc/tiles/checker_image_tracker.cc |
| @@ -65,6 +65,20 @@ const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() { |
| return invalidated_images_on_current_sync_tree_; |
| } |
| +void CheckerImageTracker::ResetImageDecodeQueue() { |
| + if (image_decode_request_queue_.empty()) |
| + return; |
| + DCHECK(enable_checker_imaging_); |
| + |
| + sk_sp<const SkImage> pending_image_decode = |
| + image_decode_request_queue_.front(); |
| + image_decode_request_queue_.clear(); |
| + pending_image_decodes_.clear(); |
| + |
| + pending_image_decodes_.insert(pending_image_decode->uniqueID()); |
|
vmpstr
2017/03/07 19:25:08
I guess my confusion comes from the implementation
Khushal
2017/03/13 20:35:08
Removed the function. I think instead of having a
|
| + image_decode_request_queue_.push_back(std::move(pending_image_decode)); |
| +} |
| + |
| void CheckerImageTracker::DidActivateSyncTree() { |
| for (auto image_id : invalidated_images_on_current_sync_tree_) { |
| auto it = image_id_to_decode_request_id_.find(image_id); |
| @@ -84,7 +98,11 @@ void CheckerImageTracker::DidFinishImageDecode( |
| DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED); |
| DCHECK_NE(pending_image_decodes_.count(image_id), 0u); |
| + DCHECK_EQ(image_id, image_decode_request_queue_.front()->uniqueID()); |
| + |
| pending_image_decodes_.erase(image_id); |
| + image_decode_request_queue_.erase(image_decode_request_queue_.begin()); |
|
vmpstr
2017/03/07 19:25:08
"pop_front"? Unless the type doesn't have it
Khushal
2017/03/13 20:35:08
Not needed anymore.
|
| + ScheduleNextImageDecode(); |
| images_decoded_once_.insert(image_id); |
| images_pending_invalidation_.insert(image_id); |
| @@ -144,11 +162,24 @@ void CheckerImageTracker::ScheduleImageDecodeIfNecessary( |
| image_id); |
| DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U); |
| + pending_image_decodes_.insert(image_id); |
| + image_decode_request_queue_.push_back(image); |
| + if (image_decode_request_queue_.size() == 1u) |
| + ScheduleNextImageDecode(); |
| +} |
| + |
| +void CheckerImageTracker::ScheduleNextImageDecode() { |
| + if (image_decode_request_queue_.empty()) |
| + return; |
| + |
| + sk_sp<const SkImage>& image = image_decode_request_queue_.front(); |
| + ImageId image_id = image->uniqueID(); |
| + DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0u); |
| + |
| image_id_to_decode_request_id_[image_id] = |
| image_controller_->QueueImageDecode( |
| image, base::Bind(&CheckerImageTracker::DidFinishImageDecode, |
| weak_factory_.GetWeakPtr(), image_id)); |
| - pending_image_decodes_.insert(image_id); |
| } |
| } // namespace cc |