Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/tiles/checker_image_tracker.h" | 5 #include "cc/tiles/checker_image_tracker.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/trace_event/trace_event.h" | 8 #include "base/trace_event/trace_event.h" |
| 9 | 9 |
| 10 namespace cc { | 10 namespace cc { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 58 | 58 |
| 59 const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() { | 59 const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() { |
| 60 DCHECK_EQ(invalidated_images_on_current_sync_tree_.size(), 0u) | 60 DCHECK_EQ(invalidated_images_on_current_sync_tree_.size(), 0u) |
| 61 << "Sync tree can not be invalidated more than once"; | 61 << "Sync tree can not be invalidated more than once"; |
| 62 | 62 |
| 63 invalidated_images_on_current_sync_tree_.swap(images_pending_invalidation_); | 63 invalidated_images_on_current_sync_tree_.swap(images_pending_invalidation_); |
| 64 images_pending_invalidation_.clear(); | 64 images_pending_invalidation_.clear(); |
| 65 return invalidated_images_on_current_sync_tree_; | 65 return invalidated_images_on_current_sync_tree_; |
| 66 } | 66 } |
| 67 | 67 |
| 68 void CheckerImageTracker::ResetImageDecodeQueue() { | |
| 69 if (image_decode_request_queue_.empty()) | |
| 70 return; | |
| 71 DCHECK(enable_checker_imaging_); | |
| 72 | |
| 73 sk_sp<const SkImage> pending_image_decode = | |
| 74 image_decode_request_queue_.front(); | |
| 75 image_decode_request_queue_.clear(); | |
| 76 pending_image_decodes_.clear(); | |
| 77 | |
| 78 pending_image_decodes_.insert(pending_image_decode->uniqueID()); | |
|
vmpstr
2017/03/07 19:25:08
I guess my confusion comes from the implementation
Khushal
2017/03/13 20:35:08
Removed the function. I think instead of having a
| |
| 79 image_decode_request_queue_.push_back(std::move(pending_image_decode)); | |
| 80 } | |
| 81 | |
| 68 void CheckerImageTracker::DidActivateSyncTree() { | 82 void CheckerImageTracker::DidActivateSyncTree() { |
| 69 for (auto image_id : invalidated_images_on_current_sync_tree_) { | 83 for (auto image_id : invalidated_images_on_current_sync_tree_) { |
| 70 auto it = image_id_to_decode_request_id_.find(image_id); | 84 auto it = image_id_to_decode_request_id_.find(image_id); |
| 71 image_controller_->UnlockImageDecode(it->second); | 85 image_controller_->UnlockImageDecode(it->second); |
| 72 image_id_to_decode_request_id_.erase(it); | 86 image_id_to_decode_request_id_.erase(it); |
| 73 } | 87 } |
| 74 | 88 |
| 75 invalidated_images_on_current_sync_tree_.clear(); | 89 invalidated_images_on_current_sync_tree_.clear(); |
| 76 } | 90 } |
| 77 | 91 |
| 78 void CheckerImageTracker::DidFinishImageDecode( | 92 void CheckerImageTracker::DidFinishImageDecode( |
| 79 ImageId image_id, | 93 ImageId image_id, |
| 80 ImageController::ImageDecodeRequestId request_id, | 94 ImageController::ImageDecodeRequestId request_id, |
| 81 ImageController::ImageDecodeResult result) { | 95 ImageController::ImageDecodeResult result) { |
| 82 TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode", | 96 TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode", |
| 83 image_id); | 97 image_id); |
| 84 | 98 |
| 85 DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED); | 99 DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED); |
| 86 DCHECK_NE(pending_image_decodes_.count(image_id), 0u); | 100 DCHECK_NE(pending_image_decodes_.count(image_id), 0u); |
| 101 DCHECK_EQ(image_id, image_decode_request_queue_.front()->uniqueID()); | |
| 102 | |
| 87 pending_image_decodes_.erase(image_id); | 103 pending_image_decodes_.erase(image_id); |
| 104 image_decode_request_queue_.erase(image_decode_request_queue_.begin()); | |
|
vmpstr
2017/03/07 19:25:08
"pop_front"? Unless the type doesn't have it
Khushal
2017/03/13 20:35:08
Not needed anymore.
| |
| 105 ScheduleNextImageDecode(); | |
| 88 | 106 |
| 89 images_decoded_once_.insert(image_id); | 107 images_decoded_once_.insert(image_id); |
| 90 images_pending_invalidation_.insert(image_id); | 108 images_pending_invalidation_.insert(image_id); |
| 91 client_->NeedsInvalidationForCheckerImagedTiles(); | 109 client_->NeedsInvalidationForCheckerImagedTiles(); |
| 92 } | 110 } |
| 93 | 111 |
| 94 bool CheckerImageTracker::ShouldCheckerImage(const sk_sp<const SkImage>& image, | 112 bool CheckerImageTracker::ShouldCheckerImage(const sk_sp<const SkImage>& image, |
| 95 WhichTree tree) const { | 113 WhichTree tree) const { |
| 96 TRACE_EVENT1("cc", "CheckerImageTracker::ShouldCheckerImage", "image_id", | 114 TRACE_EVENT1("cc", "CheckerImageTracker::ShouldCheckerImage", "image_id", |
| 97 image->uniqueID()); | 115 image->uniqueID()); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 137 // don't need to schedule another decode. | 155 // don't need to schedule another decode. |
| 138 if (images_decoded_once_.count(image_id) != 0 || | 156 if (images_decoded_once_.count(image_id) != 0 || |
| 139 pending_image_decodes_.count(image_id) != 0) { | 157 pending_image_decodes_.count(image_id) != 0) { |
| 140 return; | 158 return; |
| 141 } | 159 } |
| 142 | 160 |
| 143 TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode", | 161 TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode", |
| 144 image_id); | 162 image_id); |
| 145 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U); | 163 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U); |
| 146 | 164 |
| 165 pending_image_decodes_.insert(image_id); | |
| 166 image_decode_request_queue_.push_back(image); | |
| 167 if (image_decode_request_queue_.size() == 1u) | |
| 168 ScheduleNextImageDecode(); | |
| 169 } | |
| 170 | |
| 171 void CheckerImageTracker::ScheduleNextImageDecode() { | |
| 172 if (image_decode_request_queue_.empty()) | |
| 173 return; | |
| 174 | |
| 175 sk_sp<const SkImage>& image = image_decode_request_queue_.front(); | |
| 176 ImageId image_id = image->uniqueID(); | |
| 177 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0u); | |
| 178 | |
| 147 image_id_to_decode_request_id_[image_id] = | 179 image_id_to_decode_request_id_[image_id] = |
| 148 image_controller_->QueueImageDecode( | 180 image_controller_->QueueImageDecode( |
| 149 image, base::Bind(&CheckerImageTracker::DidFinishImageDecode, | 181 image, base::Bind(&CheckerImageTracker::DidFinishImageDecode, |
| 150 weak_factory_.GetWeakPtr(), image_id)); | 182 weak_factory_.GetWeakPtr(), image_id)); |
| 151 pending_image_decodes_.insert(image_id); | |
| 152 } | 183 } |
| 153 | 184 |
| 154 } // namespace cc | 185 } // namespace cc |
| OLD | NEW |