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

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

Issue 2636583002: UMA metrics for fractions of wheel and touch scrolls blocked on the main thread. (Closed)
Patch Set: Histogram names used directly instead of being stored in a const char* 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.cc ('k') | no next file » | 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 <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
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
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
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
OLDNEW
« no previous file with comments | « ui/events/blink/input_handler_proxy.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698