Index: cc/layers/layer_impl.cc |
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc |
index 3c2d6b4a991f4611dca6bf22e5b5b60cd3b505cf..7c70487c1814482dd0205fa9b47ca5890c50901a 100644 |
--- a/cc/layers/layer_impl.cc |
+++ b/cc/layers/layer_impl.cc |
@@ -706,7 +706,9 @@ base::DictionaryValue* LayerImpl::LayerTreeAsJson() const { |
} |
bool LayerImpl::LayerPropertyChanged() const { |
- if (layer_property_changed_) |
+ if (layer_property_changed_ || |
+ (layer_tree_impl()->property_trees() && |
+ layer_tree_impl()->property_trees()->full_tree_damaged)) |
return true; |
if (transform_tree_index() == -1) |
return false; |
@@ -720,7 +722,7 @@ bool LayerImpl::LayerPropertyChanged() const { |
EffectNode* effect_node = |
layer_tree_impl()->property_trees()->effect_tree.Node( |
effect_tree_index()); |
- if (effect_node && effect_node->data.opacity_changed) |
+ if (effect_node && effect_node->data.effect_changed) |
return true; |
return false; |
} |
@@ -731,27 +733,6 @@ void LayerImpl::NoteLayerPropertyChanged() { |
SetNeedsPushProperties(); |
} |
-void LayerImpl::NoteLayerPropertyChangedForSubtree() { |
- layer_property_changed_ = true; |
- layer_tree_impl()->set_needs_update_draw_properties(); |
- for (size_t i = 0; i < children_.size(); ++i) |
- children_[i]->NoteLayerPropertyChangedForDescendantsInternal(); |
- SetNeedsPushProperties(); |
-} |
- |
-void LayerImpl::NoteLayerPropertyChangedForDescendantsInternal() { |
- layer_property_changed_ = true; |
- for (size_t i = 0; i < children_.size(); ++i) |
- children_[i]->NoteLayerPropertyChangedForDescendantsInternal(); |
-} |
- |
-void LayerImpl::NoteLayerPropertyChangedForDescendants() { |
- layer_tree_impl()->set_needs_update_draw_properties(); |
- for (size_t i = 0; i < children_.size(); ++i) |
- children_[i]->NoteLayerPropertyChangedForDescendantsInternal(); |
- SetNeedsPushProperties(); |
-} |
- |
void LayerImpl::PushLayerPropertyChangedForSubtreeInternal() { |
if (LayerPropertyChanged()) |
NoteLayerPropertyChanged(); |
@@ -768,7 +749,7 @@ void LayerImpl::PushLayerPropertyChangedForSubtree() { |
for (int i = 1; i < static_cast<int>(effect_tree.size()); ++i) { |
EffectNode* node = effect_tree.Node(i); |
EffectNode* parent_node = effect_tree.parent(node); |
- effect_tree.UpdateOpacityChanged(node, parent_node); |
+ effect_tree.UpdateEffectChanged(node, parent_node); |
} |
for (int i = 1; i < static_cast<int>(transform_tree.size()); ++i) { |
TransformNode* node = transform_tree.Node(i); |
@@ -915,7 +896,7 @@ void LayerImpl::UpdatePropertyTreeOpacity() { |
if (node->owner_id != id() || node->data.opacity == effective_opacity) |
return; |
node->data.opacity = effective_opacity; |
- node->data.opacity_changed = true; |
+ node->data.effect_changed = true; |
layer_tree_impl()->property_trees()->changed = true; |
effect_tree.set_needs_update(true); |
} |
@@ -940,7 +921,17 @@ gfx::ScrollOffset LayerImpl::ScrollOffsetForAnimation() const { |
} |
void LayerImpl::OnFilterAnimated(const FilterOperations& filters) { |
- SetFilters(filters); |
+ if (filters_ != filters) { |
+ SetFilters(filters); |
+ SetNeedsPushProperties(); |
+ layer_tree_impl()->set_needs_update_draw_properties(); |
+ EffectTree& effect_tree = layer_tree_impl()->property_trees()->effect_tree; |
+ EffectNode* node = effect_tree.Node(effect_tree_index_); |
+ DCHECK_EQ(node->owner_id, id()); |
+ node->data.effect_changed = true; |
+ layer_tree_impl()->property_trees()->changed = true; |
+ effect_tree.set_needs_update(true); |
+ } |
} |
void LayerImpl::OnOpacityAnimated(float opacity) { |
@@ -1037,8 +1028,8 @@ void LayerImpl::SetBoundsDelta(const gfx::Vector2dF& bounds_delta) { |
gfx::PointF() + offset_to_transform_parent(), gfx::SizeF(bounds())); |
property_trees->clip_tree.set_needs_update(true); |
} |
- |
- NoteLayerPropertyChangedForSubtree(); |
+ property_trees->full_tree_damaged = true; |
+ layer_tree_impl()->set_needs_update_draw_properties(); |
} else { |
NoteLayerPropertyChanged(); |
} |
@@ -1143,7 +1134,6 @@ void LayerImpl::SetFilters(const FilterOperations& filters) { |
return; |
filters_ = filters; |
- NoteLayerPropertyChangedForSubtree(); |
} |
bool LayerImpl::FilterIsAnimating() const { |
@@ -1549,9 +1539,17 @@ void LayerImpl::DidUpdateScrollOffset() { |
DCHECK(scroll_offset_); |
layer_tree_impl()->DidUpdateScrollState(id()); |
- NoteLayerPropertyChangedForSubtree(); |
- UpdatePropertyTreeScrollOffset(); |
+ if (transform_tree_index_ != -1) { |
+ UpdatePropertyTreeScrollOffset(); |
+ TransformTree& transform_tree = |
+ layer_tree_impl()->property_trees()->transform_tree; |
+ TransformNode* node = transform_tree.Node(transform_tree_index_); |
+ node->data.transform_changed = true; |
+ layer_tree_impl()->property_trees()->changed = true; |
+ layer_tree_impl()->set_needs_update_draw_properties(); |
+ SetNeedsPushProperties(); |
+ } |
// Inform the pending twin that a property changed. |
if (layer_tree_impl()->IsActiveTree()) { |