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 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 |