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() { | |
vmpstr
2017/03/06 20:45:25
What is this function doing? Can you comment/expla
Khushal
2017/03/07 00:31:08
Done. I added a comment on the header.
| |
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 std::queue<sk_sp<const SkImage>> empty_queue; | |
76 image_decode_request_queue_.swap(empty_queue); | |
77 pending_image_decodes_.clear(); | |
78 | |
79 pending_image_decodes_.insert(pending_image_decode->uniqueID()); | |
80 image_decode_request_queue_.push(std::move(pending_image_decode)); | |
81 } | |
82 | |
68 void CheckerImageTracker::DidActivateSyncTree() { | 83 void CheckerImageTracker::DidActivateSyncTree() { |
69 for (auto image_id : invalidated_images_on_current_sync_tree_) { | 84 for (auto image_id : invalidated_images_on_current_sync_tree_) { |
70 auto it = image_id_to_decode_request_id_.find(image_id); | 85 auto it = image_id_to_decode_request_id_.find(image_id); |
71 image_controller_->UnlockImageDecode(it->second); | 86 image_controller_->UnlockImageDecode(it->second); |
72 image_id_to_decode_request_id_.erase(it); | 87 image_id_to_decode_request_id_.erase(it); |
73 } | 88 } |
74 | 89 |
75 invalidated_images_on_current_sync_tree_.clear(); | 90 invalidated_images_on_current_sync_tree_.clear(); |
76 } | 91 } |
77 | 92 |
78 void CheckerImageTracker::DidFinishImageDecode( | 93 void CheckerImageTracker::DidFinishImageDecode( |
79 ImageId image_id, | 94 ImageId image_id, |
80 ImageController::ImageDecodeRequestId request_id, | 95 ImageController::ImageDecodeRequestId request_id, |
81 ImageController::ImageDecodeResult result) { | 96 ImageController::ImageDecodeResult result) { |
82 TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode", | 97 TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode", |
83 image_id); | 98 image_id); |
84 | 99 |
85 DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED); | 100 DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED); |
86 DCHECK_NE(pending_image_decodes_.count(image_id), 0u); | 101 DCHECK_NE(pending_image_decodes_.count(image_id), 0u); |
102 DCHECK_EQ(image_id, image_decode_request_queue_.front()->uniqueID()); | |
103 | |
87 pending_image_decodes_.erase(image_id); | 104 pending_image_decodes_.erase(image_id); |
105 image_decode_request_queue_.pop(); | |
106 RequestNextImageDecode(); | |
88 | 107 |
89 images_decoded_once_.insert(image_id); | 108 images_decoded_once_.insert(image_id); |
90 images_pending_invalidation_.insert(image_id); | 109 images_pending_invalidation_.insert(image_id); |
91 client_->NeedsInvalidationForCheckerImagedTiles(); | 110 client_->NeedsInvalidationForCheckerImagedTiles(); |
92 } | 111 } |
93 | 112 |
94 bool CheckerImageTracker::ShouldCheckerImage(const sk_sp<const SkImage>& image, | 113 bool CheckerImageTracker::ShouldCheckerImage(const sk_sp<const SkImage>& image, |
95 WhichTree tree) const { | 114 WhichTree tree) const { |
96 TRACE_EVENT1("cc", "CheckerImageTracker::ShouldCheckerImage", "image_id", | 115 TRACE_EVENT1("cc", "CheckerImageTracker::ShouldCheckerImage", "image_id", |
97 image->uniqueID()); | 116 image->uniqueID()); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
137 // don't need to schedule another decode. | 156 // don't need to schedule another decode. |
138 if (images_decoded_once_.count(image_id) != 0 || | 157 if (images_decoded_once_.count(image_id) != 0 || |
139 pending_image_decodes_.count(image_id) != 0) { | 158 pending_image_decodes_.count(image_id) != 0) { |
140 return; | 159 return; |
141 } | 160 } |
142 | 161 |
143 TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode", | 162 TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode", |
144 image_id); | 163 image_id); |
145 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U); | 164 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U); |
146 | 165 |
166 pending_image_decodes_.insert(image_id); | |
167 image_decode_request_queue_.push(image); | |
168 if (image_decode_request_queue_.size() == 1) | |
vmpstr
2017/03/06 20:45:25
1u
Khushal
2017/03/07 00:31:08
Done.
| |
169 RequestNextImageDecode(); | |
170 } | |
171 | |
172 void CheckerImageTracker::RequestNextImageDecode() { | |
173 if (image_decode_request_queue_.empty()) | |
174 return; | |
175 | |
176 sk_sp<const SkImage>& image = image_decode_request_queue_.front(); | |
177 ImageId image_id = image->uniqueID(); | |
178 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0u); | |
179 | |
147 image_id_to_decode_request_id_[image_id] = | 180 image_id_to_decode_request_id_[image_id] = |
148 image_controller_->QueueImageDecode( | 181 image_controller_->QueueImageDecode( |
149 image, base::Bind(&CheckerImageTracker::DidFinishImageDecode, | 182 image, base::Bind(&CheckerImageTracker::DidFinishImageDecode, |
150 weak_factory_.GetWeakPtr(), image_id)); | 183 weak_factory_.GetWeakPtr(), image_id)); |
151 pending_image_decodes_.insert(image_id); | |
152 } | 184 } |
153 | 185 |
154 } // namespace cc | 186 } // namespace cc |
OLD | NEW |