Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(846)

Side by Side Diff: ui/events/blink/input_handler_proxy.cc

Issue 2630603002: Revert of Touchpad and wheel scroll latching for ChromeOS behind flag. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/events/blink/input_handler_proxy.h ('k') | ui/events/blink/input_handler_proxy_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/events/blink/input_handler_proxy.h" 5 #include "ui/events/blink/input_handler_proxy.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 expect_scroll_update_end_(false), 247 expect_scroll_update_end_(false),
248 #endif 248 #endif
249 gesture_scroll_on_impl_thread_(false), 249 gesture_scroll_on_impl_thread_(false),
250 gesture_pinch_on_impl_thread_(false), 250 gesture_pinch_on_impl_thread_(false),
251 fling_may_be_active_on_main_thread_(false), 251 fling_may_be_active_on_main_thread_(false),
252 disallow_horizontal_fling_scroll_(false), 252 disallow_horizontal_fling_scroll_(false),
253 disallow_vertical_fling_scroll_(false), 253 disallow_vertical_fling_scroll_(false),
254 has_fling_animation_started_(false), 254 has_fling_animation_started_(false),
255 smooth_scroll_enabled_(false), 255 smooth_scroll_enabled_(false),
256 uma_latency_reporting_enabled_(base::TimeTicks::IsHighResolution()), 256 uma_latency_reporting_enabled_(base::TimeTicks::IsHighResolution()),
257 touchpad_and_wheel_scroll_latching_enabled_(false),
258 touch_start_result_(kEventDispositionUndefined), 257 touch_start_result_(kEventDispositionUndefined),
259 current_overscroll_params_(nullptr), 258 current_overscroll_params_(nullptr),
260 has_ongoing_compositor_scroll_pinch_(false), 259 has_ongoing_compositor_scroll_pinch_(false),
261 tick_clock_(base::MakeUnique<base::DefaultTickClock>()) { 260 tick_clock_(base::MakeUnique<base::DefaultTickClock>()) {
262 DCHECK(client); 261 DCHECK(client);
263 input_handler_->BindToClient(this); 262 input_handler_->BindToClient(this);
264 cc::ScrollElasticityHelper* scroll_elasticity_helper = 263 cc::ScrollElasticityHelper* scroll_elasticity_helper =
265 input_handler_->CreateScrollElasticityHelper(); 264 input_handler_->CreateScrollElasticityHelper();
266 if (scroll_elasticity_helper) { 265 if (scroll_elasticity_helper) {
267 scroll_elasticity_controller_.reset( 266 scroll_elasticity_controller_.reset(
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 case cc::EventListenerProperties::kBlocking: 606 case cc::EventListenerProperties::kBlocking:
608 return DID_NOT_HANDLE; 607 return DID_NOT_HANDLE;
609 case cc::EventListenerProperties::kNone: 608 case cc::EventListenerProperties::kNone:
610 return DROP_EVENT; 609 return DROP_EVENT;
611 default: 610 default:
612 NOTREACHED(); 611 NOTREACHED();
613 return DROP_EVENT; 612 return DROP_EVENT;
614 } 613 }
615 } 614 }
616 615
617 InputHandlerProxy::EventDisposition InputHandlerProxy::FlingScrollByMouseWheel( 616 InputHandlerProxy::EventDisposition InputHandlerProxy::ScrollByMouseWheel(
618 const WebMouseWheelEvent& wheel_event, 617 const WebMouseWheelEvent& wheel_event,
619 cc::EventListenerProperties listener_properties) { 618 cc::EventListenerProperties listener_properties) {
620 DCHECK(listener_properties == cc::EventListenerProperties::kPassive || 619 DCHECK(listener_properties == cc::EventListenerProperties::kPassive ||
621 listener_properties == cc::EventListenerProperties::kNone); 620 listener_properties == cc::EventListenerProperties::kNone);
622 621
623 DCHECK(!wheel_event.railsMode); 622 // TODO(ccameron): The rail information should be pushed down into
624 gfx::Vector2dF scroll_delta(-wheel_event.deltaX, -wheel_event.deltaY); 623 // InputHandler.
624 gfx::Vector2dF scroll_delta(
625 wheel_event.railsMode != WebInputEvent::RailsModeVertical
626 ? -wheel_event.deltaX
627 : 0,
628 wheel_event.railsMode != WebInputEvent::RailsModeHorizontal
629 ? -wheel_event.deltaY
630 : 0);
625 631
626 DCHECK(!wheel_event.scrollByPage); 632 if (wheel_event.scrollByPage) {
627 DCHECK(wheel_event.hasPreciseScrollingDeltas); 633 // TODO(jamesr): We don't properly handle scroll by page in the compositor
628 if (touchpad_and_wheel_scroll_latching_enabled_) { 634 // thread, so punt it to the main thread. http://crbug.com/236639
629 if (gesture_scroll_on_impl_thread_) { 635 RecordMainThreadScrollingReasons(
630 TRACE_EVENT_INSTANT2("input", 636 blink::WebGestureDeviceTouchpad,
631 "InputHandlerProxy::handle_input wheel scroll", 637 cc::MainThreadScrollingReason::kPageBasedScrolling);
632 TRACE_EVENT_SCOPE_THREAD, "deltaX", scroll_delta.x(), 638 return DID_NOT_HANDLE;
633 "deltaY", scroll_delta.y());
634 639
635 cc::ScrollStateData scroll_state_update_data; 640 } else if (ShouldAnimate(wheel_event.hasPreciseScrollingDeltas)) {
636 scroll_state_update_data.delta_x = scroll_delta.x(); 641 base::TimeTicks event_time =
637 scroll_state_update_data.delta_y = scroll_delta.y(); 642 base::TimeTicks() +
638 scroll_state_update_data.position_x = wheel_event.x; 643 base::TimeDelta::FromSecondsD(wheel_event.timeStampSeconds);
639 scroll_state_update_data.position_y = wheel_event.y; 644 base::TimeDelta delay = base::TimeTicks::Now() - event_time;
640 cc::ScrollState scroll_state_update(scroll_state_update_data); 645 cc::InputHandler::ScrollStatus scroll_status =
646 input_handler_->ScrollAnimated(gfx::Point(wheel_event.x, wheel_event.y),
647 scroll_delta, delay);
641 648
642 cc::InputHandlerScrollResult scroll_result = 649 RecordMainThreadScrollingReasons(
643 input_handler_->ScrollBy(&scroll_state_update); 650 blink::WebGestureDeviceTouchpad,
644 HandleOverscroll(gfx::Point(wheel_event.x, wheel_event.y), scroll_result, 651 scroll_status.main_thread_scrolling_reasons);
645 false);
646 if (scroll_result.did_scroll) {
647 return listener_properties == cc::EventListenerProperties::kPassive
648 ? DID_HANDLE_NON_BLOCKING
649 : DID_HANDLE;
650 }
651 652
652 return DROP_EVENT; 653 switch (scroll_status.thread) {
653 } else { 654 case cc::InputHandler::SCROLL_ON_IMPL_THREAD:
654 return DID_NOT_HANDLE; 655 return DID_HANDLE;
656 case cc::InputHandler::SCROLL_IGNORED:
657 return DROP_EVENT;
658 default:
659 return DID_NOT_HANDLE;
655 } 660 }
656 } else { // !touchpad_and_wheel_scroll_latching_enabled_ 661
662 } else {
657 cc::ScrollStateData scroll_state_begin_data; 663 cc::ScrollStateData scroll_state_begin_data;
658 scroll_state_begin_data.position_x = wheel_event.x; 664 scroll_state_begin_data.position_x = wheel_event.x;
659 scroll_state_begin_data.position_y = wheel_event.y; 665 scroll_state_begin_data.position_y = wheel_event.y;
660 scroll_state_begin_data.is_beginning = true; 666 scroll_state_begin_data.is_beginning = true;
661 cc::ScrollState scroll_state_begin(scroll_state_begin_data); 667 cc::ScrollState scroll_state_begin(scroll_state_begin_data);
662 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( 668 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin(
663 &scroll_state_begin, cc::InputHandler::WHEEL); 669 &scroll_state_begin, cc::InputHandler::WHEEL);
664 670
665 RecordMainThreadScrollingReasons( 671 RecordMainThreadScrollingReasons(
666 blink::WebGestureDeviceTouchpad, 672 blink::WebGestureDeviceTouchpad,
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 NOTREACHED(); 873 NOTREACHED();
868 return DID_NOT_HANDLE; 874 return DID_NOT_HANDLE;
869 } 875 }
870 876
871 #ifndef NDEBUG 877 #ifndef NDEBUG
872 expect_scroll_update_end_ = false; 878 expect_scroll_update_end_ = false;
873 #endif 879 #endif
874 880
875 switch (scroll_status.thread) { 881 switch (scroll_status.thread) {
876 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: { 882 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: {
877 if (!touchpad_and_wheel_scroll_latching_enabled_ && 883 if (gesture_event.sourceDevice == blink::WebGestureDeviceTouchpad) {
878 gesture_event.sourceDevice == blink::WebGestureDeviceTouchpad) {
879 scroll_state.set_is_ending(true); 884 scroll_state.set_is_ending(true);
880 input_handler_->ScrollEnd(&scroll_state); 885 input_handler_->ScrollEnd(&scroll_state);
881 } 886 }
882 887
883 const float vx = gesture_event.data.flingStart.velocityX; 888 const float vx = gesture_event.data.flingStart.velocityX;
884 const float vy = gesture_event.data.flingStart.velocityY; 889 const float vy = gesture_event.data.flingStart.velocityY;
885 current_fling_velocity_ = gfx::Vector2dF(vx, vy); 890 current_fling_velocity_ = gfx::Vector2dF(vx, vy);
886 DCHECK(!current_fling_velocity_.IsZero()); 891 DCHECK(!current_fling_velocity_.IsZero());
887 fling_curve_.reset(client_->CreateFlingAnimationCurve( 892 fling_curve_.reset(client_->CreateFlingAnimationCurve(
888 gesture_event.sourceDevice, 893 gesture_event.sourceDevice,
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 if (CancelCurrentFlingWithoutNotifyingClient()) { 1338 if (CancelCurrentFlingWithoutNotifyingClient()) {
1334 client_->DidStopFlinging(); 1339 client_->DidStopFlinging();
1335 return true; 1340 return true;
1336 } 1341 }
1337 return false; 1342 return false;
1338 } 1343 }
1339 1344
1340 bool InputHandlerProxy::CancelCurrentFlingWithoutNotifyingClient() { 1345 bool InputHandlerProxy::CancelCurrentFlingWithoutNotifyingClient() {
1341 bool had_fling_animation = !!fling_curve_; 1346 bool had_fling_animation = !!fling_curve_;
1342 if (had_fling_animation && 1347 if (had_fling_animation &&
1343 (fling_parameters_.sourceDevice == blink::WebGestureDeviceTouchscreen || 1348 fling_parameters_.sourceDevice == blink::WebGestureDeviceTouchscreen) {
1344 (touchpad_and_wheel_scroll_latching_enabled_ &&
1345 fling_parameters_.sourceDevice == blink::WebGestureDeviceTouchpad))) {
1346 cc::ScrollStateData scroll_state_data; 1349 cc::ScrollStateData scroll_state_data;
1347 scroll_state_data.is_ending = true; 1350 scroll_state_data.is_ending = true;
1348 cc::ScrollState scroll_state(scroll_state_data); 1351 cc::ScrollState scroll_state(scroll_state_data);
1349 input_handler_->ScrollEnd(&scroll_state); 1352 input_handler_->ScrollEnd(&scroll_state);
1350 TRACE_EVENT_ASYNC_END0( 1353 TRACE_EVENT_ASYNC_END0(
1351 "input", 1354 "input",
1352 "InputHandlerProxy::HandleGestureFling::started", 1355 "InputHandlerProxy::HandleGestureFling::started",
1353 this); 1356 this);
1354 } 1357 }
1355 1358
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1406 fling_parameters_.modifiers, 1409 fling_parameters_.modifiers,
1407 InSecondsF(base::TimeTicks::Now())); 1410 InSecondsF(base::TimeTicks::Now()));
1408 synthetic_wheel.deltaX = increment.width; 1411 synthetic_wheel.deltaX = increment.width;
1409 synthetic_wheel.deltaY = increment.height; 1412 synthetic_wheel.deltaY = increment.height;
1410 synthetic_wheel.hasPreciseScrollingDeltas = true; 1413 synthetic_wheel.hasPreciseScrollingDeltas = true;
1411 synthetic_wheel.x = fling_parameters_.point.x; 1414 synthetic_wheel.x = fling_parameters_.point.x;
1412 synthetic_wheel.y = fling_parameters_.point.y; 1415 synthetic_wheel.y = fling_parameters_.point.y;
1413 synthetic_wheel.globalX = fling_parameters_.globalPoint.x; 1416 synthetic_wheel.globalX = fling_parameters_.globalPoint.x;
1414 synthetic_wheel.globalY = fling_parameters_.globalPoint.y; 1417 synthetic_wheel.globalY = fling_parameters_.globalPoint.y;
1415 1418
1416 disposition = FlingScrollByMouseWheel(synthetic_wheel, properties); 1419 disposition = ScrollByMouseWheel(synthetic_wheel, properties);
1417 1420
1418 // Send the event over to the main thread. 1421 // Send the event over to the main thread.
1419 if (disposition == DID_HANDLE_NON_BLOCKING) { 1422 if (disposition == DID_HANDLE_NON_BLOCKING) {
1420 client_->DispatchNonBlockingEventToMainThread( 1423 client_->DispatchNonBlockingEventToMainThread(
1421 ui::WebInputEventTraits::Clone(synthetic_wheel), ui::LatencyInfo()); 1424 ui::WebInputEventTraits::Clone(synthetic_wheel), ui::LatencyInfo());
1422 } 1425 }
1423 break; 1426 break;
1424 } 1427 }
1425 default: 1428 default:
1426 NOTREACHED(); 1429 NOTREACHED();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1536 scroll_elasticity_controller_->GetWeakPtr(), gesture_event, 1539 scroll_elasticity_controller_->GetWeakPtr(), gesture_event,
1537 scroll_result)); 1540 scroll_result));
1538 } 1541 }
1539 1542
1540 void InputHandlerProxy::SetTickClockForTesting( 1543 void InputHandlerProxy::SetTickClockForTesting(
1541 std::unique_ptr<base::TickClock> tick_clock) { 1544 std::unique_ptr<base::TickClock> tick_clock) {
1542 tick_clock_ = std::move(tick_clock); 1545 tick_clock_ = std::move(tick_clock);
1543 } 1546 }
1544 1547
1545 } // namespace ui 1548 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/blink/input_handler_proxy.h ('k') | ui/events/blink/input_handler_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698