Index: cc/layer_tree_impl.cc |
diff --git a/cc/layer_tree_impl.cc b/cc/layer_tree_impl.cc |
index d434bb0e6a2a4f78f1706fa3740720224f8bc1d0..a113316c77b3dc79bac020ad0c65d8b3af0df422 100644 |
--- a/cc/layer_tree_impl.cc |
+++ b/cc/layer_tree_impl.cc |
@@ -19,6 +19,9 @@ LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
} |
LayerTreeImpl::~LayerTreeImpl() { |
+ // Need to explicitly clear the tree prior to destroying this so that |
+ // the LayerTreeImpl pointer is still valid in the LayerImpl dtor. |
+ root_layer_.reset(); |
} |
static LayerImpl* findRootScrollLayer(LayerImpl* layer) |
@@ -68,6 +71,21 @@ void LayerTreeImpl::ClearCurrentlyScrollingLayer() { |
scrolling_layer_id_from_previous_tree_ = 0; |
} |
+LayerImpl* LayerTreeImpl::LayerById(int id) { |
+ LayerIdMap::iterator iter = layer_id_map_.find(id); |
+ return iter != layer_id_map_.end() ? iter->second : NULL; |
+} |
+ |
+void LayerTreeImpl::RegisterLayer(LayerImpl* layer) { |
+ DCHECK(!LayerById(layer->id())); |
+ layer_id_map_[layer->id()] = layer; |
+} |
+ |
+void LayerTreeImpl::UnregisterLayer(LayerImpl* layer) { |
+ DCHECK(LayerById(layer->id())); |
+ layer_id_map_.erase(layer->id()); |
+} |
+ |
const LayerTreeSettings& LayerTreeImpl::settings() const { |
return layer_tree_host_impl_->settings(); |
} |