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