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

Unified Diff: cc/layers/render_surface_impl.cc

Issue 2423483003: cc: Make visible rect computation aware of pixel-moving filters (Closed)
Patch Set: Rebaseline Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: cc/layers/render_surface_impl.cc
diff --git a/cc/layers/render_surface_impl.cc b/cc/layers/render_surface_impl.cc
index 4a08fa1de9a109f3b0023fcac80ad6cfc3eebf04..edacc1a09ce394087ac946ed70562ca1035c691c 100644
--- a/cc/layers/render_surface_impl.cc
+++ b/cc/layers/render_surface_impl.cc
@@ -190,6 +190,17 @@ void RenderSurfaceImpl::SetContentRectForTesting(const gfx::Rect& rect) {
SetContentRect(rect);
}
+gfx::Rect RenderSurfaceImpl::CalculateExpandedClipForFilters(
+ const gfx::Transform& target_to_surface) {
+ gfx::Rect clip_in_surface_space =
+ MathUtil::ProjectEnclosingClippedRect(target_to_surface, clip_rect());
+ gfx::Rect expanded_clip_in_surface_space = Filters().MapRectReverse(
+ clip_in_surface_space, FiltersTransform().matrix());
+ gfx::Rect expanded_clip_in_target_space = MathUtil::MapEnclosingClippedRect(
+ draw_transform(), expanded_clip_in_surface_space);
+ return expanded_clip_in_target_space;
+}
+
gfx::Rect RenderSurfaceImpl::CalculateClippedAccumulatedContentRect() {
if (HasCopyRequest() || !is_clipped())
return accumulated_content_rect();
@@ -214,7 +225,13 @@ gfx::Rect RenderSurfaceImpl::CalculateClippedAccumulatedContentRect() {
if (clip_rect().Contains(accumulated_rect_in_target_space))
return accumulated_content_rect();
- gfx::Rect clipped_accumulated_rect_in_target_space = clip_rect();
+ gfx::Rect clipped_accumulated_rect_in_target_space;
+ if (Filters().HasFilterThatMovesPixels()) {
+ clipped_accumulated_rect_in_target_space =
+ CalculateExpandedClipForFilters(target_to_surface);
+ } else {
+ clipped_accumulated_rect_in_target_space = clip_rect();
+ }
clipped_accumulated_rect_in_target_space.Intersect(
accumulated_rect_in_target_space);

Powered by Google App Engine
This is Rietveld 408576698