| Index: cc/layers/render_surface_impl.cc
|
| diff --git a/cc/layers/render_surface_impl.cc b/cc/layers/render_surface_impl.cc
|
| index a92e21b14c50d44ae7be26c5c2d09052fcf8c6e3..3c957eb5d0be0e019f1526676f9199fcea639034 100644
|
| --- a/cc/layers/render_surface_impl.cc
|
| +++ b/cc/layers/render_surface_impl.cc
|
| @@ -191,6 +191,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();
|
| @@ -215,7 +226,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);
|
|
|
|
|