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

Unified Diff: cc/tiles/checker_image_tracker.cc

Issue 2857923004: cc: Keep PaintImage in DrawImage. (Closed)
Patch Set: .. 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 | « cc/tiles/checker_image_tracker.h ('k') | cc/tiles/checker_image_tracker_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/tiles/checker_image_tracker.cc
diff --git a/cc/tiles/checker_image_tracker.cc b/cc/tiles/checker_image_tracker.cc
index 93ee71f10c0eb811c8f20f96249212a10013789c..022269d87a95fa52d4661581e4c527c4799f32d4 100644
--- a/cc/tiles/checker_image_tracker.cc
+++ b/cc/tiles/checker_image_tracker.cc
@@ -46,7 +46,8 @@ void CheckerImageTracker::ScheduleImageDecodeQueue(
ScheduleNextImageDecode();
}
-const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() {
+const PaintImageIdFlatSet&
+CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"CheckerImageTracker::TakeImagesToInvalidateOnSyncTree");
DCHECK_EQ(invalidated_images_on_current_sync_tree_.size(), 0u)
@@ -98,7 +99,7 @@ void CheckerImageTracker::ClearTracker(bool can_clear_decode_policy_tracking) {
}
void CheckerImageTracker::DidFinishImageDecode(
- ImageId image_id,
+ PaintImage::Id image_id,
ImageController::ImageDecodeRequestId request_id,
ImageController::ImageDecodeResult result) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
@@ -107,8 +108,8 @@ void CheckerImageTracker::DidFinishImageDecode(
image_id);
DCHECK_NE(ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED, result);
- DCHECK_EQ(outstanding_image_decode_->uniqueID(), image_id);
- outstanding_image_decode_ = nullptr;
+ DCHECK_EQ(outstanding_image_decode_.value().stable_id(), image_id);
+ outstanding_image_decode_.reset();
// The async decode state may have been cleared if the tracker was cleared
// before this decode could be finished.
@@ -124,39 +125,46 @@ void CheckerImageTracker::DidFinishImageDecode(
client_->NeedsInvalidationForCheckerImagedTiles();
}
-bool CheckerImageTracker::ShouldCheckerImage(const sk_sp<const SkImage>& image,
+bool CheckerImageTracker::ShouldCheckerImage(const PaintImage& image,
WhichTree tree) {
TRACE_EVENT1("cc", "CheckerImageTracker::ShouldCheckerImage", "image_id",
- image->uniqueID());
+ image.stable_id());
if (!enable_checker_imaging_)
return false;
+ PaintImage::Id image_id = image.stable_id();
+
// If the image was invalidated on the current sync tree and the tile is
// for the active tree, continue checkering it on the active tree to ensure
// the image update is atomic for the frame.
- if (invalidated_images_on_current_sync_tree_.count(image->uniqueID()) != 0 &&
+ if (invalidated_images_on_current_sync_tree_.count(image_id) != 0 &&
tree == WhichTree::ACTIVE_TREE) {
return true;
}
// If the image is pending invalidation, continue checkering it. All tiles
// for these images will be invalidated on the next pending tree.
- if (images_pending_invalidation_.find(image->uniqueID()) !=
+ if (images_pending_invalidation_.find(image_id) !=
images_pending_invalidation_.end()) {
return true;
}
- ImageId image_id = image->uniqueID();
- auto insert_result = image_async_decode_state_.insert(
- std::pair<ImageId, DecodePolicy>(image_id, DecodePolicy::ASYNC));
+ auto insert_result =
+ image_async_decode_state_.insert(std::pair<PaintImage::Id, DecodePolicy>(
+ image_id, DecodePolicy::SYNC_PERMANENT));
auto it = insert_result.first;
if (insert_result.second) {
- size_t size = SafeSizeOfImage(image.get());
- it->second = (size >= kMinImageSizeToCheckerBytes &&
- size <= image_controller_->image_cache_max_limit_bytes())
- ? DecodePolicy::ASYNC
- : DecodePolicy::SYNC_PERMANENT;
+ bool can_checker_image =
+ image.animation_type() == PaintImage::AnimationType::STATIC &&
+ image.completion_state() == PaintImage::CompletionState::DONE;
+ if (can_checker_image) {
+ size_t size = SafeSizeOfImage(image.sk_image().get());
+ it->second = (size >= kMinImageSizeToCheckerBytes &&
+ size <= image_controller_->image_cache_max_limit_bytes())
+ ? DecodePolicy::ASYNC
+ : DecodePolicy::SYNC_PERMANENT;
+ }
}
return it->second == DecodePolicy::ASYNC;
@@ -167,7 +175,7 @@ void CheckerImageTracker::ScheduleNextImageDecode() {
"CheckerImageTracker::ScheduleNextImageDecode");
// We can have only one outsanding decode pending completion with the decode
// service. We'll come back here when it is completed.
- if (outstanding_image_decode_)
+ if (outstanding_image_decode_.has_value())
return;
while (!image_decode_queue_.empty()) {
@@ -178,30 +186,30 @@ void CheckerImageTracker::ScheduleNextImageDecode() {
// queue (duplicate entries), or while an image is still being skipped on
// the active tree. Check if the image is still ASYNC to see if a decode is
// needed.
- ImageId image_id = candidate->uniqueID();
+ PaintImage::Id image_id = candidate.stable_id();
auto it = image_async_decode_state_.find(image_id);
DCHECK(it != image_async_decode_state_.end());
if (it->second != DecodePolicy::ASYNC)
continue;
- outstanding_image_decode_ = std::move(candidate);
+ outstanding_image_decode_.emplace(candidate);
break;
}
// We either found an image to decode or we reached the end of the queue. If
// we couldn't find an image, we're done.
- if (!outstanding_image_decode_) {
+ if (!outstanding_image_decode_.has_value()) {
DCHECK(image_decode_queue_.empty());
return;
}
- ImageId image_id = outstanding_image_decode_->uniqueID();
+ PaintImage::Id image_id = outstanding_image_decode_.value().stable_id();
DCHECK_EQ(image_id_to_decode_.count(image_id), 0u);
TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode",
image_id);
ImageController::ImageDecodeRequestId request_id =
image_controller_->QueueImageDecode(
- outstanding_image_decode_,
+ outstanding_image_decode_.value().sk_image(),
base::Bind(&CheckerImageTracker::DidFinishImageDecode,
weak_factory_.GetWeakPtr(), image_id));
« no previous file with comments | « cc/tiles/checker_image_tracker.h ('k') | cc/tiles/checker_image_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698