Commit 9f66ee85 authored by David Bokan's avatar David Bokan Committed by Commit Bot

[Refactor] ScrollAnimated always scrolls latched node

This CL makes it so that the CC animated scroll path latches only in
ScrollAnimatedBegin and prevents it from re-latching at all in
ScrollAnimated.

Since the targetted scrolling node can no longer change in
ScrollAnimated it no longer needs to return any value so the signature
of the method and some tests had to change.

Bug: 1016229
Change-Id: I9b3609de3f22dd7859bece5bb121c7ea752779a5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1980984
Commit-Queue: David Bokan <bokan@chromium.org>
Reviewed-by: default avatarPhilip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#727997}
parent 4792386b
...@@ -176,12 +176,12 @@ class CC_EXPORT InputHandler { ...@@ -176,12 +176,12 @@ class CC_EXPORT InputHandler {
// a subsequent call to ScrollAnimated can begin on the impl thread. // a subsequent call to ScrollAnimated can begin on the impl thread.
virtual ScrollStatus ScrollAnimatedBegin(ScrollState* scroll_state) = 0; virtual ScrollStatus ScrollAnimatedBegin(ScrollState* scroll_state) = 0;
// Returns SCROLL_ON_IMPL_THREAD if an animation is initiated on the impl // |delayed_by| is the delay that is taken into account when determining
// thread. delayed_by is the delay that is taken into account when determining // the duration of the animation. TODO(bokan): Should eventually be merged
// the duration of the animation. // into ScrollBy. https://crbug.com/1016229.
virtual ScrollStatus ScrollAnimated(const gfx::Point& viewport_point, virtual void ScrollAnimated(const gfx::Point& viewport_point,
const gfx::Vector2dF& scroll_delta, const gfx::Vector2dF& scroll_delta,
base::TimeDelta delayed_by) = 0; base::TimeDelta delayed_by) = 0;
// Scroll the layer selected by |ScrollBegin| by given |scroll_state| delta. // Scroll the layer selected by |ScrollBegin| by given |scroll_state| delta.
// Internally, the delta is transformed to local layer's coordinate space for // Internally, the delta is transformed to local layer's coordinate space for
......
This diff is collapsed.
...@@ -267,10 +267,9 @@ class CC_EXPORT LayerTreeHostImpl : public InputHandler, ...@@ -267,10 +267,9 @@ class CC_EXPORT LayerTreeHostImpl : public InputHandler,
ScrollState* scroll_state, ScrollState* scroll_state,
InputHandler::ScrollInputType type) override; InputHandler::ScrollInputType type) override;
ScrollStatus ScrollAnimatedBegin(ScrollState* scroll_state) override; ScrollStatus ScrollAnimatedBegin(ScrollState* scroll_state) override;
InputHandler::ScrollStatus ScrollAnimated( void ScrollAnimated(const gfx::Point& viewport_point,
const gfx::Point& viewport_point, const gfx::Vector2dF& scroll_delta,
const gfx::Vector2dF& scroll_delta, base::TimeDelta delayed_by = base::TimeDelta()) override;
base::TimeDelta delayed_by = base::TimeDelta()) override;
InputHandlerScrollResult ScrollBy(ScrollState* scroll_state) override; InputHandlerScrollResult ScrollBy(ScrollState* scroll_state) override;
void RequestUpdateForSynchronousInputHandler() override; void RequestUpdateForSynchronousInputHandler() override;
void SetSynchronousInputHandlerRootScrollOffset( void SetSynchronousInputHandlerRootScrollOffset(
......
This diff is collapsed.
...@@ -912,28 +912,19 @@ InputHandlerProxy::HandleGestureScrollUpdate( ...@@ -912,28 +912,19 @@ InputHandlerProxy::HandleGestureScrollUpdate(
if (ShouldAnimate(gesture_event.SourceDevice(), if (ShouldAnimate(gesture_event.SourceDevice(),
gesture_event.data.scroll_update.delta_units != gesture_event.data.scroll_update.delta_units !=
ui::input_types::ScrollGranularity::kScrollByPixel)) { ui::input_types::ScrollGranularity::kScrollByPixel)) {
DCHECK(!scroll_state.is_in_inertial_phase()); if (input_handler_->ScrollingShouldSwitchtoMainThread()) {
base::TimeTicks event_time = gesture_event.TimeStamp(); TRACE_EVENT_INSTANT0("input", "Move Scroll To Main Thread",
base::TimeDelta delay = base::TimeTicks::Now() - event_time; TRACE_EVENT_SCOPE_THREAD);
switch (input_handler_ gesture_scroll_on_impl_thread_ = false;
->ScrollAnimated(gfx::ToFlooredPoint(scroll_point), client_->GenerateScrollBeginAndSendToMainThread(gesture_event);
scroll_delta, delay) return DID_NOT_HANDLE;
.thread) { } else {
case cc::InputHandler::SCROLL_ON_IMPL_THREAD: DCHECK(!scroll_state.is_in_inertial_phase());
return DID_HANDLE; base::TimeTicks event_time = gesture_event.TimeStamp();
case cc::InputHandler::SCROLL_IGNORED: base::TimeDelta delay = base::TimeTicks::Now() - event_time;
TRACE_EVENT_INSTANT0("input", "Scroll Ignored", input_handler_->ScrollAnimated(gfx::ToFlooredPoint(scroll_point),
TRACE_EVENT_SCOPE_THREAD); scroll_delta, delay);
return DROP_EVENT; return DID_HANDLE;
case cc::InputHandler::SCROLL_ON_MAIN_THREAD:
case cc::InputHandler::SCROLL_UNKNOWN:
if (input_handler_->ScrollingShouldSwitchtoMainThread()) {
TRACE_EVENT_INSTANT0("input", "Move Scroll To Main Thread",
TRACE_EVENT_SCOPE_THREAD);
gesture_scroll_on_impl_thread_ = false;
client_->GenerateScrollBeginAndSendToMainThread(gesture_event);
}
return DID_NOT_HANDLE;
} }
} }
......
...@@ -117,9 +117,9 @@ class MockInputHandler : public cc::InputHandler { ...@@ -117,9 +117,9 @@ class MockInputHandler : public cc::InputHandler {
cc::InputHandler::ScrollInputType type)); cc::InputHandler::ScrollInputType type));
MOCK_METHOD1(ScrollAnimatedBegin, ScrollStatus(cc::ScrollState*)); MOCK_METHOD1(ScrollAnimatedBegin, ScrollStatus(cc::ScrollState*));
MOCK_METHOD3(ScrollAnimated, MOCK_METHOD3(ScrollAnimated,
ScrollStatus(const gfx::Point& viewport_point, void(const gfx::Point& viewport_point,
const gfx::Vector2dF& scroll_delta, const gfx::Vector2dF& scroll_delta,
base::TimeDelta)); base::TimeDelta));
MOCK_METHOD1(ScrollBy, cc::InputHandlerScrollResult(cc::ScrollState*)); MOCK_METHOD1(ScrollBy, cc::InputHandlerScrollResult(cc::ScrollState*));
MOCK_METHOD1(ScrollEnd, void(bool)); MOCK_METHOD1(ScrollEnd, void(bool));
MOCK_METHOD0(ScrollingShouldSwitchtoMainThread, bool()); MOCK_METHOD0(ScrollingShouldSwitchtoMainThread, bool());
...@@ -749,8 +749,9 @@ TEST_P(InputHandlerProxyTest, AnimatedScrollbarScroll) { ...@@ -749,8 +749,9 @@ TEST_P(InputHandlerProxyTest, AnimatedScrollbarScroll) {
// Test setup for a kGestureScrollUpdate. // Test setup for a kGestureScrollUpdate.
gesture_.SetType(WebInputEvent::kGestureScrollUpdate); gesture_.SetType(WebInputEvent::kGestureScrollUpdate);
EXPECT_CALL(mock_input_handler_, ScrollAnimated(_, _, _)) EXPECT_CALL(mock_input_handler_, ScrollAnimated(_, _, _));
.WillOnce(testing::Return(kImplThreadScrollState)); EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
.WillOnce(testing::Return(false));
EXPECT_EQ(expected_disposition_, EXPECT_EQ(expected_disposition_,
input_handler_->RouteToTypeSpecificHandler(gesture_)); input_handler_->RouteToTypeSpecificHandler(gesture_));
EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing()); EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
...@@ -837,6 +838,8 @@ TEST_P(InputHandlerProxyTest, DISABLED_GestureScrollByCoarsePixels) { ...@@ -837,6 +838,8 @@ TEST_P(InputHandlerProxyTest, DISABLED_GestureScrollByCoarsePixels) {
ui::input_types::ScrollGranularity::kScrollByPixel; ui::input_types::ScrollGranularity::kScrollByPixel;
EXPECT_CALL(mock_input_handler_, ScrollAnimatedBegin(_)) EXPECT_CALL(mock_input_handler_, ScrollAnimatedBegin(_))
.WillOnce(testing::Return(kImplThreadScrollState)); .WillOnce(testing::Return(kImplThreadScrollState));
EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
.WillOnce(testing::Return(false));
EXPECT_EQ(expected_disposition_, EXPECT_EQ(expected_disposition_,
input_handler_->RouteToTypeSpecificHandler(gesture_)); input_handler_->RouteToTypeSpecificHandler(gesture_));
...@@ -844,8 +847,7 @@ TEST_P(InputHandlerProxyTest, DISABLED_GestureScrollByCoarsePixels) { ...@@ -844,8 +847,7 @@ TEST_P(InputHandlerProxyTest, DISABLED_GestureScrollByCoarsePixels) {
gesture_.data.scroll_update.delta_units = gesture_.data.scroll_update.delta_units =
ui::input_types::ScrollGranularity::kScrollByPixel; ui::input_types::ScrollGranularity::kScrollByPixel;
EXPECT_CALL(mock_input_handler_, ScrollAnimated(_, _, _)) EXPECT_CALL(mock_input_handler_, ScrollAnimated(_, _, _));
.WillOnce(testing::Return(kImplThreadScrollState));
EXPECT_EQ(expected_disposition_, EXPECT_EQ(expected_disposition_,
input_handler_->RouteToTypeSpecificHandler(gesture_)); input_handler_->RouteToTypeSpecificHandler(gesture_));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment