| 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 "content/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
| 6 | 6 |
| 7 #include <tuple> | 7 #include <tuple> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 namespace { | 28 namespace { |
| 29 | 29 |
| 30 const char* EVENT_LISTENER_RESULT_HISTOGRAM = "Event.PassiveListeners"; | 30 const char* EVENT_LISTENER_RESULT_HISTOGRAM = "Event.PassiveListeners"; |
| 31 | 31 |
| 32 enum { | 32 enum { |
| 33 PASSIVE_LISTENER_UMA_ENUM_PASSIVE, | 33 PASSIVE_LISTENER_UMA_ENUM_PASSIVE, |
| 34 PASSIVE_LISTENER_UMA_ENUM_UNCANCELABLE, | 34 PASSIVE_LISTENER_UMA_ENUM_UNCANCELABLE, |
| 35 PASSIVE_LISTENER_UMA_ENUM_SUPPRESSED, | 35 PASSIVE_LISTENER_UMA_ENUM_SUPPRESSED, |
| 36 PASSIVE_LISTENER_UMA_ENUM_CANCELABLE, | 36 PASSIVE_LISTENER_UMA_ENUM_CANCELABLE, |
| 37 PASSIVE_LISTENER_UMA_ENUM_CANCELABLE_AND_CANCELED, | 37 PASSIVE_LISTENER_UMA_ENUM_CANCELABLE_AND_CANCELED, |
| 38 PASSIVE_LISTENER_UMA_ENUM_FORCED_NON_BLOCKING, | 38 PASSIVE_LISTENER_UMA_ENUM_FORCED_NON_BLOCKING_DUE_TO_FLING, |
| 39 PASSIVE_LISTENER_UMA_ENUM_COUNT | 39 PASSIVE_LISTENER_UMA_ENUM_COUNT |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 class MockWebWidget : public blink::WebWidget { | 42 class MockWebWidget : public blink::WebWidget { |
| 43 public: | 43 public: |
| 44 MOCK_METHOD1(handleInputEvent, | 44 MOCK_METHOD1(handleInputEvent, |
| 45 blink::WebInputEventResult(const blink::WebInputEvent&)); | 45 blink::WebInputEventResult(const blink::WebInputEvent&)); |
| 46 }; | 46 }; |
| 47 | 47 |
| 48 } // namespace | 48 } // namespace |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 EXPECT_EQ(gfx::Vector2dF(10, 5), overscroll.latest_overscroll_delta); | 274 EXPECT_EQ(gfx::Vector2dF(10, 5), overscroll.latest_overscroll_delta); |
| 275 EXPECT_EQ(gfx::Vector2dF(5, 5), overscroll.accumulated_overscroll); | 275 EXPECT_EQ(gfx::Vector2dF(5, 5), overscroll.accumulated_overscroll); |
| 276 EXPECT_EQ(gfx::PointF(1, 1), overscroll.causal_event_viewport_point); | 276 EXPECT_EQ(gfx::PointF(1, 1), overscroll.causal_event_viewport_point); |
| 277 EXPECT_EQ(gfx::Vector2dF(-10, -5), overscroll.current_fling_velocity); | 277 EXPECT_EQ(gfx::Vector2dF(-10, -5), overscroll.current_fling_velocity); |
| 278 widget()->sink()->ClearMessages(); | 278 widget()->sink()->ClearMessages(); |
| 279 } | 279 } |
| 280 | 280 |
| 281 TEST_F(RenderWidgetUnittest, RenderWidgetInputEventUmaMetrics) { | 281 TEST_F(RenderWidgetUnittest, RenderWidgetInputEventUmaMetrics) { |
| 282 SyntheticWebTouchEvent touch; | 282 SyntheticWebTouchEvent touch; |
| 283 touch.PressPoint(10, 10); | 283 touch.PressPoint(10, 10); |
| 284 touch.touchStartOrFirstTouchMove = true; |
| 284 | 285 |
| 285 EXPECT_CALL(*widget()->mock_webwidget(), handleInputEvent(_)) | 286 EXPECT_CALL(*widget()->mock_webwidget(), handleInputEvent(_)) |
| 286 .Times(4) | 287 .Times(5) |
| 287 .WillRepeatedly( | 288 .WillRepeatedly( |
| 288 ::testing::Return(blink::WebInputEventResult::NotHandled)); | 289 ::testing::Return(blink::WebInputEventResult::NotHandled)); |
| 289 | 290 |
| 290 widget()->SendInputEvent(touch); | 291 widget()->SendInputEvent(touch); |
| 291 histogram_tester().ExpectBucketCount(EVENT_LISTENER_RESULT_HISTOGRAM, | 292 histogram_tester().ExpectBucketCount(EVENT_LISTENER_RESULT_HISTOGRAM, |
| 292 PASSIVE_LISTENER_UMA_ENUM_CANCELABLE, 1); | 293 PASSIVE_LISTENER_UMA_ENUM_CANCELABLE, 1); |
| 293 | 294 |
| 294 touch.dispatchType = blink::WebInputEvent::DispatchType::EventNonBlocking; | 295 touch.dispatchType = blink::WebInputEvent::DispatchType::EventNonBlocking; |
| 295 widget()->SendInputEvent(touch); | 296 widget()->SendInputEvent(touch); |
| 296 histogram_tester().ExpectBucketCount(EVENT_LISTENER_RESULT_HISTOGRAM, | 297 histogram_tester().ExpectBucketCount(EVENT_LISTENER_RESULT_HISTOGRAM, |
| 297 PASSIVE_LISTENER_UMA_ENUM_UNCANCELABLE, | 298 PASSIVE_LISTENER_UMA_ENUM_UNCANCELABLE, |
| 298 1); | 299 1); |
| 299 | 300 |
| 300 touch.dispatchType = | 301 touch.dispatchType = |
| 301 blink::WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 302 blink::WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
| 302 widget()->SendInputEvent(touch); | 303 widget()->SendInputEvent(touch); |
| 303 histogram_tester().ExpectBucketCount(EVENT_LISTENER_RESULT_HISTOGRAM, | 304 histogram_tester().ExpectBucketCount(EVENT_LISTENER_RESULT_HISTOGRAM, |
| 304 PASSIVE_LISTENER_UMA_ENUM_PASSIVE, 1); | 305 PASSIVE_LISTENER_UMA_ENUM_PASSIVE, 1); |
| 305 | 306 |
| 306 touch.dispatchType = | 307 touch.dispatchType = blink::WebInputEvent::DispatchType:: |
| 307 blink::WebInputEvent::DispatchType::ListenersForcedNonBlockingPassive; | 308 ListenersForcedNonBlockingPassiveDueToFling; |
| 308 widget()->SendInputEvent(touch); | 309 widget()->SendInputEvent(touch); |
| 309 histogram_tester().ExpectBucketCount( | 310 histogram_tester().ExpectBucketCount( |
| 310 EVENT_LISTENER_RESULT_HISTOGRAM, | 311 EVENT_LISTENER_RESULT_HISTOGRAM, |
| 311 PASSIVE_LISTENER_UMA_ENUM_FORCED_NON_BLOCKING, 1); | 312 PASSIVE_LISTENER_UMA_ENUM_FORCED_NON_BLOCKING_DUE_TO_FLING, 1); |
| 313 |
| 314 touch.MovePoint(0, 10, 10); |
| 315 touch.touchStartOrFirstTouchMove = true; |
| 316 touch.dispatchType = blink::WebInputEvent::DispatchType:: |
| 317 ListenersForcedNonBlockingPassiveDueToFling; |
| 318 widget()->SendInputEvent(touch); |
| 319 histogram_tester().ExpectBucketCount( |
| 320 EVENT_LISTENER_RESULT_HISTOGRAM, |
| 321 PASSIVE_LISTENER_UMA_ENUM_FORCED_NON_BLOCKING_DUE_TO_FLING, 2); |
| 312 | 322 |
| 313 EXPECT_CALL(*widget()->mock_webwidget(), handleInputEvent(_)) | 323 EXPECT_CALL(*widget()->mock_webwidget(), handleInputEvent(_)) |
| 314 .WillOnce( | 324 .WillOnce( |
| 315 ::testing::Return(blink::WebInputEventResult::HandledSuppressed)); | 325 ::testing::Return(blink::WebInputEventResult::HandledSuppressed)); |
| 316 touch.dispatchType = blink::WebInputEvent::DispatchType::Blocking; | 326 touch.dispatchType = blink::WebInputEvent::DispatchType::Blocking; |
| 317 widget()->SendInputEvent(touch); | 327 widget()->SendInputEvent(touch); |
| 318 histogram_tester().ExpectBucketCount(EVENT_LISTENER_RESULT_HISTOGRAM, | 328 histogram_tester().ExpectBucketCount(EVENT_LISTENER_RESULT_HISTOGRAM, |
| 319 PASSIVE_LISTENER_UMA_ENUM_SUPPRESSED, 1); | 329 PASSIVE_LISTENER_UMA_ENUM_SUPPRESSED, 1); |
| 320 | 330 |
| 321 EXPECT_CALL(*widget()->mock_webwidget(), handleInputEvent(_)) | 331 EXPECT_CALL(*widget()->mock_webwidget(), handleInputEvent(_)) |
| 322 .WillOnce( | 332 .WillOnce( |
| 323 ::testing::Return(blink::WebInputEventResult::HandledApplication)); | 333 ::testing::Return(blink::WebInputEventResult::HandledApplication)); |
| 324 touch.dispatchType = blink::WebInputEvent::DispatchType::Blocking; | 334 touch.dispatchType = blink::WebInputEvent::DispatchType::Blocking; |
| 325 widget()->SendInputEvent(touch); | 335 widget()->SendInputEvent(touch); |
| 326 histogram_tester().ExpectBucketCount( | 336 histogram_tester().ExpectBucketCount( |
| 327 EVENT_LISTENER_RESULT_HISTOGRAM, | 337 EVENT_LISTENER_RESULT_HISTOGRAM, |
| 328 PASSIVE_LISTENER_UMA_ENUM_CANCELABLE_AND_CANCELED, 1); | 338 PASSIVE_LISTENER_UMA_ENUM_CANCELABLE_AND_CANCELED, 1); |
| 329 } | 339 } |
| 330 | 340 |
| 331 TEST_F(RenderWidgetUnittest, TouchStartDuringOrOutsideFlingUmaMetrics) { | 341 TEST_F(RenderWidgetUnittest, TouchDuringOrOutsideFlingUmaMetrics) { |
| 332 EXPECT_CALL(*widget()->mock_webwidget(), handleInputEvent(_)) | 342 EXPECT_CALL(*widget()->mock_webwidget(), handleInputEvent(_)) |
| 333 .Times(2) | 343 .Times(3) |
| 334 .WillRepeatedly( | 344 .WillRepeatedly( |
| 335 ::testing::Return(blink::WebInputEventResult::NotHandled)); | 345 ::testing::Return(blink::WebInputEventResult::NotHandled)); |
| 336 | 346 |
| 337 SyntheticWebTouchEvent touch; | 347 SyntheticWebTouchEvent touch; |
| 338 touch.PressPoint(10, 10); | 348 touch.PressPoint(10, 10); |
| 339 touch.dispatchType = blink::WebInputEvent::DispatchType::Blocking; | 349 touch.dispatchType = blink::WebInputEvent::DispatchType::Blocking; |
| 340 touch.dispatchedDuringFling = true; | 350 touch.dispatchedDuringFling = false; |
| 351 touch.touchStartOrFirstTouchMove = true; |
| 341 widget()->SendInputEvent(touch); | 352 widget()->SendInputEvent(touch); |
| 342 histogram_tester().ExpectTotalCount( | 353 histogram_tester().ExpectTotalCount("Event.Touch.TouchLatencyOutsideFling", |
| 343 "Event.Touch.TouchStartLatencyDuringFling", 1); | 354 1); |
| 344 | 355 |
| 345 touch.dispatchedDuringFling = false; | 356 touch.MovePoint(0, 10, 10); |
| 357 touch.touchStartOrFirstTouchMove = true; |
| 346 widget()->SendInputEvent(touch); | 358 widget()->SendInputEvent(touch); |
| 347 histogram_tester().ExpectTotalCount( | 359 histogram_tester().ExpectTotalCount("Event.Touch.TouchLatencyOutsideFling", |
| 348 "Event.Touch.TouchStartLatencyOutsideFling", 1); | 360 2); |
| 361 |
| 362 touch.MovePoint(0, 30, 30); |
| 363 touch.touchStartOrFirstTouchMove = false; |
| 364 widget()->SendInputEvent(touch); |
| 365 histogram_tester().ExpectTotalCount("Event.Touch.TouchLatencyOutsideFling", |
| 366 2); |
| 349 } | 367 } |
| 350 | 368 |
| 351 } // namespace content | 369 } // namespace content |
| OLD | NEW |