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..b53e929dc96371cca47b4aed6f9231577602b17c 100644 |
--- a/cc/tiles/checker_image_tracker.cc |
+++ b/cc/tiles/checker_image_tracker.cc |
@@ -65,6 +65,21 @@ const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() { |
return invalidated_images_on_current_sync_tree_; |
} |
+void CheckerImageTracker::ResetImageDecodeQueue() { |
vmpstr
2017/03/06 20:45:25
What is this function doing? Can you comment/expla
Khushal
2017/03/07 00:31:08
Done. I added a comment on the header.
|
+ if (image_decode_request_queue_.empty()) |
+ return; |
+ DCHECK(enable_checker_imaging_); |
+ |
+ sk_sp<const SkImage> pending_image_decode = |
+ image_decode_request_queue_.front(); |
+ std::queue<sk_sp<const SkImage>> empty_queue; |
+ image_decode_request_queue_.swap(empty_queue); |
+ pending_image_decodes_.clear(); |
+ |
+ pending_image_decodes_.insert(pending_image_decode->uniqueID()); |
+ image_decode_request_queue_.push(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 +99,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_.pop(); |
+ RequestNextImageDecode(); |
images_decoded_once_.insert(image_id); |
images_pending_invalidation_.insert(image_id); |
@@ -144,11 +163,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(image); |
+ if (image_decode_request_queue_.size() == 1) |
vmpstr
2017/03/06 20:45:25
1u
Khushal
2017/03/07 00:31:08
Done.
|
+ RequestNextImageDecode(); |
+} |
+ |
+void CheckerImageTracker::RequestNextImageDecode() { |
+ 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 |