diff options
author | mnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-12 13:49:11 +0000 |
---|---|---|
committer | mnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-12 13:49:11 +0000 |
commit | 68fe60ff51e006b604f2884e76ea5d91861b30d7 (patch) | |
tree | 54fc076177fdeb6149392357c364553770ae18cd /cc | |
parent | 6ccd58c92931257602cdfa2bde06c02944570760 (diff) | |
download | chromium_src-68fe60ff51e006b604f2884e76ea5d91861b30d7.zip chromium_src-68fe60ff51e006b604f2884e76ea5d91861b30d7.tar.gz chromium_src-68fe60ff51e006b604f2884e76ea5d91861b30d7.tar.bz2 |
Fix the cause of AwZoomTest#testMagnification... tests flakiness
AwContents maintains its own page scale value, which it receives
synchronously from the compositor. However, it was still using page scale
limits values from ContentViewCore, where they are updated async-ly.
This was causing spurious wrong 'canZoomOut' results.
Fixed by propagating page scale limits to AwContents together with
page scale updates. It would be great to eliminate duplication of page
scale values between ContentViewCore and AwContents though.
Re-applied changes to the tests from https://codereview.chromium.org/143683005
as they still make sense.
BUG=340327,340648
Review URL: https://codereview.chromium.org/156233005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@250706 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r-- | cc/input/layer_scroll_offset_delegate.h | 7 | ||||
-rw-r--r-- | cc/layers/layer_impl_unittest.cc | 10 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_impl_unittest.cc | 34 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl.cc | 20 |
4 files changed, 56 insertions, 15 deletions
diff --git a/cc/input/layer_scroll_offset_delegate.h b/cc/input/layer_scroll_offset_delegate.h index 034daab..2da5f13 100644 --- a/cc/input/layer_scroll_offset_delegate.h +++ b/cc/input/layer_scroll_offset_delegate.h @@ -39,8 +39,11 @@ class LayerScrollOffsetDelegate { virtual bool IsExternalFlingActive() const = 0; // This is called by the compositor to notify the delegate what is the current - // page scale factor is. - virtual void SetTotalPageScaleFactor(float page_scale_factor) = 0; + // page scale factor and limits are. + virtual void SetTotalPageScaleFactorAndLimits( + float page_scale_factor, + float min_page_scale_factor, + float max_page_scale_factor) = 0; // This is called by the compositor to notify the delegate what is the layer's // scrollable size is. diff --git a/cc/layers/layer_impl_unittest.cc b/cc/layers/layer_impl_unittest.cc index 33bd297..5796e98 100644 --- a/cc/layers/layer_impl_unittest.cc +++ b/cc/layers/layer_impl_unittest.cc @@ -491,7 +491,10 @@ class ScrollDelegateIgnore : public LayerScrollOffsetDelegate { fixed_offset_ = fixed_offset; } - virtual void SetTotalPageScaleFactor(float page_scale_factor) OVERRIDE {} + virtual void SetTotalPageScaleFactorAndLimits( + float page_scale_factor, + float min_page_scale_factor, + float max_page_scale_factor) OVERRIDE {} virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE {} private: @@ -542,7 +545,10 @@ class ScrollDelegateAccept : public LayerScrollOffsetDelegate { return current_offset_; } virtual bool IsExternalFlingActive() const OVERRIDE { return false; } - virtual void SetTotalPageScaleFactor(float page_scale_factor) OVERRIDE {} + virtual void SetTotalPageScaleFactorAndLimits( + float page_scale_factor, + float min_page_scale_factor, + float max_page_scale_factor) OVERRIDE {} virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE {} private: diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 448ac56..56eaecc 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc @@ -2686,7 +2686,10 @@ TEST_F(LayerTreeHostImplTest, ScrollScaledLayer) { class TestScrollOffsetDelegate : public LayerScrollOffsetDelegate { public: - TestScrollOffsetDelegate() : page_scale_factor_(0.f) {} + TestScrollOffsetDelegate() + : page_scale_factor_(0.f), + min_page_scale_factor_(-1.f), + max_page_scale_factor_(-1.f) {} virtual ~TestScrollOffsetDelegate() {} @@ -2705,8 +2708,13 @@ class TestScrollOffsetDelegate : public LayerScrollOffsetDelegate { virtual bool IsExternalFlingActive() const OVERRIDE { return false; } - virtual void SetTotalPageScaleFactor(float page_scale_factor) OVERRIDE { + virtual void SetTotalPageScaleFactorAndLimits( + float page_scale_factor, + float min_page_scale_factor, + float max_page_scale_factor) OVERRIDE { page_scale_factor_ = page_scale_factor; + min_page_scale_factor_ = min_page_scale_factor; + max_page_scale_factor_ = max_page_scale_factor; } virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE { @@ -2733,12 +2741,22 @@ class TestScrollOffsetDelegate : public LayerScrollOffsetDelegate { return page_scale_factor_; } + float min_page_scale_factor() const { + return min_page_scale_factor_; + } + + float max_page_scale_factor() const { + return max_page_scale_factor_; + } + private: gfx::Vector2dF last_set_scroll_offset_; gfx::Vector2dF getter_return_value_; gfx::Vector2dF max_scroll_offset_; gfx::SizeF scrollable_size_; float page_scale_factor_; + float min_page_scale_factor_; + float max_page_scale_factor_; }; TEST_F(LayerTreeHostImplTest, RootLayerScrollOffsetDelegation) { @@ -2756,20 +2774,28 @@ TEST_F(LayerTreeHostImplTest, RootLayerScrollOffsetDelegation) { EXPECT_EQ(initial_scroll_delta.ToString(), scroll_delegate.last_set_scroll_offset().ToString()); - // Setting the delegate results in the scrollable_size, max_scroll_offset and - // page_scale being set. + // Setting the delegate results in the scrollable_size, max_scroll_offset, + // page_scale_factor and {min|max}_page_scale_factor being set. EXPECT_EQ(gfx::SizeF(100, 100), scroll_delegate.scrollable_size()); EXPECT_EQ(gfx::Vector2dF(90, 80), scroll_delegate.max_scroll_offset()); EXPECT_EQ(1.f, scroll_delegate.page_scale_factor()); + EXPECT_EQ(0.f, scroll_delegate.min_page_scale_factor()); + EXPECT_EQ(0.f, scroll_delegate.max_page_scale_factor()); // Updating page scale immediately updates the delegate. host_impl_->active_tree()->SetPageScaleFactorAndLimits(2.f, 0.5f, 4.f); EXPECT_EQ(2.f, scroll_delegate.page_scale_factor()); + EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor()); + EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor()); host_impl_->active_tree()->SetPageScaleDelta(1.5f); EXPECT_EQ(3.f, scroll_delegate.page_scale_factor()); + EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor()); + EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor()); host_impl_->active_tree()->SetPageScaleDelta(1.f); host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f); EXPECT_EQ(1.f, scroll_delegate.page_scale_factor()); + EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor()); + EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor()); // Scrolling should be relative to the offset as returned by the delegate. gfx::Vector2dF scroll_delta(0.f, 10.f); diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index dfffb82..309939d 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc @@ -57,7 +57,7 @@ class LayerScrollOffsetDelegateProxy : public LayerScrollOffsetDelegate { NOTIMPLEMENTED(); } - virtual void SetTotalPageScaleFactor(float scale) OVERRIDE { + virtual void SetTotalPageScaleFactorAndLimits(float, float, float) OVERRIDE { NOTIMPLEMENTED(); } @@ -303,8 +303,10 @@ void LayerTreeImpl::SetPageScaleFactorAndLimits(float page_scale_factor, page_scale_factor_ = page_scale_factor; if (root_layer_scroll_offset_delegate_) { - root_layer_scroll_offset_delegate_->SetTotalPageScaleFactor( - total_page_scale_factor()); + root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( + total_page_scale_factor(), + this->min_page_scale_factor(), + this->max_page_scale_factor()); } ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer()); @@ -335,8 +337,10 @@ void LayerTreeImpl::SetPageScaleDelta(float delta) { set_needs_update_draw_properties(); if (root_layer_scroll_offset_delegate_) { - root_layer_scroll_offset_delegate_->SetTotalPageScaleFactor( - total_page_scale_factor()); + root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( + total_page_scale_factor(), + min_page_scale_factor(), + max_page_scale_factor()); } } @@ -777,8 +781,10 @@ void LayerTreeImpl::SetRootLayerScrollOffsetDelegate( root_layer_scroll_offset_delegate_->SetMaxScrollOffset( TotalMaxScrollOffset()); root_layer_scroll_offset_delegate_->SetScrollableSize(ScrollableSize()); - root_layer_scroll_offset_delegate_->SetTotalPageScaleFactor( - total_page_scale_factor()); + root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( + total_page_scale_factor(), + min_page_scale_factor(), + max_page_scale_factor()); if (inner_viewport_scroll_layer_) { inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( |