| Index: cc/trees/draw_property_utils.cc
|
| diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc
|
| index bd839f0937b4e7ec78a1a321b5e5fa597dd0d42a..89ae49d90d15780def158a3bd3a6bf2f03d28f3a 100644
|
| --- a/cc/trees/draw_property_utils.cc
|
| +++ b/cc/trees/draw_property_utils.cc
|
| @@ -355,24 +355,14 @@ static gfx::RectF ComputeAccumulatedClipInRootSpaceForVisibleRect(
|
| }
|
|
|
| void CalculateClipRects(const std::vector<LayerImpl*>& visible_layer_list,
|
| - const PropertyTrees* property_trees,
|
| - bool non_root_surfaces_enabled) {
|
| + const PropertyTrees* property_trees) {
|
| const ClipTree& clip_tree = property_trees->clip_tree;
|
| for (auto* layer : visible_layer_list) {
|
| const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index());
|
| - bool layer_needs_clip_rect =
|
| - non_root_surfaces_enabled
|
| - ? clip_node->layers_are_clipped
|
| - : clip_node->layers_are_clipped_when_surfaces_disabled;
|
| - if (!layer_needs_clip_rect) {
|
| + if (!clip_node->layers_are_clipped) {
|
| layer->set_clip_rect(gfx::Rect());
|
| continue;
|
| }
|
| - if (!non_root_surfaces_enabled) {
|
| - layer->set_clip_rect(
|
| - gfx::ToEnclosingRect(clip_node->clip_in_target_space));
|
| - continue;
|
| - }
|
|
|
| const TransformTree& transform_tree = property_trees->transform_tree;
|
| const TransformNode* transform_node =
|
| @@ -409,8 +399,7 @@ void CalculateClipRects(const std::vector<LayerImpl*>& visible_layer_list,
|
| }
|
|
|
| void CalculateVisibleRects(const LayerImplList& visible_layer_list,
|
| - const PropertyTrees* property_trees,
|
| - bool non_root_surfaces_enabled) {
|
| + const PropertyTrees* property_trees) {
|
| const EffectTree& effect_tree = property_trees->effect_tree;
|
| const TransformTree& transform_tree = property_trees->transform_tree;
|
| const ClipTree& clip_tree = property_trees->clip_tree;
|
| @@ -456,28 +445,6 @@ void CalculateVisibleRects(const LayerImplList& visible_layer_list,
|
| const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index());
|
| const TransformNode* transform_node =
|
| transform_tree.Node(layer->transform_tree_index());
|
| - if (!non_root_surfaces_enabled) {
|
| - // When we only have a root surface, the clip node and the layer must
|
| - // necessarily have the same target (the root).
|
| - if (transform_node->ancestors_are_invertible) {
|
| - gfx::RectF combined_clip_rect_in_target_space =
|
| - clip_node->combined_clip_in_target_space;
|
| - gfx::Transform target_to_content;
|
| - target_to_content.Translate(-layer->offset_to_transform_parent().x(),
|
| - -layer->offset_to_transform_parent().y());
|
| - target_to_content.PreconcatTransform(
|
| - transform_tree.FromScreen(transform_node->id));
|
| -
|
| - gfx::Rect visible_rect =
|
| - gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
|
| - target_to_content, combined_clip_rect_in_target_space));
|
| - visible_rect.Intersect(gfx::Rect(layer_bounds));
|
| - layer->set_visible_layer_rect(visible_rect);
|
| - } else {
|
| - layer->set_visible_layer_rect(gfx::Rect(layer_bounds));
|
| - }
|
| - continue;
|
| - }
|
|
|
| // When both the layer and the target are unclipped, we only have to apply
|
| // the viewport clip.
|
| @@ -716,13 +683,7 @@ void FindLayersThatNeedUpdates(LayerTreeImpl* layer_tree_impl,
|
| }
|
|
|
| void UpdateRenderSurfaceForLayer(EffectTree* effect_tree,
|
| - bool non_root_surfaces_enabled,
|
| LayerImpl* layer) {
|
| - if (!non_root_surfaces_enabled) {
|
| - layer->SetHasRenderSurface(IsRootLayer(layer));
|
| - return;
|
| - }
|
| -
|
| EffectNode* node = effect_tree->Node(layer->effect_tree_index());
|
|
|
| if (node->owning_layer_id == layer->id() && node->has_render_surface)
|
| @@ -815,8 +776,7 @@ void ConcatInverseSurfaceContentsScale(const EffectNode* effect_node,
|
| 1.0 / effect_node->surface_contents_scale.y());
|
| }
|
|
|
| -void ComputeClips(PropertyTrees* property_trees,
|
| - bool non_root_surfaces_enabled) {
|
| +void ComputeClips(PropertyTrees* property_trees) {
|
| ClipTree* clip_tree = &property_trees->clip_tree;
|
| if (!clip_tree->needs_update())
|
| return;
|
| @@ -859,8 +819,7 @@ void ComputeClips(PropertyTrees* property_trees,
|
| gfx::RectF parent_clip_in_target_space =
|
| parent_clip_node->clip_in_target_space;
|
| if (parent_target_transform_node &&
|
| - parent_target_transform_node->id != clip_node->target_transform_id &&
|
| - non_root_surfaces_enabled) {
|
| + parent_target_transform_node->id != clip_node->target_transform_id) {
|
| success &= property_trees->ComputeTransformFromTarget(
|
| clip_node->target_transform_id, parent_clip_node->target_effect_id,
|
| &parent_to_current);
|
| @@ -892,7 +851,7 @@ void ComputeClips(PropertyTrees* property_trees,
|
| // the combined clip to our children because if they are clipped, they may
|
| // need to clip using our parent clip and if we don't propagate it here,
|
| // it will be lost.
|
| - if (clip_node->resets_clip && non_root_surfaces_enabled) {
|
| + if (clip_node->resets_clip) {
|
| if (clip_node->clip_type == ClipNode::ClipType::APPLIES_LOCAL_CLIP) {
|
| gfx::Transform to_target;
|
| property_trees->GetToTarget(clip_node->transform_id,
|
| @@ -917,10 +876,7 @@ void ComputeClips(PropertyTrees* property_trees,
|
| if (use_only_parent_clip) {
|
| clip_node->combined_clip_in_target_space =
|
| parent_combined_clip_in_target_space;
|
| - if (!non_root_surfaces_enabled) {
|
| - clip_node->clip_in_target_space =
|
| - parent_clip_node->clip_in_target_space;
|
| - } else if (!target_is_clipped) {
|
| + if (!target_is_clipped) {
|
| clip_node->clip_in_target_space = parent_clip_in_target_space;
|
| } else {
|
| // Render Surface applies clip and the owning layer itself applies
|
| @@ -931,10 +887,8 @@ void ComputeClips(PropertyTrees* property_trees,
|
| } else {
|
| gfx::Transform source_to_target;
|
|
|
| - if (!non_root_surfaces_enabled) {
|
| - source_to_target = transform_tree.ToScreen(clip_node->transform_id);
|
| - } else if (transform_tree.ContentTargetId(transform_node->id) ==
|
| - clip_node->target_transform_id) {
|
| + if (transform_tree.ContentTargetId(transform_node->id) ==
|
| + clip_node->target_transform_id) {
|
| property_trees->GetToTarget(clip_node->transform_id,
|
| clip_node->target_effect_id,
|
| &source_to_target);
|
| @@ -953,9 +907,7 @@ void ComputeClips(PropertyTrees* property_trees,
|
| // for layer clipping is the case where no non-viewport ancestor node
|
| // applies a local clip.
|
| bool layer_clipping_uses_only_local_clip =
|
| - non_root_surfaces_enabled
|
| - ? clip_node->layer_clipping_uses_only_local_clip
|
| - : !parent_clip_node->layers_are_clipped_when_surfaces_disabled;
|
| + clip_node->layer_clipping_uses_only_local_clip;
|
| if (!layer_clipping_uses_only_local_clip) {
|
| clip_node->clip_in_target_space = gfx::IntersectRects(
|
| parent_clip_in_target_space, source_clip_in_target_space);
|
| @@ -981,16 +933,13 @@ void ComputeTransforms(TransformTree* transform_tree) {
|
| transform_tree->set_needs_update(false);
|
| }
|
|
|
| -void UpdateRenderTarget(EffectTree* effect_tree,
|
| - bool can_render_to_separate_surface) {
|
| +void UpdateRenderTarget(EffectTree* effect_tree) {
|
| for (int i = EffectTree::kContentsRootNodeId;
|
| i < static_cast<int>(effect_tree->size()); ++i) {
|
| EffectNode* node = effect_tree->Node(i);
|
| if (i == EffectTree::kContentsRootNodeId) {
|
| // Render target of the node corresponding to root is itself.
|
| node->target_id = EffectTree::kContentsRootNodeId;
|
| - } else if (!can_render_to_separate_surface) {
|
| - node->target_id = EffectTree::kContentsRootNodeId;
|
| } else if (effect_tree->parent(node)->has_render_surface) {
|
| node->target_id = node->parent_id;
|
| } else {
|
| @@ -1052,22 +1001,13 @@ static void ComputeLayerClipRect(const PropertyTrees* property_trees,
|
| effect_node->has_render_surface
|
| ? effect_node
|
| : effect_tree->Node(effect_node->target_id);
|
| - // TODO(weiliangc): When effect node has up to date render surface info on
|
| - // compositor thread, no need to check for resourceless draw mode
|
| - if (!property_trees->non_root_surfaces_enabled) {
|
| - target_node = effect_tree->Node(1);
|
| - }
|
| -
|
| bool include_viewport_clip = false;
|
| bool include_expanding_clips = false;
|
| ConditionalClip accumulated_clip_rect = ComputeAccumulatedClip(
|
| property_trees, include_viewport_clip, include_expanding_clips,
|
| layer->clip_tree_index(), target_node->id);
|
|
|
| - bool is_clipped_from_clip_tree =
|
| - property_trees->non_root_surfaces_enabled
|
| - ? clip_node->layers_are_clipped
|
| - : clip_node->layers_are_clipped_when_surfaces_disabled;
|
| + bool is_clipped_from_clip_tree = clip_node->layers_are_clipped;
|
| DCHECK_EQ(is_clipped_from_clip_tree, accumulated_clip_rect.is_clipped);
|
|
|
| gfx::RectF accumulated_clip = accumulated_clip_rect.clip_rect;
|
| @@ -1083,40 +1023,25 @@ static void ComputeLayerClipRect(const PropertyTrees* property_trees,
|
| static void ComputeVisibleRectsInternal(
|
| LayerImpl* root_layer,
|
| PropertyTrees* property_trees,
|
| - bool can_render_to_separate_surface,
|
| std::vector<LayerImpl*>* visible_layer_list) {
|
| - if (property_trees->non_root_surfaces_enabled !=
|
| - can_render_to_separate_surface) {
|
| - property_trees->non_root_surfaces_enabled = can_render_to_separate_surface;
|
| - property_trees->transform_tree.set_needs_update(true);
|
| - }
|
| if (property_trees->transform_tree.needs_update()) {
|
| property_trees->clip_tree.set_needs_update(true);
|
| property_trees->effect_tree.set_needs_update(true);
|
| }
|
| - UpdateRenderTarget(&property_trees->effect_tree,
|
| - property_trees->non_root_surfaces_enabled);
|
| + UpdateRenderTarget(&property_trees->effect_tree);
|
| ComputeTransforms(&property_trees->transform_tree);
|
| // Computation of clips uses surface contents scale which is updated while
|
| // computing effects. So, ComputeEffects should be before ComputeClips.
|
| ComputeEffects(&property_trees->effect_tree);
|
| - ComputeClips(property_trees, can_render_to_separate_surface);
|
| + ComputeClips(property_trees);
|
|
|
| FindLayersThatNeedUpdates(root_layer->layer_tree_impl(), property_trees,
|
| visible_layer_list);
|
| - CalculateClipRects(*visible_layer_list, property_trees,
|
| - can_render_to_separate_surface);
|
| - CalculateVisibleRects(*visible_layer_list, property_trees,
|
| - can_render_to_separate_surface);
|
| -}
|
| -
|
| -void UpdatePropertyTrees(PropertyTrees* property_trees,
|
| - bool can_render_to_separate_surface) {
|
| - if (property_trees->non_root_surfaces_enabled !=
|
| - can_render_to_separate_surface) {
|
| - property_trees->non_root_surfaces_enabled = can_render_to_separate_surface;
|
| - property_trees->transform_tree.set_needs_update(true);
|
| - }
|
| + CalculateClipRects(*visible_layer_list, property_trees);
|
| + CalculateVisibleRects(*visible_layer_list, property_trees);
|
| +}
|
| +
|
| +void UpdatePropertyTrees(PropertyTrees* property_trees) {
|
| if (property_trees->transform_tree.needs_update()) {
|
| property_trees->clip_tree.set_needs_update(true);
|
| property_trees->effect_tree.set_needs_update(true);
|
| @@ -1125,7 +1050,7 @@ void UpdatePropertyTrees(PropertyTrees* property_trees,
|
| // Computation of clips uses surface contents scale which is updated while
|
| // computing effects. So, ComputeEffects should be before ComputeClips.
|
| ComputeEffects(&property_trees->effect_tree);
|
| - ComputeClips(property_trees, can_render_to_separate_surface);
|
| + ComputeClips(property_trees);
|
| }
|
|
|
| void BuildPropertyTreesAndComputeVisibleRects(
|
| @@ -1139,7 +1064,6 @@ void BuildPropertyTreesAndComputeVisibleRects(
|
| float device_scale_factor,
|
| const gfx::Rect& viewport,
|
| const gfx::Transform& device_transform,
|
| - bool can_render_to_separate_surface,
|
| PropertyTrees* property_trees,
|
| LayerImplList* visible_layer_list) {
|
| PropertyTreeBuilder::BuildPropertyTrees(
|
| @@ -1147,26 +1071,21 @@ void BuildPropertyTreesAndComputeVisibleRects(
|
| outer_viewport_scroll_layer, overscroll_elasticity_layer,
|
| elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
|
| device_transform, property_trees);
|
| - ComputeVisibleRects(root_layer, property_trees,
|
| - can_render_to_separate_surface, visible_layer_list);
|
| + ComputeVisibleRects(root_layer, property_trees, visible_layer_list);
|
| }
|
|
|
| void VerifyClipTreeCalculations(const LayerImplList& layer_list,
|
| PropertyTrees* property_trees) {
|
| - if (property_trees->non_root_surfaces_enabled) {
|
| - ComputeClipsWithEffectTree(property_trees);
|
| - }
|
| + ComputeClipsWithEffectTree(property_trees);
|
| for (auto* layer : layer_list)
|
| ComputeLayerClipRect(property_trees, layer);
|
| }
|
|
|
| void ComputeVisibleRects(LayerImpl* root_layer,
|
| PropertyTrees* property_trees,
|
| - bool can_render_to_separate_surface,
|
| LayerImplList* visible_layer_list) {
|
| for (auto* layer : *root_layer->layer_tree_impl()) {
|
| - UpdateRenderSurfaceForLayer(&property_trees->effect_tree,
|
| - can_render_to_separate_surface, layer);
|
| + UpdateRenderSurfaceForLayer(&property_trees->effect_tree, layer);
|
| EffectNode* node =
|
| property_trees->effect_tree.Node(layer->effect_tree_index());
|
| if (node->owning_layer_id == layer->id()) {
|
| @@ -1175,12 +1094,10 @@ void ComputeVisibleRects(LayerImpl* root_layer,
|
| node->render_surface->set_effect_tree_index(node->id);
|
| }
|
| #if DCHECK_IS_ON()
|
| - if (can_render_to_separate_surface)
|
| - ValidateRenderSurfaceForLayer(layer);
|
| + ValidateRenderSurfaceForLayer(layer);
|
| #endif
|
| }
|
| ComputeVisibleRectsInternal(root_layer, property_trees,
|
| - can_render_to_separate_surface,
|
| visible_layer_list);
|
| }
|
|
|
| @@ -1259,12 +1176,9 @@ gfx::Transform DrawTransform(const LayerImpl* layer,
|
| // node and surface's transform node and scales it by the surface's content
|
| // scale.
|
| gfx::Transform xform;
|
| - if (transform_tree.property_trees()->non_root_surfaces_enabled)
|
| - transform_tree.property_trees()->GetToTarget(
|
| - layer->transform_tree_index(), layer->render_target_effect_tree_index(),
|
| - &xform);
|
| - else
|
| - xform = transform_tree.ToScreen(layer->transform_tree_index());
|
| + transform_tree.property_trees()->GetToTarget(
|
| + layer->transform_tree_index(), layer->render_target_effect_tree_index(),
|
| + &xform);
|
| if (layer->should_flatten_transform_from_property_tree())
|
| xform.FlattenTo2d();
|
| xform.Translate(layer->offset_to_transform_parent().x(),
|
| @@ -1421,12 +1335,7 @@ void ComputeLayerDrawProperties(LayerImpl* layer,
|
|
|
| layer->draw_properties().opacity =
|
| LayerDrawOpacity(layer, property_trees->effect_tree);
|
| - if (property_trees->non_root_surfaces_enabled) {
|
| - layer->draw_properties().is_clipped = clip_node->layers_are_clipped;
|
| - } else {
|
| - layer->draw_properties().is_clipped =
|
| - clip_node->layers_are_clipped_when_surfaces_disabled;
|
| - }
|
| + layer->draw_properties().is_clipped = clip_node->layers_are_clipped;
|
|
|
| gfx::Rect bounds_in_target_space = MathUtil::MapEnclosingClippedRect(
|
| layer->draw_properties().target_space_transform,
|
|
|