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

Unified Diff: cc/playback/discardable_image_map.cc

Issue 2496283004: cc: Build Image to Region map during image meta-data generation. (Closed)
Patch Set: Fix Rebase Created 4 years, 1 month 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/playback/discardable_image_map.cc
diff --git a/cc/playback/discardable_image_map.cc b/cc/playback/discardable_image_map.cc
index e4ae644e227528982399d5d61232ff5c21062904..74f830df3470eb8c84e1f8cd846f2d859c4ece77 100644
--- a/cc/playback/discardable_image_map.cc
+++ b/cc/playback/discardable_image_map.cc
@@ -61,9 +61,11 @@ class DiscardableImagesMetadataCanvas : public SkNWayCanvas {
DiscardableImagesMetadataCanvas(
int width,
int height,
- std::vector<std::pair<DrawImage, gfx::Rect>>* image_set)
+ std::vector<std::pair<DrawImage, gfx::Rect>>* image_set,
+ DiscardableImageMap::ImageToRegionMap* image_to_region)
: SkNWayCanvas(width, height),
image_set_(image_set),
+ image_id_to_region_(image_to_region),
canvas_bounds_(SkRect::MakeIWH(width, height)),
canvas_size_(width, height) {}
@@ -173,12 +175,18 @@ class DiscardableImagesMetadataCanvas : public SkNWayCanvas {
SkIRect src_irect;
src_rect.roundOut(&src_irect);
+ gfx::Rect image_rect = SafeClampPaintRectToSize(paint_rect, canvas_size_);
+
+ Region& region = (*image_id_to_region_)[image->uniqueID()];
+ region.Union(image_rect);
+
image_set_->push_back(std::make_pair(
DrawImage(std::move(image), src_irect, filter_quality, matrix),
- SafeClampPaintRectToSize(paint_rect, canvas_size_)));
+ image_rect));
}
std::vector<std::pair<DrawImage, gfx::Rect>>* image_set_;
+ DiscardableImageMap::ImageToRegionMap* image_id_to_region_;
const SkRect canvas_bounds_;
const gfx::Size canvas_size_;
std::vector<SkPaint> saved_paints_;
@@ -194,7 +202,7 @@ std::unique_ptr<SkCanvas> DiscardableImageMap::BeginGeneratingMetadata(
const gfx::Size& bounds) {
DCHECK(all_images_.empty());
return base::MakeUnique<DiscardableImagesMetadataCanvas>(
- bounds.width(), bounds.height(), &all_images_);
+ bounds.width(), bounds.height(), &all_images_, &image_id_to_region_);
}
void DiscardableImageMap::EndGeneratingMetadata() {
@@ -214,6 +222,11 @@ void DiscardableImageMap::GetDiscardableImagesInRect(
images->push_back(all_images_[index].first.ApplyScale(raster_scales));
}
+Region DiscardableImageMap::GetRegionForImage(uint32_t image_id) const {
+ const auto& it = image_id_to_region_.find(image_id);
+ return it == image_id_to_region_.end() ? Region() : it->second;
+}
+
DiscardableImageMap::ScopedMetadataGenerator::ScopedMetadataGenerator(
DiscardableImageMap* image_map,
const gfx::Size& bounds)
« 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