 Chromium Code Reviews
 Chromium Code Reviews Issue 2746153004:
  cc: Add more traces to checker imaging / image hijack code paths.  (Closed)
    
  
    Issue 2746153004:
  cc: Add more traces to checker imaging / image hijack code paths.  (Closed) 
  | 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 21 matching lines...) Expand all Loading... | |
| 32 CheckerImageTracker::~CheckerImageTracker() { | 32 CheckerImageTracker::~CheckerImageTracker() { | 
| 33 // Unlock all images pending decode requests. | 33 // Unlock all images pending decode requests. | 
| 34 for (auto it : image_id_to_decode_request_id_) | 34 for (auto it : image_id_to_decode_request_id_) | 
| 35 image_controller_->UnlockImageDecode(it.second); | 35 image_controller_->UnlockImageDecode(it.second); | 
| 36 } | 36 } | 
| 37 | 37 | 
| 38 void CheckerImageTracker::FilterImagesForCheckeringForTile( | 38 void CheckerImageTracker::FilterImagesForCheckeringForTile( | 
| 39 std::vector<DrawImage>* images, | 39 std::vector<DrawImage>* images, | 
| 40 ImageIdFlatSet* checkered_images, | 40 ImageIdFlatSet* checkered_images, | 
| 41 WhichTree tree) { | 41 WhichTree tree) { | 
| 42 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug"), | |
| 43 "CheckerImageTracker::FilterImagesForCheckeringForTile", "tree", | |
| 44 tree); | |
| 42 DCHECK(checkered_images->empty()); | 45 DCHECK(checkered_images->empty()); | 
| 43 | 46 | 
| 44 auto images_to_checker = std::remove_if( | 47 auto images_to_checker = std::remove_if( | 
| 45 images->begin(), images->end(), | 48 images->begin(), images->end(), | 
| 46 [this, tree, &checkered_images](const DrawImage& draw_image) { | 49 [this, tree, &checkered_images](const DrawImage& draw_image) { | 
| 47 const sk_sp<const SkImage>& image = draw_image.image(); | 50 const sk_sp<const SkImage>& image = draw_image.image(); | 
| 48 DCHECK(image->isLazyGenerated()); | 51 DCHECK(image->isLazyGenerated()); | 
| 49 if (ShouldCheckerImage(image, tree)) { | 52 if (ShouldCheckerImage(image, tree)) { | 
| 50 ScheduleImageDecodeIfNecessary(image); | 53 ScheduleImageDecodeIfNecessary(image); | 
| 51 checkered_images->insert(image->uniqueID()); | 54 checkered_images->insert(image->uniqueID()); | 
| 52 return true; | 55 return true; | 
| 53 } | 56 } | 
| 54 return false; | 57 return false; | 
| 55 }); | 58 }); | 
| 56 images->erase(images_to_checker, images->end()); | 59 images->erase(images_to_checker, images->end()); | 
| 57 } | 60 } | 
| 58 | 61 | 
| 59 const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() { | 62 const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() { | 
| 63 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), | |
| 64 "CheckerImageTracker::TakeImagesToInvalidateOnSyncTree"); | |
| 60 DCHECK_EQ(invalidated_images_on_current_sync_tree_.size(), 0u) | 65 DCHECK_EQ(invalidated_images_on_current_sync_tree_.size(), 0u) | 
| 61 << "Sync tree can not be invalidated more than once"; | 66 << "Sync tree can not be invalidated more than once"; | 
| 62 | 67 | 
| 63 invalidated_images_on_current_sync_tree_.swap(images_pending_invalidation_); | 68 invalidated_images_on_current_sync_tree_.swap(images_pending_invalidation_); | 
| 64 images_pending_invalidation_.clear(); | 69 images_pending_invalidation_.clear(); | 
| 65 return invalidated_images_on_current_sync_tree_; | 70 return invalidated_images_on_current_sync_tree_; | 
| 66 } | 71 } | 
| 67 | 72 | 
| 68 void CheckerImageTracker::DidActivateSyncTree() { | 73 void CheckerImageTracker::DidActivateSyncTree() { | 
| 74 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), | |
| 75 "CheckerImageTracker::DidActivateSyncTree"); | |
| 69 for (auto image_id : invalidated_images_on_current_sync_tree_) { | 76 for (auto image_id : invalidated_images_on_current_sync_tree_) { | 
| 70 auto it = image_id_to_decode_request_id_.find(image_id); | 77 auto it = image_id_to_decode_request_id_.find(image_id); | 
| 71 image_controller_->UnlockImageDecode(it->second); | 78 image_controller_->UnlockImageDecode(it->second); | 
| 72 image_id_to_decode_request_id_.erase(it); | 79 image_id_to_decode_request_id_.erase(it); | 
| 73 } | 80 } | 
| 74 | 81 | 
| 75 invalidated_images_on_current_sync_tree_.clear(); | 82 invalidated_images_on_current_sync_tree_.clear(); | 
| 76 } | 83 } | 
| 77 | 84 | 
| 78 void CheckerImageTracker::DidFinishImageDecode( | 85 void CheckerImageTracker::DidFinishImageDecode( | 
| 79 ImageId image_id, | 86 ImageId image_id, | 
| 80 ImageController::ImageDecodeRequestId request_id, | 87 ImageController::ImageDecodeRequestId request_id, | 
| 81 ImageController::ImageDecodeResult result) { | 88 ImageController::ImageDecodeResult result) { | 
| 89 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), | |
| 
Khushal
2017/03/14 20:15:19
Is the async one we already have here not enough?
 
vmpstr
2017/03/14 20:28:27
It appears in a different spot in the timeline vie
 | |
| 90 "CheckerImageTracker::DidFinishImageDecode"); | |
| 82 TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode", | 91 TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode", | 
| 83 image_id); | 92 image_id); | 
| 84 | 93 | 
| 85 DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED); | 94 DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED); | 
| 86 DCHECK_NE(pending_image_decodes_.count(image_id), 0u); | 95 DCHECK_NE(pending_image_decodes_.count(image_id), 0u); | 
| 87 pending_image_decodes_.erase(image_id); | 96 pending_image_decodes_.erase(image_id); | 
| 88 | 97 | 
| 89 images_decoded_once_.insert(image_id); | 98 images_decoded_once_.insert(image_id); | 
| 90 images_pending_invalidation_.insert(image_id); | 99 images_pending_invalidation_.insert(image_id); | 
| 91 client_->NeedsInvalidationForCheckerImagedTiles(); | 100 client_->NeedsInvalidationForCheckerImagedTiles(); | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 124 if (images_decoded_once_.find(image->uniqueID()) != | 133 if (images_decoded_once_.find(image->uniqueID()) != | 
| 125 images_decoded_once_.end()) { | 134 images_decoded_once_.end()) { | 
| 126 return false; | 135 return false; | 
| 127 } | 136 } | 
| 128 | 137 | 
| 129 return SafeSizeOfImage(image.get()) >= kMinImageSizeToCheckerBytes; | 138 return SafeSizeOfImage(image.get()) >= kMinImageSizeToCheckerBytes; | 
| 130 } | 139 } | 
| 131 | 140 | 
| 132 void CheckerImageTracker::ScheduleImageDecodeIfNecessary( | 141 void CheckerImageTracker::ScheduleImageDecodeIfNecessary( | 
| 133 const sk_sp<const SkImage>& image) { | 142 const sk_sp<const SkImage>& image) { | 
| 143 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), | |
| 144 "CheckerImageTracker::ScheduleImageDecodeIfNecessary"); | |
| 134 ImageId image_id = image->uniqueID(); | 145 ImageId image_id = image->uniqueID(); | 
| 135 | 146 | 
| 136 // If the image has already been decoded, or a decode request is pending, we | 147 // If the image has already been decoded, or a decode request is pending, we | 
| 137 // don't need to schedule another decode. | 148 // don't need to schedule another decode. | 
| 138 if (images_decoded_once_.count(image_id) != 0 || | 149 if (images_decoded_once_.count(image_id) != 0 || | 
| 139 pending_image_decodes_.count(image_id) != 0) { | 150 pending_image_decodes_.count(image_id) != 0) { | 
| 140 return; | 151 return; | 
| 141 } | 152 } | 
| 142 | 153 | 
| 143 TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode", | 154 TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode", | 
| 144 image_id); | 155 image_id); | 
| 145 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U); | 156 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U); | 
| 146 | 157 | 
| 147 image_id_to_decode_request_id_[image_id] = | 158 image_id_to_decode_request_id_[image_id] = | 
| 148 image_controller_->QueueImageDecode( | 159 image_controller_->QueueImageDecode( | 
| 149 image, base::Bind(&CheckerImageTracker::DidFinishImageDecode, | 160 image, base::Bind(&CheckerImageTracker::DidFinishImageDecode, | 
| 150 weak_factory_.GetWeakPtr(), image_id)); | 161 weak_factory_.GetWeakPtr(), image_id)); | 
| 151 pending_image_decodes_.insert(image_id); | 162 pending_image_decodes_.insert(image_id); | 
| 152 } | 163 } | 
| 153 | 164 | 
| 154 } // namespace cc | 165 } // namespace cc | 
| OLD | NEW |