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 |