Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1602)

Unified Diff: cc/tiles/checker_image_tracker.h

Issue 2869513002: cc: Clear checker-image tracking on navigation and visibility changes. (Closed)
Patch Set: missed pending invalidations Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/tiles/checker_image_tracker.cc » ('j') | cc/tiles/checker_image_tracker.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/tiles/checker_image_tracker.h
diff --git a/cc/tiles/checker_image_tracker.h b/cc/tiles/checker_image_tracker.h
index db5ccf404594a38c5cede7ce3e683180e73a7be8..7f662e51cdcb7bdd7a871c8dfae60b27a4411e59 100644
--- a/cc/tiles/checker_image_tracker.h
+++ b/cc/tiles/checker_image_tracker.h
@@ -47,8 +47,16 @@ class CC_EXPORT CheckerImageTracker {
// Returns the set of images to invalidate on the sync tree.
const ImageIdFlatSet& TakeImagesToInvalidateOnSyncTree();
+ // Called when the sync tree is activated. Each call to
+ // TakeImagesToInvalidateOnSyncTree() must be followed by this when the
+ // invalidated sync tree is activated.
void DidActivateSyncTree();
+ // Called to reset the tracker state on navigation. This will release all
+ // cached images. Setting |can_clear_decode_policy_tracking| will also result
+ // in re-checkering any images already decoded by the tracker.
+ void ClearTracker(bool can_clear_decode_policy_tracking);
+
private:
enum class DecodePolicy {
// The image can be decoded asynchronously from raster. When set, the image
@@ -62,6 +70,22 @@ class CC_EXPORT CheckerImageTracker {
SYNC_PERMANENT,
};
+ // Wrapper to unlock an image decode requested from the ImageController on
+ // destruction.
+ class ScopedDecodeHolder {
+ public:
+ ScopedDecodeHolder(ImageController* controller,
+ ImageController::ImageDecodeRequestId request_id)
+ : controller_(controller), request_id_(request_id) {}
+ ~ScopedDecodeHolder() { controller_->UnlockImageDecode(request_id_); }
+
+ private:
+ ImageController* controller_;
+ ImageController::ImageDecodeRequestId request_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedDecodeHolder);
+ };
+
void DidFinishImageDecode(ImageId image_id,
ImageController::ImageDecodeRequestId request_id,
ImageController::ImageDecodeResult result);
@@ -91,14 +115,11 @@ class CC_EXPORT CheckerImageTracker {
sk_sp<const SkImage> outstanding_image_decode_;
// A map of ImageId to its DecodePolicy.
- // TODO(khushalsagar): Limit the size of this set.
- // TODO(khushalsagar): Plumb navigation changes here to reset this. See
- // crbug.com/693228.
std::unordered_map<ImageId, DecodePolicy> image_async_decode_state_;
// A map of image id to image decode request id for images to be unlocked.
- std::unordered_map<ImageId, ImageController::ImageDecodeRequestId>
- image_id_to_decode_request_id_;
+ std::unordered_map<ImageId, std::unique_ptr<ScopedDecodeHolder>>
+ image_id_to_decode_;
base::WeakPtrFactory<CheckerImageTracker> weak_factory_;
};
« no previous file with comments | « no previous file | cc/tiles/checker_image_tracker.cc » ('j') | cc/tiles/checker_image_tracker.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698