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