Chromium Code Reviews| Index: cc/layers/layer.cc |
| diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc |
| index 2430f9ca74906d6c7b9eb46a3441a561bfb318b1..4f4f17d687dd315c0417ef146d4e68f6e6c0349a 100644 |
| --- a/cc/layers/layer.cc |
| +++ b/cc/layers/layer.cc |
| @@ -88,6 +88,7 @@ Layer::Layer(const LayerSettings& settings) |
| force_render_surface_(false), |
| transform_is_invertible_(true), |
| has_render_surface_(false), |
| + subtree_property_changed_(false), |
| background_color_(0), |
| opacity_(1.f), |
| blend_mode_(SkXfermode::kSrcOver_Mode), |
| @@ -424,6 +425,7 @@ void Layer::RequestCopyOfOutput( |
| if (request->IsEmpty()) |
| return; |
| copy_requests_.push_back(std::move(request)); |
| + SetSubtreePropertyChanged(); |
| SetNeedsCommit(); |
| } |
| @@ -460,6 +462,7 @@ void Layer::SetMasksToBounds(bool masks_to_bounds) { |
| return; |
| masks_to_bounds_ = masks_to_bounds; |
| SetNeedsCommit(); |
| + SetSubtreePropertyChanged(); |
| } |
| void Layer::SetMaskLayer(Layer* mask_layer) { |
| @@ -477,6 +480,7 @@ void Layer::SetMaskLayer(Layer* mask_layer) { |
| mask_layer_->SetParent(this); |
| mask_layer_->SetIsMask(true); |
| } |
| + SetSubtreePropertyChanged(); |
| SetNeedsFullTreeSync(); |
| } |
| @@ -494,6 +498,7 @@ void Layer::SetReplicaLayer(Layer* layer) { |
| replica_layer_->RemoveFromParent(); |
| replica_layer_->SetParent(this); |
| } |
| + SetSubtreePropertyChanged(); |
| SetNeedsFullTreeSync(); |
| } |
| @@ -610,6 +615,7 @@ void Layer::SetBlendMode(SkXfermode::Mode blend_mode) { |
| blend_mode_ = blend_mode; |
| SetNeedsCommit(); |
| + SetSubtreePropertyChanged(); |
| } |
| void Layer::SetIsRootForIsolatedGroup(bool root) { |
| @@ -626,6 +632,7 @@ void Layer::SetContentsOpaque(bool opaque) { |
| return; |
| contents_opaque_ = opaque; |
| SetNeedsCommit(); |
| + SetSubtreePropertyChanged(); |
| } |
| void Layer::SetPosition(const gfx::PointF& position) { |
| @@ -1002,6 +1009,7 @@ void Layer::SetDoubleSided(bool double_sided) { |
| return; |
| double_sided_ = double_sided; |
| SetNeedsCommit(); |
| + SetSubtreePropertyChanged(); |
| } |
| void Layer::Set3dSortingContextId(int id) { |
| @@ -1010,6 +1018,7 @@ void Layer::Set3dSortingContextId(int id) { |
| return; |
| sorting_context_id_ = id; |
| SetNeedsCommit(); |
| + SetSubtreePropertyChanged(); |
| } |
| void Layer::SetTransformTreeIndex(int index) { |
| @@ -1093,6 +1102,7 @@ void Layer::SetShouldFlattenTransform(bool should_flatten) { |
| return; |
| should_flatten_transform_ = should_flatten; |
| SetNeedsCommit(); |
| + SetSubtreePropertyChanged(); |
| } |
| void Layer::SetUseParentBackfaceVisibility(bool use) { |
| @@ -1134,6 +1144,7 @@ void Layer::SetHideLayerAndSubtree(bool hide) { |
| hide_layer_and_subtree_ = hide; |
| SetNeedsCommit(); |
| + SetSubtreePropertyChanged(); |
| } |
| void Layer::SetNeedsDisplayRect(const gfx::Rect& dirty_rect) { |
| @@ -1222,6 +1233,11 @@ void Layer::PushPropertiesTo(LayerImpl* layer) { |
| layer->SetDrawsContent(DrawsContent()); |
| layer->SetHideLayerAndSubtree(hide_layer_and_subtree_); |
| layer->SetHasRenderSurface(has_render_surface_); |
| + // By the time we reach here, subtree_property_changed_ must have propagated |
| + // to all descendants. So, it is enough to check it only for the current |
|
ajuma
2016/02/10 15:31:32
Also say why it will have already propagated to de
jaydasika
2016/02/10 19:18:25
Done.
|
| + // layer. |
| + if (subtree_property_changed_) |
| + layer->NoteLayerPropertyChanged(); |
| layer->SetForceRenderSurface(force_render_surface_); |
| if (!layer->FilterIsAnimatingOnImplOnly() && !FilterIsAnimating()) |
| layer->SetFilters(filters_); |
| @@ -1359,6 +1375,7 @@ void Layer::PushPropertiesTo(LayerImpl* layer) { |
| // Reset any state that should be cleared for the next update. |
| stacking_order_changed_ = false; |
| + subtree_property_changed_ = false; |
| update_rect_ = gfx::Rect(); |
| needs_push_properties_ = false; |
| @@ -1494,6 +1511,7 @@ void Layer::LayerSpecificPropertiesToProto(proto::LayerProperties* proto) { |
| base->set_draws_content(draws_content_); |
| base->set_hide_layer_and_subtree(hide_layer_and_subtree_); |
| base->set_has_render_surface(has_render_surface_); |
| + base->set_subtree_property_changed(subtree_property_changed_); |
| // TODO(nyquist): Add support for serializing FilterOperations for |
| // |filters_| and |background_filters_|. See crbug.com/541321. |
| @@ -1582,6 +1600,7 @@ void Layer::FromLayerSpecificPropertiesProto( |
| draws_content_ = base.draws_content(); |
| hide_layer_and_subtree_ = base.hide_layer_and_subtree(); |
| has_render_surface_ = base.has_render_surface(); |
| + subtree_property_changed_ = base.subtree_property_changed(); |
| masks_to_bounds_ = base.masks_to_bounds(); |
| main_thread_scrolling_reasons_ = base.main_thread_scrolling_reasons(); |
| non_fast_scrollable_region_ = |
| @@ -1733,6 +1752,10 @@ void Layer::SetHasRenderSurface(bool has_render_surface) { |
| SetNeedsPushProperties(); |
| } |
| +void Layer::SetSubtreePropertyChanged() { |
| + subtree_property_changed_ = true; |
| +} |
| + |
| gfx::ScrollOffset Layer::ScrollOffsetForAnimation() const { |
| return CurrentScrollOffset(); |
| } |