Index: cc/trees/tree_synchronizer.cc |
diff --git a/cc/trees/tree_synchronizer.cc b/cc/trees/tree_synchronizer.cc |
index 52f1bb384c752137b6ca7f2bfc72139e4bc42ad1..87efee06cab3859b3382d1fbd7e7c8d6e07037b5 100644 |
--- a/cc/trees/tree_synchronizer.cc |
+++ b/cc/trees/tree_synchronizer.cc |
@@ -74,6 +74,25 @@ std::unique_ptr<LayerImpl> ReuseOrCreateLayerImpl(OwnedLayerImplMap* old_layers, |
return layer_impl; |
} |
+#if DCHECK_IS_ON() |
+template <typename LayerType> |
+static void AssertValidPropertyTreeIndices(LayerType* layer) { |
+ DCHECK(layer); |
+ DCHECK_NE(layer->transform_tree_index(), TransformTree::kInvalidNodeId); |
+ DCHECK_NE(layer->effect_tree_index(), EffectTree::kInvalidNodeId); |
+ DCHECK_NE(layer->clip_tree_index(), ClipTree::kInvalidNodeId); |
+ DCHECK_NE(layer->scroll_tree_index(), ScrollTree::kInvalidNodeId); |
+} |
+ |
+static bool LayerHasValidPropertyTreeIndices(LayerImpl* layer) { |
+ DCHECK(layer); |
+ return layer->transform_tree_index() != TransformTree::kInvalidNodeId && |
+ layer->effect_tree_index() != EffectTree::kInvalidNodeId && |
+ layer->clip_tree_index() != ClipTree::kInvalidNodeId && |
+ layer->scroll_tree_index() != ScrollTree::kInvalidNodeId; |
+} |
+#endif |
+ |
template <typename LayerTreeType> |
void PushLayerList(OwnedLayerImplMap* old_layers, |
LayerTreeType* host, |
@@ -83,6 +102,15 @@ void PushLayerList(OwnedLayerImplMap* old_layers, |
std::unique_ptr<LayerImpl> layer_impl( |
ReuseOrCreateLayerImpl(old_layers, layer, tree_impl)); |
+#if DCHECK_IS_ON() |
+ // Every layer should have valid property tree indices |
+ AssertValidPropertyTreeIndices(layer); |
+ // Every layer_impl should either have valid property tree indices already |
+ // or the corresponding layer should push them onto layer_impl. |
+ DCHECK(LayerHasValidPropertyTreeIndices(layer_impl.get()) || |
+ host->LayerNeedsPushPropertiesForTesting(layer)); |
+#endif |
+ |
tree_impl->AddToLayerList(layer_impl.get()); |
tree_impl->AddLayer(std::move(layer_impl)); |
} |