Index: cc/tiles/checker_image_tracker.h |
diff --git a/cc/tiles/checker_image_tracker.h b/cc/tiles/checker_image_tracker.h |
index 06ebd1785e46f44d635659d0e800a2dd29ad3625..db5ccf404594a38c5cede7ce3e683180e73a7be8 100644 |
--- a/cc/tiles/checker_image_tracker.h |
+++ b/cc/tiles/checker_image_tracker.h |
@@ -37,16 +37,12 @@ class CC_EXPORT CheckerImageTracker { |
bool enable_checker_imaging); |
~CheckerImageTracker(); |
- // Given the |images| for a tile, filters the images which will be deferred |
- // asynchronously using the image decoded service, eliminating them from |
- // |images| adds them to the |checkered_images| set, so they can be skipped |
- // during the rasterization of this tile. |
- // The entries remaining in |images| are for images for which a cached decode |
- // from the image decode service is available, or which must be decoded before |
- // before this tile can be rasterized. |
- void FilterImagesForCheckeringForTile(std::vector<DrawImage>* images, |
- ImageIdFlatSet* checkered_images, |
- WhichTree tree); |
+ // Returns true if the decode for |image| will be deferred to the image decode |
+ // service and it should be be skipped during raster. |
+ bool ShouldCheckerImage(const sk_sp<const SkImage>& image, WhichTree tree); |
+ |
+ using ImageDecodeQueue = std::vector<sk_sp<const SkImage>>; |
+ void ScheduleImageDecodeQueue(ImageDecodeQueue image_decode_queue); |
// Returns the set of images to invalidate on the sync tree. |
const ImageIdFlatSet& TakeImagesToInvalidateOnSyncTree(); |
@@ -70,11 +66,9 @@ class CC_EXPORT CheckerImageTracker { |
ImageController::ImageDecodeRequestId request_id, |
ImageController::ImageDecodeResult result); |
- // Returns true if the decode for |image| will be deferred to the image decode |
- // service and it should be be skipped during raster. |
- bool ShouldCheckerImage(const sk_sp<const SkImage>& image, WhichTree tree); |
- |
- void ScheduleImageDecodeIfNecessary(const sk_sp<const SkImage>& image); |
+ // Called when the next request in the |image_decode_queue_| should be |
+ // scheduled with the image decode service. |
+ void ScheduleNextImageDecode(); |
ImageController* image_controller_; |
CheckerImageTrackerClient* client_; |
@@ -87,11 +81,14 @@ class CC_EXPORT CheckerImageTracker { |
// A set of images which were invalidated on the current sync tree. |
ImageIdFlatSet invalidated_images_on_current_sync_tree_; |
- // A set of images which are currently pending decode from the image decode |
- // service. |
- // TODO(khushalsagar): This should be a queue that gets re-built each time we |
- // do a PrepareTiles? See crbug.com/689184. |
- ImageIdFlatSet pending_image_decodes_; |
+ // The queue of images pending decode. We maintain a queue to ensure that the |
+ // order in which images are decoded is aligned with the priority of the tiles |
+ // dependent on these images. |
+ ImageDecodeQueue image_decode_queue_; |
+ |
+ // The currently outstanding image decode that has been scheduled with the |
+ // decode service. There can be only one outstanding decode at a time. |
+ sk_sp<const SkImage> outstanding_image_decode_; |
// A map of ImageId to its DecodePolicy. |
// TODO(khushalsagar): Limit the size of this set. |