Index: cc/layers/layer.cc |
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc |
index fb72c73b9c483b0b289a429e75e4095e3b71797d..3817115f709780042a40cecba6ec00312185b0b2 100644 |
--- a/cc/layers/layer.cc |
+++ b/cc/layers/layer.cc |
@@ -71,6 +71,7 @@ Layer::Layer() |
force_render_surface_(false), |
transform_is_invertible_(true), |
has_render_surface_(false), |
+ clear_impl_scroll_delta_(false), |
background_color_(0), |
opacity_(1.f), |
blend_mode_(SkXfermode::kSrcOver_Mode), |
@@ -970,12 +971,18 @@ void Layer::PushPropertiesTo(LayerImpl* layer) { |
// in LayerImpl::ApplyScrollDeltasSinceBeginMainFrame in a separate tree walk. |
if (layer->layer_tree_impl()->settings().impl_side_painting) { |
layer->SetScrollOffset(scroll_offset_); |
+ if (clear_impl_scroll_delta_) |
+ layer->ClearScrollDeltaAtActivation(); |
} else { |
- layer->SetScrollOffsetAndDelta( |
- scroll_offset_, |
- layer->ScrollDelta() - layer->sent_scroll_delta()); |
+ if (clear_impl_scroll_delta_) { |
+ layer->SetScrollOffsetAndDelta(scroll_offset_, gfx::Vector2dF()); |
+ } else { |
+ layer->SetScrollOffsetAndDelta( |
+ scroll_offset_, layer->ScrollDelta() - layer->sent_scroll_delta()); |
+ } |
layer->SetSentScrollDelta(gfx::Vector2dF()); |
} |
+ clear_impl_scroll_delta_ = false; |
// Wrap the copy_requests_ in a PostTask to the main thread. |
ScopedPtrVector<CopyOutputRequest> main_thread_copy_requests; |
@@ -1145,6 +1152,10 @@ void Layer::OnAnimationWaitingForDeletion() { |
SetNeedsPushProperties(); |
} |
+void Layer::OnScrollOffsetAnimationRemoved() { |
+ clear_impl_scroll_delta_ = true; |
+} |
+ |
bool Layer::IsActive() const { |
return true; |
} |