Index: cc/tiles/checker_image_tracker.h |
diff --git a/cc/tiles/checker_image_tracker.h b/cc/tiles/checker_image_tracker.h |
index 64560fb774804b39d9262c336cef479842bd1ef3..805374333f62dbd1399011d37746bc98f6596bd0 100644 |
--- a/cc/tiles/checker_image_tracker.h |
+++ b/cc/tiles/checker_image_tracker.h |
@@ -33,6 +33,24 @@ class CC_EXPORT CheckerImageTrackerClient { |
// sync tree until the previous tree is activated. |
class CC_EXPORT CheckerImageTracker { |
public: |
+ // The priority type for a decode. Note we use int to specify a decreasing |
+ // order of priority with higher values. |
+ enum DecodeType : int { |
+ // Priority for images on tiles being rasterized (visible or pre-paint). |
+ kRaster = 0, |
+ // Lowest priority for images on tiles in pre-decode region. These are tiles |
+ // which are beyond the pre-paint region, but have their images decoded. |
+ kPreDecode = 1, |
+ |
+ kLast = kPreDecode |
+ }; |
+ |
+ struct CC_EXPORT ImageDecodeRequest { |
+ ImageDecodeRequest(PaintImage paint_image, DecodeType type); |
+ PaintImage paint_image; |
+ DecodeType type; |
+ }; |
+ |
CheckerImageTracker(ImageController* image_controller, |
CheckerImageTrackerClient* client, |
bool enable_checker_imaging); |
@@ -42,9 +60,16 @@ class CC_EXPORT CheckerImageTracker { |
// service and it should be be skipped during raster. |
bool ShouldCheckerImage(const DrawImage& image, WhichTree tree); |
- using ImageDecodeQueue = std::vector<PaintImage>; |
+ // Provides a prioritized queue of images to decode. |
+ using ImageDecodeQueue = std::vector<ImageDecodeRequest>; |
void ScheduleImageDecodeQueue(ImageDecodeQueue image_decode_queue); |
+ // Disables scheduling any decode work by the tracker. |
+ void SetNoDecodesAllowed(); |
+ |
+ // The max decode priority type that is allowed to run. |
+ void SetMaxDecodePriorityAllowed(DecodeType decode_type); |
+ |
// Returns the set of images to invalidate on the sync tree. |
const PaintImageIdFlatSet& TakeImagesToInvalidateOnSyncTree(); |
@@ -70,7 +95,16 @@ class CC_EXPORT CheckerImageTracker { |
return !image_id_to_decode_.empty(); |
} |
+ int decode_priority_allowed_for_testing() const { |
+ return decode_priority_allowed_; |
+ } |
+ bool no_decodes_allowed_for_testing() const { |
+ return decode_priority_allowed_ == kNoDecodeAllowedPriority; |
+ } |
+ |
private: |
+ static const int kNoDecodeAllowedPriority; |
+ |
enum class DecodePolicy { |
// The image can be decoded asynchronously from raster. When set, the image |
// is always skipped during rasterization of content that includes this |
@@ -134,6 +168,9 @@ class CC_EXPORT CheckerImageTracker { |
// dependent on these images. |
ImageDecodeQueue image_decode_queue_; |
+ // The max decode type that is allowed to run, if decodes are allowed to run. |
+ int decode_priority_allowed_ = kNoDecodeAllowedPriority; |
+ |
// The currently outstanding image decode that has been scheduled with the |
// decode service. There can be only one outstanding decode at a time. |
base::Optional<PaintImage> outstanding_image_decode_; |