Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(630)

Unified Diff: cc/layers/layer.cc

Issue 1688563002: cc :: Move some tracking of layer_property_changed to main thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layers/layer.h ('k') | cc/layers/layer_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
}
« no previous file with comments | « cc/layers/layer.h ('k') | cc/layers/layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698