Index: cc/trees/draw_property_utils.cc |
diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc |
index 15bdddc50616a8b104cbeaeb0b12e5710f4ff894..6e7422bc8b688332e04c02dc6b315db3b5e9a73f 100644 |
--- a/cc/trees/draw_property_utils.cc |
+++ b/cc/trees/draw_property_utils.cc |
@@ -12,6 +12,7 @@ |
#include "cc/layers/draw_properties.h" |
#include "cc/layers/layer.h" |
#include "cc/layers/layer_impl.h" |
+#include "cc/trees/layer_tree_host.h" |
#include "cc/trees/layer_tree_impl.h" |
#include "cc/trees/property_tree.h" |
#include "cc/trees/property_tree_builder.h" |
@@ -31,6 +32,21 @@ static bool IsRootLayer(const LayerImpl* layer) { |
return layer->layer_tree_impl()->IsRootLayer(layer); |
} |
+#if DCHECK_IS_ON() |
+static Layer* EffectNodeOwner(Layer* layer) { |
+ EffectNode* node = |
+ layer->layer_tree_host()->property_trees()->effect_tree.Node( |
+ layer->effect_tree_index()); |
+ return layer->layer_tree_host()->LayerById(node->owner_id); |
+} |
+ |
+static LayerImpl* EffectNodeOwner(LayerImpl* layer) { |
+ EffectNode* node = |
+ layer->layer_tree_impl()->property_trees()->effect_tree.Node( |
+ layer->effect_tree_index()); |
+ return layer->layer_tree_impl()->LayerById(node->owner_id); |
+} |
+ |
template <typename LayerType> |
static void ValidateRenderSurfaceForLayer(LayerType* layer) { |
// This test verifies that there are no cases where a LayerImpl needs |
@@ -41,7 +57,7 @@ static void ValidateRenderSurfaceForLayer(LayerType* layer) { |
DCHECK(layer->filters().IsEmpty()) << "layer: " << layer->id(); |
DCHECK(layer->background_filters().IsEmpty()) << "layer: " << layer->id(); |
DCHECK(!IsRootLayer(layer)) << "layer: " << layer->id(); |
- if (layer->parent()->replica_layer() == layer) |
+ if (EffectNodeOwner(layer)->replica_layer() == layer) |
return; |
DCHECK(!layer->mask_layer()) << "layer: " << layer->id(); |
DCHECK(!layer->replica_layer()) << "layer: " << layer->id(); |
@@ -54,6 +70,7 @@ static void ValidateRenderSurfacesRecursive(Layer* layer) { |
for (size_t i = 0; i < layer->children().size(); ++i) |
ValidateRenderSurfacesRecursive(layer->child_at(i)); |
} |
+#endif |
template <typename LayerType> |
void CalculateVisibleRects(const std::vector<LayerType*>& visible_layer_list, |
@@ -697,7 +714,9 @@ void BuildPropertyTreesAndComputeVisibleRects( |
device_transform, property_trees); |
UpdateRenderSurfacesForLayersRecursive(&property_trees->effect_tree, |
root_layer); |
+#if DCHECK_IS_ON() |
ValidateRenderSurfacesRecursive(root_layer); |
+#endif |
ComputeVisibleRects(root_layer, property_trees, |
can_render_to_separate_surface, update_layer_list); |
} |
@@ -742,8 +761,10 @@ void ComputeVisibleRects(LayerImpl* root_layer, |
for (auto* layer : *root_layer->layer_tree_impl()) { |
UpdateRenderSurfaceForLayer(&property_trees->effect_tree, |
can_render_to_separate_surface, layer); |
+#if DCHECK_IS_ON() |
if (can_render_to_separate_surface) |
ValidateRenderSurfaceForLayer(layer); |
+#endif |
} |
LayerImplList update_layer_list; |
ComputeVisibleRectsInternal(root_layer, property_trees, |