| 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 5721eba514b055f2255452e58873d0fc801a19eb..e80e3a096e8287f69f43188172c38529f107e376 100644
|
| --- a/cc/trees/layer_tree_host_common.cc
|
| +++ b/cc/trees/layer_tree_host_common.cc
|
| @@ -15,6 +15,7 @@
|
| #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"
|
| @@ -29,6 +30,20 @@
|
| }
|
|
|
| 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) {
|
| @@ -1264,6 +1279,7 @@
|
|
|
| template <typename LayerType>
|
| struct SubtreeGlobals {
|
| + LayerSorter* layer_sorter;
|
| int max_texture_size;
|
| float device_scale_factor;
|
| float page_scale_factor;
|
| @@ -2349,6 +2365,17 @@
|
| 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);
|
|
|
| @@ -2386,6 +2413,7 @@
|
| 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;
|
| @@ -2560,6 +2588,9 @@
|
| 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;
|
|
|