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

Side by Side Diff: cc/playback/discardable_image_map.cc

Issue 2552903002: Revert of cc: Build Image to Region map during image meta-data generation. (patchset #6 id:100001 o… (Closed)
Patch Set: Created 4 years 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/discardable_image_map.h ('k') | cc/playback/discardable_image_map_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/playback/discardable_image_map.h" 5 #include "cc/playback/discardable_image_map.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <limits> 10 #include <limits>
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 53
54 namespace { 54 namespace {
55 55
56 // We're using an NWay canvas with no added canvases, so in effect 56 // We're using an NWay canvas with no added canvases, so in effect
57 // non-overridden functions are no-ops. 57 // non-overridden functions are no-ops.
58 class DiscardableImagesMetadataCanvas : public SkNWayCanvas { 58 class DiscardableImagesMetadataCanvas : public SkNWayCanvas {
59 public: 59 public:
60 DiscardableImagesMetadataCanvas( 60 DiscardableImagesMetadataCanvas(
61 int width, 61 int width,
62 int height, 62 int height,
63 std::vector<std::pair<DrawImage, gfx::Rect>>* image_set, 63 std::vector<std::pair<DrawImage, gfx::Rect>>* image_set)
64 DiscardableImageMap::ImageToRegionMap* image_to_region)
65 : SkNWayCanvas(width, height), 64 : SkNWayCanvas(width, height),
66 image_set_(image_set), 65 image_set_(image_set),
67 image_id_to_region_(image_to_region),
68 canvas_bounds_(SkRect::MakeIWH(width, height)), 66 canvas_bounds_(SkRect::MakeIWH(width, height)),
69 canvas_size_(width, height) {} 67 canvas_size_(width, height) {}
70 68
71 protected: 69 protected:
72 // we need to "undo" the behavior of SkNWayCanvas, which will try to forward 70 // we need to "undo" the behavior of SkNWayCanvas, which will try to forward
73 // it. 71 // it.
74 void onDrawPicture(const SkPicture* picture, 72 void onDrawPicture(const SkPicture* picture,
75 const SkMatrix* matrix, 73 const SkMatrix* matrix,
76 const SkPaint* paint) override { 74 const SkPaint* paint) override {
77 SkCanvas::onDrawPicture(picture, matrix, paint); 75 SkCanvas::onDrawPicture(picture, matrix, paint);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 if (!paint_rect.intersects(canvas_bounds_)) 165 if (!paint_rect.intersects(canvas_bounds_))
168 return; 166 return;
169 167
170 SkFilterQuality filter_quality = kNone_SkFilterQuality; 168 SkFilterQuality filter_quality = kNone_SkFilterQuality;
171 if (paint) { 169 if (paint) {
172 filter_quality = paint->getFilterQuality(); 170 filter_quality = paint->getFilterQuality();
173 } 171 }
174 172
175 SkIRect src_irect; 173 SkIRect src_irect;
176 src_rect.roundOut(&src_irect); 174 src_rect.roundOut(&src_irect);
177 gfx::Rect image_rect = SafeClampPaintRectToSize(paint_rect, canvas_size_);
178
179 Region& region = (*image_id_to_region_)[image->uniqueID()];
180 region.Union(image_rect);
181
182 image_set_->push_back(std::make_pair( 175 image_set_->push_back(std::make_pair(
183 DrawImage(std::move(image), src_irect, filter_quality, matrix), 176 DrawImage(std::move(image), src_irect, filter_quality, matrix),
184 image_rect)); 177 SafeClampPaintRectToSize(paint_rect, canvas_size_)));
185 } 178 }
186 179
187 std::vector<std::pair<DrawImage, gfx::Rect>>* image_set_; 180 std::vector<std::pair<DrawImage, gfx::Rect>>* image_set_;
188 DiscardableImageMap::ImageToRegionMap* image_id_to_region_;
189 const SkRect canvas_bounds_; 181 const SkRect canvas_bounds_;
190 const gfx::Size canvas_size_; 182 const gfx::Size canvas_size_;
191 std::vector<SkPaint> saved_paints_; 183 std::vector<SkPaint> saved_paints_;
192 }; 184 };
193 185
194 } // namespace 186 } // namespace
195 187
196 DiscardableImageMap::DiscardableImageMap() {} 188 DiscardableImageMap::DiscardableImageMap() {}
197 189
198 DiscardableImageMap::~DiscardableImageMap() {} 190 DiscardableImageMap::~DiscardableImageMap() {}
199 191
200 sk_sp<SkCanvas> DiscardableImageMap::BeginGeneratingMetadata( 192 sk_sp<SkCanvas> DiscardableImageMap::BeginGeneratingMetadata(
201 const gfx::Size& bounds) { 193 const gfx::Size& bounds) {
202 DCHECK(all_images_.empty()); 194 DCHECK(all_images_.empty());
203 return sk_make_sp<DiscardableImagesMetadataCanvas>( 195 return sk_make_sp<DiscardableImagesMetadataCanvas>(
204 bounds.width(), bounds.height(), &all_images_, &image_id_to_region_); 196 bounds.width(), bounds.height(), &all_images_);
205 } 197 }
206 198
207 void DiscardableImageMap::EndGeneratingMetadata() { 199 void DiscardableImageMap::EndGeneratingMetadata() {
208 images_rtree_.Build(all_images_, 200 images_rtree_.Build(all_images_,
209 [](const std::pair<DrawImage, gfx::Rect>& image) { 201 [](const std::pair<DrawImage, gfx::Rect>& image) {
210 return image.second; 202 return image.second;
211 }); 203 });
212 } 204 }
213 205
214 void DiscardableImageMap::GetDiscardableImagesInRect( 206 void DiscardableImageMap::GetDiscardableImagesInRect(
215 const gfx::Rect& rect, 207 const gfx::Rect& rect,
216 const gfx::SizeF& raster_scales, 208 const gfx::SizeF& raster_scales,
217 std::vector<DrawImage>* images) const { 209 std::vector<DrawImage>* images) const {
218 std::vector<size_t> indices; 210 std::vector<size_t> indices;
219 images_rtree_.Search(rect, &indices); 211 images_rtree_.Search(rect, &indices);
220 for (size_t index : indices) 212 for (size_t index : indices)
221 images->push_back(all_images_[index].first.ApplyScale(raster_scales)); 213 images->push_back(all_images_[index].first.ApplyScale(raster_scales));
222 } 214 }
223 215
224 Region DiscardableImageMap::GetRegionForImage(uint32_t image_id) const {
225 const auto& it = image_id_to_region_.find(image_id);
226 return it == image_id_to_region_.end() ? Region() : it->second;
227 }
228
229 DiscardableImageMap::ScopedMetadataGenerator::ScopedMetadataGenerator( 216 DiscardableImageMap::ScopedMetadataGenerator::ScopedMetadataGenerator(
230 DiscardableImageMap* image_map, 217 DiscardableImageMap* image_map,
231 const gfx::Size& bounds) 218 const gfx::Size& bounds)
232 : image_map_(image_map), 219 : image_map_(image_map),
233 metadata_canvas_(image_map->BeginGeneratingMetadata(bounds)) {} 220 metadata_canvas_(image_map->BeginGeneratingMetadata(bounds)) {}
234 221
235 DiscardableImageMap::ScopedMetadataGenerator::~ScopedMetadataGenerator() { 222 DiscardableImageMap::ScopedMetadataGenerator::~ScopedMetadataGenerator() {
236 image_map_->EndGeneratingMetadata(); 223 image_map_->EndGeneratingMetadata();
237 } 224 }
238 225
239 } // namespace cc 226 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/discardable_image_map.h ('k') | cc/playback/discardable_image_map_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698