| Index: cc/layers/layer.cc
|
| diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc
|
| index 2430f9ca74906d6c7b9eb46a3441a561bfb318b1..b643ac7e27faf6d7183d2e703ae646c0bedca412 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,10 @@ void Layer::PushPropertiesTo(LayerImpl* layer) {
|
| layer->SetDrawsContent(DrawsContent());
|
| layer->SetHideLayerAndSubtree(hide_layer_and_subtree_);
|
| layer->SetHasRenderSurface(has_render_surface_);
|
| + // subtree_property_changed_ is propagated to all descendants while building
|
| + // property trees. So, it is enough to check it only for the current layer.
|
| + if (subtree_property_changed_)
|
| + layer->NoteLayerPropertyChanged();
|
| layer->SetForceRenderSurface(force_render_surface_);
|
| if (!layer->FilterIsAnimatingOnImplOnly() && !FilterIsAnimating())
|
| layer->SetFilters(filters_);
|
| @@ -1359,6 +1374,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 +1510,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 +1599,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 +1751,13 @@ void Layer::SetHasRenderSurface(bool has_render_surface) {
|
| SetNeedsPushProperties();
|
| }
|
|
|
| +void Layer::SetSubtreePropertyChanged() {
|
| + if (subtree_property_changed_)
|
| + return;
|
| + subtree_property_changed_ = true;
|
| + SetNeedsPushProperties();
|
| +}
|
| +
|
| gfx::ScrollOffset Layer::ScrollOffsetForAnimation() const {
|
| return CurrentScrollOffset();
|
| }
|
|
|