| 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 5fcf03d81986a1cd718a605946cc28d96647c99a..4d14ff772a17136e83470fb4a32875d825aaf62a 100644
|
| --- a/cc/trees/layer_tree_host_common.cc
|
| +++ b/cc/trees/layer_tree_host_common.cc
|
| @@ -79,6 +79,7 @@ LayerTreeHostCommon::CalcDrawPropsImplInputs::CalcDrawPropsImplInputs(
|
| bool can_render_to_separate_surface,
|
| bool can_adjust_raster_scales,
|
| bool verify_property_trees,
|
| + bool use_property_trees,
|
| LayerImplList* render_surface_layer_list,
|
| int current_render_surface_layer_list_id,
|
| PropertyTrees* property_trees)
|
| @@ -99,6 +100,7 @@ LayerTreeHostCommon::CalcDrawPropsImplInputs::CalcDrawPropsImplInputs(
|
| can_render_to_separate_surface(can_render_to_separate_surface),
|
| can_adjust_raster_scales(can_adjust_raster_scales),
|
| verify_property_trees(verify_property_trees),
|
| + use_property_trees(use_property_trees),
|
| render_surface_layer_list(render_surface_layer_list),
|
| current_render_surface_layer_list_id(
|
| current_render_surface_layer_list_id),
|
| @@ -125,6 +127,7 @@ LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting::
|
| true,
|
| false,
|
| true,
|
| + false,
|
| render_surface_layer_list,
|
| 0,
|
| GetPropertyTrees(root_layer)) {
|
| @@ -2435,7 +2438,8 @@ void CalculateRenderSurfaceLayerListInternal(
|
| const bool can_render_to_separate_surface,
|
| const int current_render_surface_layer_list_id,
|
| const int max_texture_size,
|
| - const bool verify_property_trees) {
|
| + const bool verify_property_trees,
|
| + const bool use_property_trees) {
|
| // This calculates top level Render Surface Layer List, and Layer List for all
|
| // Render Surfaces.
|
|
|
| @@ -2480,6 +2484,26 @@ void CalculateRenderSurfaceLayerListInternal(
|
| layer->draw_properties().render_target = nullptr;
|
| return;
|
| }
|
| +
|
| + if (use_property_trees) {
|
| + RenderSurfaceDrawProperties draw_properties;
|
| + ComputeSurfaceDrawPropertiesUsingPropertyTrees(
|
| + layer->render_surface(), property_trees, &draw_properties);
|
| + // TODO(ajuma): Once property tree verification is removed, make the above
|
| + // call directly set the surface's properties, so that the copying below
|
| + // is no longer needed.
|
| + layer->render_surface()->SetIsClipped(draw_properties.is_clipped);
|
| + layer->render_surface()->SetDrawOpacity(draw_properties.draw_opacity);
|
| + layer->render_surface()->SetDrawTransform(draw_properties.draw_transform);
|
| + layer->render_surface()->SetScreenSpaceTransform(
|
| + draw_properties.screen_space_transform);
|
| + layer->render_surface()->SetReplicaDrawTransform(
|
| + draw_properties.replica_draw_transform);
|
| + layer->render_surface()->SetReplicaScreenSpaceTransform(
|
| + draw_properties.replica_screen_space_transform);
|
| + layer->render_surface()->SetClipRect(draw_properties.clip_rect);
|
| + }
|
| +
|
| if (IsRootLayer(layer)) {
|
| // The root surface does not contribute to any other surface, it has no
|
| // target.
|
| @@ -2521,8 +2545,10 @@ void CalculateRenderSurfaceLayerListInternal(
|
| descendants->push_back(layer);
|
| }
|
|
|
| + bool compute_content_rects = verify_property_trees || use_property_trees;
|
| +
|
| // Clear the old accumulated content rect of surface.
|
| - if (verify_property_trees && render_to_separate_surface)
|
| + if (compute_content_rects && render_to_separate_surface)
|
| layer->render_surface()->SetAccumulatedContentRect(gfx::Rect());
|
|
|
| for (auto& child_layer : layer->children()) {
|
| @@ -2530,7 +2556,7 @@ void CalculateRenderSurfaceLayerListInternal(
|
| child_layer, property_trees, render_surface_layer_list, descendants,
|
| nearest_occlusion_immune_ancestor, layer_is_drawn,
|
| can_render_to_separate_surface, current_render_surface_layer_list_id,
|
| - max_texture_size, verify_property_trees);
|
| + max_texture_size, verify_property_trees, use_property_trees);
|
|
|
| // If the child is its own render target, then it has a render surface.
|
| if (child_layer->render_target() == child_layer &&
|
| @@ -2559,7 +2585,7 @@ void CalculateRenderSurfaceLayerListInternal(
|
| // The render surface's content rect is the union of drawable content rects
|
| // of the layers that draw into the surface. If the render surface is clipped,
|
| // it is also intersected with the render's surface clip rect.
|
| - if (verify_property_trees) {
|
| + if (compute_content_rects) {
|
| if (!IsRootLayer(layer)) {
|
| if (render_to_separate_surface) {
|
| gfx::Rect surface_content_rect =
|
| @@ -2590,8 +2616,12 @@ void CalculateRenderSurfaceLayerListInternal(
|
| 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()->SetContentRectFromPropertyTrees(
|
| - surface_content_rect);
|
| + if (use_property_trees)
|
| + layer->render_surface()->SetContentRect(surface_content_rect);
|
| + if (verify_property_trees) {
|
| + layer->render_surface()->SetContentRectFromPropertyTrees(
|
| + surface_content_rect);
|
| + }
|
| }
|
| const LayerImpl* parent_target = layer->parent()->render_target();
|
| if (!IsRootLayer(parent_target)) {
|
| @@ -2616,7 +2646,10 @@ void CalculateRenderSurfaceLayerListInternal(
|
| // 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()->SetContentRectFromPropertyTrees(viewport);
|
| + if (use_property_trees)
|
| + layer->render_surface()->SetContentRect(viewport);
|
| + if (verify_property_trees)
|
| + layer->render_surface()->SetContentRectFromPropertyTrees(viewport);
|
| }
|
| }
|
|
|
| @@ -2653,17 +2686,25 @@ void CalculateRenderSurfaceLayerList(
|
| inputs->render_surface_layer_list, nullptr, nullptr,
|
| subtree_visible_from_ancestor, inputs->can_render_to_separate_surface,
|
| inputs->current_render_surface_layer_list_id, inputs->max_texture_size,
|
| - inputs->verify_property_trees);
|
| + inputs->verify_property_trees, inputs->use_property_trees);
|
| +}
|
| +
|
| +static void ComputeMaskLayerDrawProperties(const LayerImpl* layer,
|
| + LayerImpl* mask_layer) {
|
| + DrawProperties& mask_layer_draw_properties = mask_layer->draw_properties();
|
| + mask_layer_draw_properties.visible_layer_rect = gfx::Rect(layer->bounds());
|
| + mask_layer_draw_properties.target_space_transform = layer->draw_transform();
|
| + mask_layer_draw_properties.maximum_animation_contents_scale =
|
| + layer->draw_properties().maximum_animation_contents_scale;
|
| + mask_layer_draw_properties.starting_animation_contents_scale =
|
| + layer->draw_properties().starting_animation_contents_scale;
|
| }
|
|
|
| void CalculateDrawPropertiesAndVerify(
|
| LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs,
|
| PropertyTreeOption property_tree_option) {
|
| - SubtreeGlobals globals;
|
| - DataForRecursion data_for_recursion;
|
| inputs->render_surface_layer_list->clear();
|
|
|
| - ProcessCalcDrawPropsInputs(*inputs, &globals, &data_for_recursion);
|
| UpdateMetaInformationSequenceNumber(inputs->root_layer);
|
| PreCalculateMetaInformationRecursiveData recursive_data;
|
| PreCalculateMetaInformationInternal(inputs->root_layer, &recursive_data);
|
| @@ -2672,9 +2713,8 @@ void CalculateDrawPropertiesAndVerify(
|
| inputs->verify_property_trees &&
|
| (property_tree_option == BUILD_PROPERTY_TREES_IF_NEEDED);
|
|
|
| - if (inputs->verify_property_trees) {
|
| - LayerImplList update_layer_list;
|
| -
|
| + LayerImplList visible_layer_list;
|
| + if (inputs->verify_property_trees || inputs->use_property_trees) {
|
| switch (property_tree_option) {
|
| case BUILD_PROPERTY_TREES_IF_NEEDED: {
|
| // The translation from layer to property trees is an intermediate
|
| @@ -2693,7 +2733,7 @@ void CalculateDrawPropertiesAndVerify(
|
| inputs->device_scale_factor,
|
| gfx::Rect(inputs->device_viewport_size), inputs->device_transform,
|
| inputs->can_render_to_separate_surface, inputs->property_trees,
|
| - &update_layer_list);
|
| + &visible_layer_list);
|
|
|
| if (should_measure_property_tree_performance) {
|
| TRACE_EVENT_END0(
|
| @@ -2725,7 +2765,7 @@ void CalculateDrawPropertiesAndVerify(
|
| inputs->device_transform);
|
| ComputeVisibleRectsUsingPropertyTrees(
|
| inputs->root_layer, inputs->property_trees,
|
| - inputs->can_render_to_separate_surface, &update_layer_list);
|
| + inputs->can_render_to_separate_surface, &visible_layer_list);
|
| break;
|
| }
|
| }
|
| @@ -2738,9 +2778,27 @@ void CalculateDrawPropertiesAndVerify(
|
|
|
| std::vector<AccumulatedSurfaceState> accumulated_surface_state;
|
| CalculateRenderTarget(inputs);
|
| - CalculateDrawPropertiesInternal(inputs->root_layer, globals,
|
| - data_for_recursion,
|
| - &accumulated_surface_state);
|
| + if (inputs->use_property_trees) {
|
| + for (LayerImpl* layer : visible_layer_list) {
|
| + ComputeLayerDrawPropertiesUsingPropertyTrees(
|
| + layer, inputs->property_trees, inputs->layers_always_allowed_lcd_text,
|
| + inputs->can_use_lcd_text, &layer->draw_properties());
|
| + if (layer->mask_layer())
|
| + ComputeMaskLayerDrawProperties(layer, layer->mask_layer());
|
| + LayerImpl* replica_mask_layer = layer->replica_layer()
|
| + ? layer->replica_layer()->mask_layer()
|
| + : nullptr;
|
| + if (replica_mask_layer)
|
| + ComputeMaskLayerDrawProperties(layer, replica_mask_layer);
|
| + }
|
| + } else {
|
| + SubtreeGlobals globals;
|
| + DataForRecursion data_for_recursion;
|
| + ProcessCalcDrawPropsInputs(*inputs, &globals, &data_for_recursion);
|
| + CalculateDrawPropertiesInternal(inputs->root_layer, globals,
|
| + data_for_recursion,
|
| + &accumulated_surface_state);
|
| + }
|
| CalculateRenderSurfaceLayerList(inputs);
|
|
|
| if (should_measure_property_tree_performance) {
|
|
|