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

Unified Diff: cc/tiles/checker_image_tracker.cc

Issue 2924233002: cc: Move pre-decodes to background worker. (Closed)
Patch Set: .. 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
Index: cc/tiles/checker_image_tracker.cc
diff --git a/cc/tiles/checker_image_tracker.cc b/cc/tiles/checker_image_tracker.cc
index e076983ad7e9f3452a042accf35c69efd2895b57..5591486ca4ab5f3647d150bc2e191df807e53c73 100644
--- a/cc/tiles/checker_image_tracker.cc
+++ b/cc/tiles/checker_image_tracker.cc
@@ -37,6 +37,11 @@ std::string ToString(PaintImage::Id paint_image_id,
} // namespace
+CheckerImageTracker::ImageDecodeRequest::ImageDecodeRequest(
+ PaintImage paint_image,
+ DecodeType type)
+ : paint_image(std::move(paint_image)), type(type) {}
+
CheckerImageTracker::CheckerImageTracker(ImageController* image_controller,
CheckerImageTrackerClient* client,
bool enable_checker_imaging)
@@ -47,6 +52,19 @@ CheckerImageTracker::CheckerImageTracker(ImageController* image_controller,
CheckerImageTracker::~CheckerImageTracker() = default;
+void CheckerImageTracker::SetCanSchedulePredecodeImages(
+ bool can_schedule_predecode_images) {
+ if (can_schedule_predecode_images_ == can_schedule_predecode_images)
+ return;
+ can_schedule_predecode_images_ = can_schedule_predecode_images;
+
+ // If scheduling for the pre-decode queue was disabled, then we will stop
+ // queueing more work once a decode currently in flight is completed. If it
+ // was enabled, then kick off the next decode task.
+ if (can_schedule_predecode_images_)
+ ScheduleNextImageDecode();
+}
+
void CheckerImageTracker::ScheduleImageDecodeQueue(
ImageDecodeQueue image_decode_queue) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
@@ -235,9 +253,18 @@ void CheckerImageTracker::ScheduleNextImageDecode() {
if (outstanding_image_decode_.has_value())
return;
+ // If scheduling pre-decodes was disabled and we have reached the pre-decode
+ // images in the queue, don't run them now. We will come back here when
+ // these decodes are enabled.
+ if (!image_decode_queue_.empty() &&
vmpstr 2017/06/12 21:45:30 Can you break this up a bit. Like, check if empty
Khushal 2017/06/14 00:29:19 Done.
+ image_decode_queue_.front().type == DecodeType::kPreDecode &&
+ !can_schedule_predecode_images_) {
+ return;
+ }
+
DrawImage draw_image;
while (!image_decode_queue_.empty()) {
- auto candidate = std::move(image_decode_queue_.front());
+ auto candidate = std::move(image_decode_queue_.front().paint_image);
image_decode_queue_.erase(image_decode_queue_.begin());
// Once an image has been decoded, it can still be present in the decode

Powered by Google App Engine
This is Rietveld 408576698