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 = |
307 blink::WebInputEvent::DispatchType::ListenersForcedNonBlockingPassive; | 308 blink::WebInputEvent::DispatchType::ListenersForcedNonBlockingDueToFling; |
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 = |
| 317 blink::WebInputEvent::DispatchType::ListenersForcedNonBlockingDueToFling; |
| 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 |