Index: cc/trees/layer_tree_impl.cc |
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc |
index 84406c529331038908f95a68062552e1179b6ef7..4951dd55fee114c11752da3916eac81c87f8fe94 100644 |
--- a/cc/trees/layer_tree_impl.cc |
+++ b/cc/trees/layer_tree_impl.cc |
@@ -617,19 +617,24 @@ void LayerTreeImpl::UpdatePropertyTreeScrollingAndAnimationFromMainThread() { |
// frame to a newly-committed property tree. |
if (layer_list_.empty()) |
return; |
+ std::vector<int> layer_ids_to_remove; |
for (auto& layer_id_to_opacity : opacity_animations_map_) { |
const int id = layer_id_to_opacity.first; |
if (property_trees_.IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id)) { |
EffectNode* node = property_trees_.effect_tree.Node( |
property_trees_.effect_id_to_index_map[id]); |
if (!node->is_currently_animating_opacity || |
- node->opacity == layer_id_to_opacity.second) |
+ node->opacity == layer_id_to_opacity.second) { |
+ layer_ids_to_remove.push_back(id); |
continue; |
+ } |
node->opacity = layer_id_to_opacity.second; |
property_trees_.effect_tree.set_needs_update(true); |
} |
} |
- opacity_animations_map_.clear(); |
+ for (auto id : layer_ids_to_remove) |
+ opacity_animations_map_.erase(id); |
+ layer_ids_to_remove.clear(); |
for (auto& layer_id_to_transform : transform_animations_map_) { |
const int id = layer_id_to_transform.first; |
@@ -638,14 +643,17 @@ void LayerTreeImpl::UpdatePropertyTreeScrollingAndAnimationFromMainThread() { |
TransformNode* node = property_trees_.transform_tree.Node( |
property_trees_.transform_id_to_index_map[id]); |
if (!node->is_currently_animating || |
- node->local == layer_id_to_transform.second) |
+ node->local == layer_id_to_transform.second) { |
+ layer_ids_to_remove.push_back(id); |
continue; |
+ } |
node->local = layer_id_to_transform.second; |
node->needs_local_transform_update = true; |
property_trees_.transform_tree.set_needs_update(true); |
} |
} |
- transform_animations_map_.clear(); |
+ for (auto id : layer_ids_to_remove) |
+ transform_animations_map_.erase(id); |
LayerTreeHostCommon::CallFunctionForEveryLayer(this, [](LayerImpl* layer) { |
layer->UpdatePropertyTreeForScrollingAndAnimationIfNeeded(); |
@@ -1133,6 +1141,9 @@ void LayerTreeImpl::RegisterLayer(LayerImpl* layer) { |
void LayerTreeImpl::UnregisterLayer(LayerImpl* layer) { |
DCHECK(LayerById(layer->id())); |
+ layers_that_should_push_properties_.erase(layer); |
+ transform_animations_map_.erase(layer->id()); |
+ opacity_animations_map_.erase(layer->id()); |
layer_id_map_.erase(layer->id()); |
} |