Index: cc/trees/layer_tree_host_common.cc |
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc |
index 5eed406a0cc803ee4ced22d195a8e34aa26bb288..0e5cd12b7d4fe522a811ca6658fe3ae383aa1a01 100644 |
--- a/cc/trees/layer_tree_host_common.cc |
+++ b/cc/trees/layer_tree_host_common.cc |
@@ -194,56 +194,6 @@ void ScrollAndScaleSet::FromProtobuf(const proto::ScrollAndScaleSet& proto) { |
top_controls_delta = proto.top_controls_delta(); |
} |
-inline gfx::Rect CalculateVisibleRectWithCachedLayerRect( |
- const gfx::Rect& target_surface_rect, |
- const gfx::Rect& layer_bound_rect, |
- const gfx::Rect& layer_rect_in_target_space, |
- const gfx::Transform& transform) { |
- if (layer_rect_in_target_space.IsEmpty()) |
- return gfx::Rect(); |
- |
- // Is this layer fully contained within the target surface? |
- if (target_surface_rect.Contains(layer_rect_in_target_space)) |
- return layer_bound_rect; |
- |
- // If the layer doesn't fill up the entire surface, then find the part of |
- // the surface rect where the layer could be visible. This avoids trying to |
- // project surface rect points that are behind the projection point. |
- gfx::Rect minimal_surface_rect = target_surface_rect; |
- minimal_surface_rect.Intersect(layer_rect_in_target_space); |
- |
- if (minimal_surface_rect.IsEmpty()) |
- return gfx::Rect(); |
- |
- // Project the corners of the target surface rect into the layer space. |
- // This bounding rectangle may be larger than it needs to be (being |
- // axis-aligned), but is a reasonable filter on the space to consider. |
- // Non-invertible transforms will create an empty rect here. |
- |
- gfx::Transform surface_to_layer(gfx::Transform::kSkipInitialization); |
- if (!transform.GetInverse(&surface_to_layer)) { |
- // Because we cannot use the surface bounds to determine what portion of |
- // the layer is visible, we must conservatively assume the full layer is |
- // visible. |
- return layer_bound_rect; |
- } |
- |
- gfx::Rect layer_rect = MathUtil::ProjectEnclosingClippedRect( |
- surface_to_layer, minimal_surface_rect); |
- layer_rect.Intersect(layer_bound_rect); |
- return layer_rect; |
-} |
- |
-gfx::Rect LayerTreeHostCommon::CalculateVisibleRect( |
- const gfx::Rect& target_surface_rect, |
- const gfx::Rect& layer_bound_rect, |
- const gfx::Transform& transform) { |
- gfx::Rect layer_in_surface_space = |
- MathUtil::MapEnclosingClippedRect(transform, layer_bound_rect); |
- return CalculateVisibleRectWithCachedLayerRect( |
- target_surface_rect, layer_bound_rect, layer_in_surface_space, transform); |
-} |
- |
static inline bool IsRootLayer(const Layer* layer) { |
return !layer->parent(); |
} |
@@ -666,32 +616,10 @@ void CalculateRenderSurfaceLayerList( |
layer->render_target()->AccumulateContentRectFromContributingLayer(layer); |
if (render_to_separate_surface) { |
- gfx::Rect surface_content_rect = |
- layer->render_surface()->accumulated_content_rect(); |
- |
- if (!layer->replica_layer() && !layer->HasCopyRequest() && |
- layer->render_surface()->is_clipped()) { |
- // Here, we clip the render surface's content rect with its clip rect. |
- // As the clip rect of render surface is in the surface's target |
- // space, we first map the content rect into the target space, |
- // intersect it with clip rect and project back the result to the |
- // surface space. |
- if (!surface_content_rect.IsEmpty()) { |
- gfx::Rect surface_clip_rect = |
- LayerTreeHostCommon::CalculateVisibleRect( |
- layer->render_surface()->clip_rect(), surface_content_rect, |
- layer->render_surface()->draw_transform()); |
- surface_content_rect.Intersect(surface_clip_rect); |
- } |
- } |
- // The RenderSurfaceImpl backing texture cannot exceed the maximum |
- // supported texture size. |
- surface_content_rect.set_width( |
- std::min(surface_content_rect.width(), max_texture_size)); |
- surface_content_rect.set_height( |
- std::min(surface_content_rect.height(), max_texture_size)); |
- layer->render_surface()->SetContentRect(surface_content_rect); |
- |
+ // Now all contributing drawable content rect has been accumulated to this |
+ // render surface, calculate the content rect. |
+ layer->render_surface()->CalculateContentRectFromAccumulatedContentRect( |
+ max_texture_size); |
// Now the render surface's content rect is calculated correctly, it could |
// contribute to its render target. |
layer->render_surface() |
@@ -701,9 +629,7 @@ void CalculateRenderSurfaceLayerList( |
} |
} else { |
// The root layer's surface content rect is always the entire viewport. |
- gfx::Rect viewport = |
- gfx::ToEnclosingRect(property_trees->clip_tree.ViewportClip()); |
- layer->render_surface()->SetContentRect(viewport); |
+ layer->render_surface()->SetContentRectToViewport(); |
} |
if (render_to_separate_surface && !IsRootLayer(layer) && |