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

Side by Side Diff: cc/tiles/checker_image_tracker.cc

Issue 2746153004: cc: Add more traces to checker imaging / image hijack code paths. (Closed)
Patch Set: rebase? Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « cc/playback/image_hijack_canvas.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 10
(...skipping 22 matching lines...) Expand all
33 CheckerImageTracker::~CheckerImageTracker() { 33 CheckerImageTracker::~CheckerImageTracker() {
34 // Unlock all images pending decode requests. 34 // Unlock all images pending decode requests.
35 for (auto it : image_id_to_decode_request_id_) 35 for (auto it : image_id_to_decode_request_id_)
36 image_controller_->UnlockImageDecode(it.second); 36 image_controller_->UnlockImageDecode(it.second);
37 } 37 }
38 38
39 void CheckerImageTracker::FilterImagesForCheckeringForTile( 39 void CheckerImageTracker::FilterImagesForCheckeringForTile(
40 std::vector<DrawImage>* images, 40 std::vector<DrawImage>* images,
41 ImageIdFlatSet* checkered_images, 41 ImageIdFlatSet* checkered_images,
42 WhichTree tree) { 42 WhichTree tree) {
43 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
44 "CheckerImageTracker::FilterImagesForCheckeringForTile", "tree",
45 tree);
43 DCHECK(checkered_images->empty()); 46 DCHECK(checkered_images->empty());
44 47
45 base::EraseIf(*images, 48 base::EraseIf(*images,
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 } 59 }
57 60
58 const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() { 61 const ImageIdFlatSet& CheckerImageTracker::TakeImagesToInvalidateOnSyncTree() {
62 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
63 "CheckerImageTracker::TakeImagesToInvalidateOnSyncTree");
59 DCHECK_EQ(invalidated_images_on_current_sync_tree_.size(), 0u) 64 DCHECK_EQ(invalidated_images_on_current_sync_tree_.size(), 0u)
60 << "Sync tree can not be invalidated more than once"; 65 << "Sync tree can not be invalidated more than once";
61 66
62 invalidated_images_on_current_sync_tree_.swap(images_pending_invalidation_); 67 invalidated_images_on_current_sync_tree_.swap(images_pending_invalidation_);
63 images_pending_invalidation_.clear(); 68 images_pending_invalidation_.clear();
64 return invalidated_images_on_current_sync_tree_; 69 return invalidated_images_on_current_sync_tree_;
65 } 70 }
66 71
67 void CheckerImageTracker::DidActivateSyncTree() { 72 void CheckerImageTracker::DidActivateSyncTree() {
73 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
74 "CheckerImageTracker::DidActivateSyncTree");
68 for (auto image_id : invalidated_images_on_current_sync_tree_) { 75 for (auto image_id : invalidated_images_on_current_sync_tree_) {
69 auto it = image_id_to_decode_request_id_.find(image_id); 76 auto it = image_id_to_decode_request_id_.find(image_id);
70 image_controller_->UnlockImageDecode(it->second); 77 image_controller_->UnlockImageDecode(it->second);
71 image_id_to_decode_request_id_.erase(it); 78 image_id_to_decode_request_id_.erase(it);
72 } 79 }
73 80
74 invalidated_images_on_current_sync_tree_.clear(); 81 invalidated_images_on_current_sync_tree_.clear();
75 } 82 }
76 83
77 void CheckerImageTracker::DidFinishImageDecode( 84 void CheckerImageTracker::DidFinishImageDecode(
78 ImageId image_id, 85 ImageId image_id,
79 ImageController::ImageDecodeRequestId request_id, 86 ImageController::ImageDecodeRequestId request_id,
80 ImageController::ImageDecodeResult result) { 87 ImageController::ImageDecodeResult result) {
88 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
89 "CheckerImageTracker::DidFinishImageDecode");
81 TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode", 90 TRACE_EVENT_ASYNC_END0("cc", "CheckerImageTracker::DeferImageDecode",
82 image_id); 91 image_id);
83 92
84 DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED); 93 DCHECK_NE(result, ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED);
85 DCHECK_NE(pending_image_decodes_.count(image_id), 0u); 94 DCHECK_NE(pending_image_decodes_.count(image_id), 0u);
86 pending_image_decodes_.erase(image_id); 95 pending_image_decodes_.erase(image_id);
87 96
88 images_decoded_once_.insert(image_id); 97 images_decoded_once_.insert(image_id);
89 images_pending_invalidation_.insert(image_id); 98 images_pending_invalidation_.insert(image_id);
90 client_->NeedsInvalidationForCheckerImagedTiles(); 99 client_->NeedsInvalidationForCheckerImagedTiles();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 if (images_decoded_once_.find(image->uniqueID()) != 132 if (images_decoded_once_.find(image->uniqueID()) !=
124 images_decoded_once_.end()) { 133 images_decoded_once_.end()) {
125 return false; 134 return false;
126 } 135 }
127 136
128 return SafeSizeOfImage(image.get()) >= kMinImageSizeToCheckerBytes; 137 return SafeSizeOfImage(image.get()) >= kMinImageSizeToCheckerBytes;
129 } 138 }
130 139
131 void CheckerImageTracker::ScheduleImageDecodeIfNecessary( 140 void CheckerImageTracker::ScheduleImageDecodeIfNecessary(
132 const sk_sp<const SkImage>& image) { 141 const sk_sp<const SkImage>& image) {
142 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
143 "CheckerImageTracker::ScheduleImageDecodeIfNecessary");
133 ImageId image_id = image->uniqueID(); 144 ImageId image_id = image->uniqueID();
134 145
135 // If the image has already been decoded, or a decode request is pending, we 146 // If the image has already been decoded, or a decode request is pending, we
136 // don't need to schedule another decode. 147 // don't need to schedule another decode.
137 if (images_decoded_once_.count(image_id) != 0 || 148 if (images_decoded_once_.count(image_id) != 0 ||
138 pending_image_decodes_.count(image_id) != 0) { 149 pending_image_decodes_.count(image_id) != 0) {
139 return; 150 return;
140 } 151 }
141 152
142 TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode", 153 TRACE_EVENT_ASYNC_BEGIN0("cc", "CheckerImageTracker::DeferImageDecode",
143 image_id); 154 image_id);
144 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U); 155 DCHECK_EQ(image_id_to_decode_request_id_.count(image_id), 0U);
145 156
146 image_id_to_decode_request_id_[image_id] = 157 image_id_to_decode_request_id_[image_id] =
147 image_controller_->QueueImageDecode( 158 image_controller_->QueueImageDecode(
148 image, base::Bind(&CheckerImageTracker::DidFinishImageDecode, 159 image, base::Bind(&CheckerImageTracker::DidFinishImageDecode,
149 weak_factory_.GetWeakPtr(), image_id)); 160 weak_factory_.GetWeakPtr(), image_id));
150 pending_image_decodes_.insert(image_id); 161 pending_image_decodes_.insert(image_id);
151 } 162 }
152 163
153 } // namespace cc 164 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/image_hijack_canvas.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698