| 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());
|
| }
|
|
|
|
|