Chromium Code Reviews| Index: cc/trees/layer_tree_impl.cc |
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc |
| index 0adf8745e1a6e80207f614dd9b878cbd973c8794..b8113c858598dbddb909a7b9572b21092b260217 100644 |
| --- a/cc/trees/layer_tree_impl.cc |
| +++ b/cc/trees/layer_tree_impl.cc |
| @@ -605,19 +605,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->data.is_currently_animating_opacity || |
| - node->data.opacity == layer_id_to_opacity.second) |
| + node->data.opacity == layer_id_to_opacity.second) { |
| + layer_ids_to_remove.push_back(id); |
| continue; |
| + } |
| node->data.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; |
| @@ -626,14 +631,17 @@ void LayerTreeImpl::UpdatePropertyTreeScrollingAndAnimationFromMainThread() { |
| TransformNode* node = property_trees_.transform_tree.Node( |
| property_trees_.transform_id_to_index_map[id]); |
| if (!node->data.is_currently_animating || |
| - node->data.local == layer_id_to_transform.second) |
| + node->data.local == layer_id_to_transform.second) { |
| + layer_ids_to_remove.push_back(id); |
| continue; |
| + } |
| node->data.local = layer_id_to_transform.second; |
| node->data.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); |
|
jaydasika
2016/06/30 00:26:39
Just realized map entries should be erased in Remo
jaydasika
2016/06/30 18:52:00
Done.
|
| LayerTreeHostCommon::CallFunctionForEveryLayer(this, [](LayerImpl* layer) { |
| layer->UpdatePropertyTreeForScrollingAndAnimationIfNeeded(); |