Index: cc/layers/layer.cc |
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc |
index 5e7bd77ecc9ee5fa31359d0d78e6980f529f7fc3..9d1cde59148f08d60cf642019fc37f1d0fe84e60 100644 |
--- a/cc/layers/layer.cc |
+++ b/cc/layers/layer.cc |
@@ -121,6 +121,11 @@ void Layer::SetLayerTreeHost(LayerTreeHost* host) { |
layer_tree_host_->set_needs_filter_context(); |
} |
+void Layer::SetNeedsUpdate() { |
+ if (layer_tree_host_ && !ignore_set_needs_commit_) |
+ layer_tree_host_->SetNeedsUpdateLayers(); |
+} |
+ |
void Layer::SetNeedsCommit() { |
if (!layer_tree_host_) |
return; |
@@ -563,14 +568,17 @@ void Layer::SetScrollOffset(gfx::Vector2d scroll_offset) { |
void Layer::SetScrollOffsetFromImplSide(gfx::Vector2d scroll_offset) { |
DCHECK(IsPropertyChangeAllowed()); |
+ // This function only gets called during a begin frame, so there |
+ // is no need to call SetNeedsUpdate here. |
DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested()); |
if (scroll_offset_ == scroll_offset) |
return; |
scroll_offset_ = scroll_offset; |
+ SetNeedsPushProperties(); |
if (!did_scroll_callback_.is_null()) |
did_scroll_callback_.Run(); |
- // Note: didScroll() could potentially change the layer structure. |
- // "this" may have been destroyed during the process. |
+ // The callback could potentially change the layer structure: |
+ // "this" may have been destroyed during the process. |
} |
void Layer::SetMaxScrollOffset(gfx::Vector2d max_scroll_offset) { |
@@ -663,14 +671,16 @@ void Layer::SetHideLayerAndSubtree(bool hide) { |
} |
void Layer::SetNeedsDisplayRect(const gfx::RectF& dirty_rect) { |
+ if (!update_rect_.Contains(dirty_rect)) { |
+ SetNeedsPushProperties(); |
+ } |
+ |
update_rect_.Union(dirty_rect); |
needs_display_ = true; |
- // Simply mark the contents as dirty. For non-root layers, the call to |
- // SetNeedsCommit will schedule a fresh compositing pass. |
- // For the root layer, SetNeedsCommit has no effect. |
- if (DrawsContent() && !update_rect_.IsEmpty()) |
- SetNeedsCommit(); |
+ if (DrawsContent() && !update_rect_.IsEmpty()) { |
+ SetNeedsUpdate(); |
+ } |
} |
bool Layer::DescendantIsFixedToContainerLayer() const { |