diff options
author | hush <hush@chromium.org> | 2015-04-06 20:49:50 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-07 03:50:22 +0000 |
commit | 33370e19d3c6a43d0cb7c87f90aadb79d44dd741 (patch) | |
tree | fcdedeca49228d7232dc82cf34b7616ecf4d2c62 /cc/layers/layer_impl_unittest.cc | |
parent | 4882adfdf046e2a17b4ec3e2457609ef591cdc71 (diff) | |
download | chromium_src-33370e19d3c6a43d0cb7c87f90aadb79d44dd741.zip chromium_src-33370e19d3c6a43d0cb7c87f90aadb79d44dd741.tar.gz chromium_src-33370e19d3c6a43d0cb7c87f90aadb79d44dd741.tar.bz2 |
Refactor delegated scrolling in LayerImpl
When the root layer scroll offset delegate's scroll offset is bigger
than that of the outer viewport scroll layer, the root scroll offset is
distributed between inner and outer viewport scroll layer. However, the
layer that gets assigned a new scroll offset first will immediately
update the root layer delegate scroll offset without waiting for the
rest of the undistributed scrolls to be assigned to other layer. This
causes the associated bug 470360.
This CL simplified the logic around delegated scrolling by removing
LayerImpl::ScrollOffsetDelegate. LayerImpl will always have the most
recent and correct scroll offset.
LTHI and LTI still delegate the root layer scroll to an external source
(Android WebView).
There are 2 cases for a LayerImpl to change its scroll offset:
1. When the root layer scroll delegate scrolls, the new scroll offset will be
synchronously distributed to the inner and outer viewport scroll layer.
2. The LayerImpl scrolls by itself, like ScrollBy() or PushScrollOffset(). In
this case, root layer scroll delegate will be updated with the new scroll
offset.
BUG=470360
Review URL: https://codereview.chromium.org/1038173002
Cr-Commit-Position: refs/heads/master@{#324012}
Diffstat (limited to 'cc/layers/layer_impl_unittest.cc')
-rw-r--r-- | cc/layers/layer_impl_unittest.cc | 158 |
1 files changed, 1 insertions, 157 deletions
diff --git a/cc/layers/layer_impl_unittest.cc b/cc/layers/layer_impl_unittest.cc index 1cdbd59..d9811bc 100644 --- a/cc/layers/layer_impl_unittest.cc +++ b/cc/layers/layer_impl_unittest.cc @@ -516,112 +516,7 @@ TEST_F(LayerImplScrollTest, ScrollByWithNonZeroOffset) { EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); } -class ScrollDelegateIgnore : public LayerImpl::ScrollOffsetDelegate { - public: - void SetCurrentScrollOffset(const gfx::ScrollOffset& new_value) override { - last_attempted_set_offset_ = new_value; - } - gfx::ScrollOffset last_attempted_set_offset() const { - return last_attempted_set_offset_; - } - - gfx::ScrollOffset GetCurrentScrollOffset() override { - return gfx::ScrollOffset(fixed_offset_); - } - bool IsExternalFlingActive() const override { return false; } - void Update() const override { } - - void set_fixed_offset(const gfx::Vector2dF& fixed_offset) { - fixed_offset_ = fixed_offset; - } - - private: - gfx::ScrollOffset last_attempted_set_offset_; - gfx::Vector2dF fixed_offset_; -}; - -TEST_F(LayerImplScrollTest, ScrollByWithIgnoringDelegate) { - gfx::ScrollOffset scroll_offset(10, 5); - layer()->PushScrollOffsetFromMainThread(scroll_offset); - - EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); - - ScrollDelegateIgnore delegate; - gfx::Vector2dF fixed_offset(32, 12); - delegate.set_fixed_offset(fixed_offset); - layer()->SetScrollOffsetDelegate(&delegate); - layer()->RefreshFromScrollDelegate(); - - EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - - layer()->ScrollBy(gfx::Vector2dF(-100, 100)); - - EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - - layer()->SetScrollOffsetDelegate(nullptr); - - EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - - gfx::Vector2dF scroll_delta(1, 1); - layer()->ScrollBy(scroll_delta); - - EXPECT_VECTOR_EQ(fixed_offset + scroll_delta, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); -} - -class ScrollDelegateAccept : public LayerImpl::ScrollOffsetDelegate { - public: - void SetCurrentScrollOffset(const gfx::ScrollOffset& new_value) override { - current_offset_ = new_value; - } - gfx::ScrollOffset GetCurrentScrollOffset() override { - return current_offset_; - } - bool IsExternalFlingActive() const override { return false; } - void Update() const override { } - - private: - gfx::ScrollOffset current_offset_; -}; - -TEST_F(LayerImplScrollTest, ScrollByWithAcceptingDelegate) { - gfx::ScrollOffset scroll_offset(10, 5); - layer()->PushScrollOffsetFromMainThread(scroll_offset); - - EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); - - ScrollDelegateAccept delegate; - layer()->SetScrollOffsetDelegate(&delegate); - - EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); - - layer()->ScrollBy(gfx::Vector2dF(-100, 100)); - - EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - - layer()->SetScrollOffsetDelegate(nullptr); - - EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - - gfx::Vector2dF scroll_delta(1, 1); - layer()->ScrollBy(scroll_delta); - - EXPECT_VECTOR_EQ(gfx::Vector2dF(1, 80), layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); -} - -TEST_F(LayerImplScrollTest, ApplySentScrollsNoDelegate) { +TEST_F(LayerImplScrollTest, ApplySentScrollsNoListener) { gfx::ScrollOffset scroll_offset(10, 5); gfx::Vector2dF scroll_delta(20.5f, 8.5f); gfx::Vector2d sent_scroll_delta(12, -3); @@ -646,57 +541,6 @@ TEST_F(LayerImplScrollTest, ApplySentScrollsNoDelegate) { layer()->BaseScrollOffset()); } -TEST_F(LayerImplScrollTest, ApplySentScrollsWithIgnoringDelegate) { - gfx::ScrollOffset scroll_offset(10, 5); - gfx::Vector2d sent_scroll_delta(12, -3); - gfx::Vector2dF fixed_offset(32, 12); - - layer()->PushScrollOffsetFromMainThread(scroll_offset); - layer()->ScrollBy(sent_scroll_delta); - layer()->PullDeltaForMainThread(); - layer()->SetCurrentScrollOffset(scroll_offset); - ScrollDelegateIgnore delegate; - delegate.set_fixed_offset(fixed_offset); - layer()->SetScrollOffsetDelegate(&delegate); - layer()->RefreshFromScrollDelegate(); - - EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - - layer()->ApplySentScrollDeltasFromAbortedCommit(); - - EXPECT_VECTOR_EQ(fixed_offset, delegate.last_attempted_set_offset()); - - EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), - layer()->BaseScrollOffset()); -} - -TEST_F(LayerImplScrollTest, ApplySentScrollsWithAcceptingDelegate) { - gfx::ScrollOffset scroll_offset(10, 5); - gfx::Vector2d sent_scroll_delta(12, -3); - gfx::Vector2dF scroll_delta(20.5f, 8.5f); - - layer()->PushScrollOffsetFromMainThread(scroll_offset); - layer()->ScrollBy(sent_scroll_delta); - layer()->PullDeltaForMainThread(); - ScrollDelegateAccept delegate; - layer()->SetScrollOffsetDelegate(&delegate); - layer()->SetCurrentScrollOffset(scroll_offset + - gfx::ScrollOffset(scroll_delta)); - - EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), - layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); - - layer()->ApplySentScrollDeltasFromAbortedCommit(); - - EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), - layer()->CurrentScrollOffset()); - EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), - layer()->BaseScrollOffset()); -} - TEST_F(LayerImplScrollTest, ScrollUserUnscrollableLayer) { gfx::ScrollOffset scroll_offset(10, 5); gfx::Vector2dF scroll_delta(20.5f, 8.5f); |