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

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: 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/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
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
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
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