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

Unified Diff: cc/tiles/checker_image_tracker.cc

Issue 2726343004: cc: Optimize decode scheduling for checker-images. (Closed)
Patch Set: addressed comments Created 3 years, 9 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
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

Powered by Google App Engine
This is Rietveld 408576698