| OLD | NEW |
| 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 <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 point.position = WebFloatPoint(x, y); | 318 point.position = WebFloatPoint(x, y); |
| 319 return point; | 319 return point; |
| 320 } | 320 } |
| 321 | 321 |
| 322 const cc::InputHandler::ScrollStatus kImplThreadScrollState( | 322 const cc::InputHandler::ScrollStatus kImplThreadScrollState( |
| 323 cc::InputHandler::SCROLL_ON_IMPL_THREAD, | 323 cc::InputHandler::SCROLL_ON_IMPL_THREAD, |
| 324 cc::MainThreadScrollingReason::kNotScrollingOnMain); | 324 cc::MainThreadScrollingReason::kNotScrollingOnMain); |
| 325 | 325 |
| 326 const cc::InputHandler::ScrollStatus kMainThreadScrollState( | 326 const cc::InputHandler::ScrollStatus kMainThreadScrollState( |
| 327 cc::InputHandler::SCROLL_ON_MAIN_THREAD, | 327 cc::InputHandler::SCROLL_ON_MAIN_THREAD, |
| 328 cc::MainThreadScrollingReason::kNotScrollingOnMain); | 328 cc::MainThreadScrollingReason::kHandlingScrollFromMainThread); |
| 329 | 329 |
| 330 const cc::InputHandler::ScrollStatus kScrollIgnoredScrollState( | 330 const cc::InputHandler::ScrollStatus kScrollIgnoredScrollState( |
| 331 cc::InputHandler::SCROLL_IGNORED, | 331 cc::InputHandler::SCROLL_IGNORED, |
| 332 cc::MainThreadScrollingReason::kNotScrollable); | 332 cc::MainThreadScrollingReason::kNotScrollable); |
| 333 | 333 |
| 334 class TestInputHandlerProxy : public InputHandlerProxy { | 334 class TestInputHandlerProxy : public InputHandlerProxy { |
| 335 public: | 335 public: |
| 336 TestInputHandlerProxy(cc::InputHandler* input_handler, | 336 TestInputHandlerProxy(cc::InputHandler* input_handler, |
| 337 InputHandlerProxyClient* client) | 337 InputHandlerProxyClient* client) |
| 338 : InputHandlerProxy(input_handler, client) {} | 338 : InputHandlerProxy(input_handler, client) {} |
| (...skipping 2659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2998 input_handler_->RecordMainThreadScrollingReasonsForTest( | 2998 input_handler_->RecordMainThreadScrollingReasonsForTest( |
| 2999 blink::WebGestureDeviceTouchpad, | 2999 blink::WebGestureDeviceTouchpad, |
| 3000 cc::MainThreadScrollingReason::kHandlingScrollFromMainThread); | 3000 cc::MainThreadScrollingReason::kHandlingScrollFromMainThread); |
| 3001 | 3001 |
| 3002 EXPECT_THAT( | 3002 EXPECT_THAT( |
| 3003 histogram_tester().GetAllSamples("Renderer4.MainThreadWheelScrollReason"), | 3003 histogram_tester().GetAllSamples("Renderer4.MainThreadWheelScrollReason"), |
| 3004 testing::ElementsAre(base::Bucket(1, 1), base::Bucket(3, 1), | 3004 testing::ElementsAre(base::Bucket(1, 1), base::Bucket(3, 1), |
| 3005 base::Bucket(5, 1), base::Bucket(14, 1))); | 3005 base::Bucket(5, 1), base::Bucket(14, 1))); |
| 3006 } | 3006 } |
| 3007 | 3007 |
| 3008 TEST_P(InputHandlerProxyTest, GestureScrollingThreadStatusHistograms) { |
| 3009 VERIFY_AND_RESET_MOCKS(); |
| 3010 |
| 3011 WebTouchEvent touch_start(WebInputEvent::TouchStart, |
| 3012 WebInputEvent::NoModifiers, |
| 3013 WebInputEvent::TimeStampForTesting); |
| 3014 touch_start.touchesLength = 1; |
| 3015 touch_start.touches[0] = |
| 3016 CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); |
| 3017 |
| 3018 gesture_.setType(WebInputEvent::GestureScrollBegin); |
| 3019 gesture_.sourceDevice = blink::WebGestureDeviceTouchscreen; |
| 3020 |
| 3021 // Touch start with passive event listener. |
| 3022 EXPECT_CALL(mock_input_handler_, |
| 3023 EventListenerTypeForTouchStartAt( |
| 3024 testing::Property(&gfx::Point::x, testing::Gt(0)))) |
| 3025 .WillOnce(testing::Return( |
| 3026 cc::InputHandler::TouchStartEventListenerType::NO_HANDLER)); |
| 3027 EXPECT_CALL( |
| 3028 mock_input_handler_, |
| 3029 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) |
| 3030 .WillOnce(testing::Return(cc::EventListenerProperties::kPassive)); |
| 3031 |
| 3032 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING; |
| 3033 EXPECT_EQ(expected_disposition_, |
| 3034 input_handler_->HandleInputEvent(touch_start)); |
| 3035 |
| 3036 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
| 3037 .WillOnce(testing::Return(kImplThreadScrollState)); |
| 3038 expected_disposition_ = InputHandlerProxy::DID_HANDLE; |
| 3039 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); |
| 3040 |
| 3041 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 3042 "Renderer4.GestureScrollingThreadStatus"), |
| 3043 testing::ElementsAre(base::Bucket(0, 1))); |
| 3044 |
| 3045 VERIFY_AND_RESET_MOCKS(); |
| 3046 |
| 3047 // Touch event with HANDLER_ON_SCROLLING_LAYER event listener. |
| 3048 EXPECT_CALL(mock_input_handler_, |
| 3049 EventListenerTypeForTouchStartAt( |
| 3050 testing::Property(&gfx::Point::x, testing::Gt(0)))) |
| 3051 .WillOnce(testing::Return(cc::InputHandler::TouchStartEventListenerType:: |
| 3052 HANDLER_ON_SCROLLING_LAYER)); |
| 3053 |
| 3054 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; |
| 3055 EXPECT_EQ(expected_disposition_, |
| 3056 input_handler_->HandleInputEvent(touch_start)); |
| 3057 |
| 3058 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
| 3059 .WillOnce(testing::Return(kImplThreadScrollState)); |
| 3060 expected_disposition_ = InputHandlerProxy::DID_HANDLE; |
| 3061 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); |
| 3062 |
| 3063 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 3064 "Renderer4.GestureScrollingThreadStatus"), |
| 3065 testing::ElementsAre(base::Bucket(0, 1), base::Bucket(1, 1))); |
| 3066 |
| 3067 VERIFY_AND_RESET_MOCKS(); |
| 3068 |
| 3069 // Gesture scrolling on main thread. |
| 3070 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
| 3071 .WillOnce(testing::Return(kMainThreadScrollState)); |
| 3072 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; |
| 3073 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); |
| 3074 |
| 3075 EXPECT_THAT(histogram_tester().GetAllSamples( |
| 3076 "Renderer4.GestureScrollingThreadStatus"), |
| 3077 testing::ElementsAre(base::Bucket(0, 1), base::Bucket(1, 1), |
| 3078 base::Bucket(2, 1))); |
| 3079 |
| 3080 VERIFY_AND_RESET_MOCKS(); |
| 3081 } |
| 3082 |
| 3083 TEST_P(InputHandlerProxyTest, WheelScrollingThreadStatusHistograms) { |
| 3084 VERIFY_AND_RESET_MOCKS(); |
| 3085 |
| 3086 WebMouseWheelEvent wheel(WebInputEvent::MouseWheel, WebInputEvent::ControlKey, |
| 3087 WebInputEvent::TimeStampForTesting); |
| 3088 |
| 3089 gesture_.setType(WebInputEvent::GestureScrollBegin); |
| 3090 gesture_.sourceDevice = blink::WebGestureDeviceTouchpad; |
| 3091 |
| 3092 // Wheel event with passive event listener. |
| 3093 EXPECT_CALL(mock_input_handler_, |
| 3094 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) |
| 3095 .WillOnce(testing::Return(cc::EventListenerProperties::kPassive)); |
| 3096 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING; |
| 3097 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); |
| 3098 |
| 3099 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
| 3100 .WillOnce(testing::Return(kImplThreadScrollState)); |
| 3101 expected_disposition_ = InputHandlerProxy::DID_HANDLE; |
| 3102 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); |
| 3103 |
| 3104 EXPECT_THAT( |
| 3105 histogram_tester().GetAllSamples("Renderer4.WheelScrollingThreadStatus"), |
| 3106 testing::ElementsAre(base::Bucket(0, 1))); |
| 3107 |
| 3108 VERIFY_AND_RESET_MOCKS(); |
| 3109 |
| 3110 // Wheel event with blocking event listener. |
| 3111 EXPECT_CALL(mock_input_handler_, |
| 3112 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) |
| 3113 .WillOnce(testing::Return(cc::EventListenerProperties::kBlocking)); |
| 3114 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; |
| 3115 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); |
| 3116 |
| 3117 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
| 3118 .WillOnce(testing::Return(kImplThreadScrollState)); |
| 3119 expected_disposition_ = InputHandlerProxy::DID_HANDLE; |
| 3120 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); |
| 3121 |
| 3122 EXPECT_THAT( |
| 3123 histogram_tester().GetAllSamples("Renderer4.WheelScrollingThreadStatus"), |
| 3124 testing::ElementsAre(base::Bucket(0, 1), base::Bucket(1, 1))); |
| 3125 |
| 3126 VERIFY_AND_RESET_MOCKS(); |
| 3127 |
| 3128 // Wheel scrolling on main thread. |
| 3129 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
| 3130 .WillOnce(testing::Return(kMainThreadScrollState)); |
| 3131 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; |
| 3132 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); |
| 3133 |
| 3134 EXPECT_THAT( |
| 3135 histogram_tester().GetAllSamples("Renderer4.WheelScrollingThreadStatus"), |
| 3136 testing::ElementsAre(base::Bucket(0, 1), base::Bucket(1, 1), |
| 3137 base::Bucket(2, 1))); |
| 3138 |
| 3139 VERIFY_AND_RESET_MOCKS(); |
| 3140 } |
| 3141 |
| 3008 TEST_F(InputHandlerProxyEventQueueTest, VSyncAlignedGestureScroll) { | 3142 TEST_F(InputHandlerProxyEventQueueTest, VSyncAlignedGestureScroll) { |
| 3009 base::HistogramTester histogram_tester; | 3143 base::HistogramTester histogram_tester; |
| 3010 | 3144 |
| 3011 // Handle scroll on compositor. | 3145 // Handle scroll on compositor. |
| 3012 cc::InputHandlerScrollResult scroll_result_did_scroll_; | 3146 cc::InputHandlerScrollResult scroll_result_did_scroll_; |
| 3013 scroll_result_did_scroll_.did_scroll = true; | 3147 scroll_result_did_scroll_.did_scroll = true; |
| 3014 | 3148 |
| 3015 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) | 3149 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
| 3016 .WillOnce(testing::Return(kImplThreadScrollState)); | 3150 .WillOnce(testing::Return(kImplThreadScrollState)); |
| 3017 EXPECT_CALL(mock_input_handler_, SetNeedsAnimateInput()).Times(1); | 3151 EXPECT_CALL(mock_input_handler_, SetNeedsAnimateInput()).Times(1); |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3230 EXPECT_EQ(WebInputEvent::GesturePinchEnd, event_queue()[6]->event().type); | 3364 EXPECT_EQ(WebInputEvent::GesturePinchEnd, event_queue()[6]->event().type); |
| 3231 testing::Mock::VerifyAndClearExpectations(&mock_input_handler_); | 3365 testing::Mock::VerifyAndClearExpectations(&mock_input_handler_); |
| 3232 } | 3366 } |
| 3233 | 3367 |
| 3234 INSTANTIATE_TEST_CASE_P(AnimateInput, | 3368 INSTANTIATE_TEST_CASE_P(AnimateInput, |
| 3235 InputHandlerProxyTest, | 3369 InputHandlerProxyTest, |
| 3236 testing::ValuesIn(test_types)); | 3370 testing::ValuesIn(test_types)); |
| 3237 | 3371 |
| 3238 } // namespace test | 3372 } // namespace test |
| 3239 } // namespace ui | 3373 } // namespace ui |
| OLD | NEW |