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 e468c07dc6ebe751ed9168f35d84c5166af44c6b..064e91e30c4a985311aaa1aa8e7354ad0196bf13 100644 |
--- a/cc/trees/layer_tree_host_common.cc |
+++ b/cc/trees/layer_tree_host_common.cc |
@@ -15,7 +15,6 @@ |
#include "cc/layers/render_surface.h" |
#include "cc/layers/render_surface_impl.h" |
#include "cc/trees/draw_property_utils.h" |
-#include "cc/trees/layer_sorter.h" |
#include "cc/trees/layer_tree_host.h" |
#include "cc/trees/layer_tree_impl.h" |
#include "ui/gfx/geometry/rect_conversions.h" |
@@ -31,20 +30,6 @@ ScrollAndScaleSet::ScrollAndScaleSet() |
ScrollAndScaleSet::~ScrollAndScaleSet() {} |
-static void SortLayers(LayerList::iterator first, |
- LayerList::iterator end, |
- void* layer_sorter) { |
- NOTREACHED(); |
-} |
- |
-static void SortLayers(LayerImplList::iterator first, |
- LayerImplList::iterator end, |
- LayerSorter* layer_sorter) { |
- DCHECK(layer_sorter); |
- TRACE_EVENT0("cc", "LayerTreeHostCommon::SortLayers"); |
- layer_sorter->Sort(first, end); |
-} |
- |
template <typename LayerType> |
static gfx::Vector2dF GetEffectiveScrollDelta(LayerType* layer) { |
// Layer's scroll offset can have an integer part and fractional part. |
@@ -1128,6 +1113,8 @@ static inline void MarkLayerWithRenderSurfaceLayerListId( |
int current_render_surface_layer_list_id) { |
layer->draw_properties().last_drawn_render_surface_layer_list_id = |
current_render_surface_layer_list_id; |
+ layer->draw_properties().layer_or_descendant_is_drawn = |
+ !!current_render_surface_layer_list_id; |
} |
template <typename LayerTypePtr> |
@@ -1200,8 +1187,7 @@ struct PreCalculateMetaInformationRecursiveData { |
data.layer_or_descendant_has_copy_request; |
layer_or_descendant_has_input_handler |= |
data.layer_or_descendant_has_input_handler; |
- num_unclipped_descendants += |
- data.num_unclipped_descendants; |
+ num_unclipped_descendants += data.num_unclipped_descendants; |
} |
}; |
@@ -1233,6 +1219,7 @@ static void PreCalculateMetaInformation( |
layer->draw_properties().sorted_for_recursion = false; |
layer->draw_properties().has_child_with_a_scroll_parent = false; |
+ layer->draw_properties().layer_or_descendant_is_drawn = false; |
layer->draw_properties().visited = false; |
if (!HasInvertibleOrAnimatedTransform(layer)) { |
@@ -1279,7 +1266,6 @@ static void PreCalculateMetaInformation( |
template <typename LayerType> |
struct SubtreeGlobals { |
- LayerSorter* layer_sorter; |
int max_texture_size; |
float device_scale_factor; |
float page_scale_factor; |
@@ -1814,8 +1800,6 @@ static void CalculateDrawPropertiesInternal( |
// layer's "screen space" and local content space. |
layer_draw_properties.screen_space_transform = |
data_from_ancestor.full_hierarchy_matrix; |
- if (layer->should_flatten_transform()) |
- layer_draw_properties.screen_space_transform.FlattenTo2d(); |
layer_draw_properties.screen_space_transform.PreconcatTransform |
(layer_draw_properties.target_space_transform); |
@@ -1934,6 +1918,10 @@ static void CalculateDrawPropertiesInternal( |
data_for_children.full_hierarchy_matrix.PreconcatTransform( |
render_surface->draw_transform()); |
+ // A render surface inherently acts as a flattening point for the content of |
+ // its descendants. |
+ data_for_children.full_hierarchy_matrix.FlattenTo2d(); |
+ |
if (layer->mask_layer()) { |
DrawProperties<LayerType>& mask_layer_draw_properties = |
layer->mask_layer()->draw_properties(); |
@@ -2212,6 +2200,8 @@ static void CalculateDrawPropertiesInternal( |
render_surface_layer_list->size() - |
child->draw_properties() |
.index_of_first_render_surface_layer_list_addition; |
+ layer_draw_properties.layer_or_descendant_is_drawn |= |
+ child->draw_properties().layer_or_descendant_is_drawn; |
} |
// Add the unsorted layer list contributions, if necessary. |
@@ -2365,17 +2355,6 @@ static void CalculateDrawPropertiesInternal( |
return; |
} |
- // If preserves-3d then sort all the descendants in 3D so that they can be |
- // drawn from back to front. If the preserves-3d property is also set on the |
- // parent then skip the sorting as the parent will sort all the descendants |
- // anyway. |
- if (globals.layer_sorter && descendants.size() && layer->Is3dSorted() && |
- !LayerIsInExisting3DRenderingContext(layer)) { |
- SortLayers(descendants.begin() + sorting_start_index, |
- descendants.end(), |
- globals.layer_sorter); |
- } |
- |
UpdateAccumulatedSurfaceState<LayerType>( |
layer, local_drawable_content_rect_of_subtree, accumulated_surface_state); |
@@ -2413,7 +2392,6 @@ static void ProcessCalcDrawPropsInputs( |
scaled_device_transform.Scale(inputs.device_scale_factor, |
inputs.device_scale_factor); |
- globals->layer_sorter = NULL; |
globals->max_texture_size = inputs.max_texture_size; |
globals->device_scale_factor = |
inputs.device_scale_factor * device_transform_scale; |
@@ -2577,9 +2555,6 @@ void LayerTreeHostCommon::CalculateDrawProperties( |
DataForRecursion<LayerImpl> data_for_recursion; |
ProcessCalcDrawPropsInputs(*inputs, &globals, &data_for_recursion); |
- LayerSorter layer_sorter; |
- globals.layer_sorter = &layer_sorter; |
- |
PreCalculateMetaInformationRecursiveData recursive_data; |
PreCalculateMetaInformation(inputs->root_layer, &recursive_data); |
std::vector<AccumulatedSurfaceState<LayerImpl>> accumulated_surface_state; |