Skip to content

Commit

Permalink
[android] Remove unused scroll delta in TopControls
Browse files Browse the repository at this point in the history
In TopControlsManager, current_scroll_delta_ is consuming scroll delta
which is not been used by either top controls or the root layer.

So removing the unused scroll delta from the top controls so that top
controls will be shown before the glow effect.

BUG=424068

Review URL: https://codereview.chromium.org/661643004

Cr-Commit-Position: refs/heads/master@{#303367}
  • Loading branch information
sujiths.s authored and Commit bot committed Nov 8, 2014
1 parent 4376059 commit 344435e
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 5 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ Subrahmanya Praveen Munukutla <sataya.m@samsung.com>
Suchit Agrawal <a.suchit@samsung.com>
Sudarsana Babu Nagineni <sudarsana.nagineni@intel.com>
Sudarshan Parthasarathy <sudarshan.p@samsung.com>
Sujith S S <sujiths.s@samsung.com>
Sungguk Lim <limasdf@gmail.com>
Sungmann Cho <sungmann.cho@gmail.com>
Sungmann Cho <sungmann.cho@navercorp.com>
Expand Down
7 changes: 2 additions & 5 deletions cc/trees/layer_tree_host_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2629,11 +2629,8 @@ bool LayerTreeHostImpl::ShouldTopControlsConsumeScroll(
CurrentlyScrollingLayer() != OuterViewportScrollLayer())
return false;

if (InnerViewportScrollLayer()->MaxScrollOffset().y() > 0)
return true;

if (OuterViewportScrollLayer() &&
OuterViewportScrollLayer()->MaxScrollOffset().y() > 0)
if (active_tree()->TotalScrollOffset().y() <
active_tree()->TotalMaxScrollOffset().y())
return true;

return false;
Expand Down
70 changes: 70 additions & 0 deletions cc/trees/layer_tree_host_impl_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2592,6 +2592,14 @@ TEST_F(LayerTreeHostImplTopControlsTest, TopControlsViewportOffsetClamping) {
EXPECT_EQ(InputHandler::ScrollStarted,
host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
host_impl_->ScrollBy(gfx::Point(), scroll_delta);

// scrolling down at the max extents no longer hides the top controls
EXPECT_EQ(0.f,
settings_.top_controls_height -
host_impl_->active_tree()->total_top_controls_content_offset());

// forcefully hide the top controls by 25px
host_impl_->top_controls_manager()->ScrollBy(scroll_delta);
host_impl_->ScrollEnd();

EXPECT_EQ(scroll_delta.y(),
Expand Down Expand Up @@ -7301,6 +7309,68 @@ TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationAfterScroll) {
EXPECT_FALSE(host_impl_->top_controls_manager()->animation());
}

TEST_F(LayerTreeHostImplWithTopControlsTest,
TopControlsScrollDeltaInOverScroll) {
// test varifies that the overscroll delta should not have accumulated in
// the top controls if we do a hide and show without releasing finger.

LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 200));
host_impl_->SetViewportSize(gfx::Size(100, 100));
host_impl_->top_controls_manager()->UpdateTopControlsState(BOTH, SHOWN,
false);
DrawFrame();

EXPECT_EQ(InputHandler::ScrollStarted,
host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
EXPECT_EQ(0, host_impl_->top_controls_manager()->ControlsTopOffset());

float offset = 50;
EXPECT_TRUE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
EXPECT_EQ(gfx::Vector2dF().ToString(),
scroll_layer->TotalScrollOffset().ToString());

EXPECT_TRUE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
EXPECT_EQ(gfx::Vector2dF(0, offset).ToString(),
scroll_layer->TotalScrollOffset().ToString());

EXPECT_TRUE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);

// Should have fully scrolled
EXPECT_EQ(gfx::Vector2dF(0, scroll_layer->MaxScrollOffset().y()).ToString(),
scroll_layer->TotalScrollOffset().ToString());

float overscrollamount = 10;

// Overscroll the content
EXPECT_FALSE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, overscrollamount))
.did_scroll);
EXPECT_EQ(gfx::Vector2dF(0, 2 * offset).ToString(),
scroll_layer->TotalScrollOffset().ToString());
EXPECT_EQ(gfx::Vector2dF(0, overscrollamount).ToString(),
host_impl_->accumulated_root_overscroll().ToString());

EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, -2 * offset))
.did_scroll);
EXPECT_EQ(gfx::Vector2dF(0, 0).ToString(),
scroll_layer->TotalScrollOffset().ToString());
EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());

EXPECT_TRUE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, -offset)).did_scroll);
EXPECT_EQ(gfx::Vector2dF(0, 0).ToString(),
scroll_layer->TotalScrollOffset().ToString());

// Top controls should be fully visible
EXPECT_EQ(0, host_impl_->top_controls_manager()->ControlsTopOffset());

host_impl_->ScrollEnd();
}

class LayerTreeHostImplVirtualViewportTest : public LayerTreeHostImplTest {
public:
void SetupVirtualViewportLayers(const gfx::Size& content_size,
Expand Down

0 comments on commit 344435e

Please sign in to comment.