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

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

Issue 1965313003: Fix Renderer4.MainThreadWheelScrollReason not being reported. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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.h ('k') | ui/events/blink/input_handler_proxy_unittest.cc » ('j') | 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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 if (fling_curve_) 378 if (fling_curve_)
379 CancelCurrentFling(); 379 CancelCurrentFling();
380 } 380 }
381 break; 381 break;
382 } 382 }
383 383
384 return DID_NOT_HANDLE; 384 return DID_NOT_HANDLE;
385 } 385 }
386 386
387 void InputHandlerProxy::RecordMainThreadScrollingReasons( 387 void InputHandlerProxy::RecordMainThreadScrollingReasons(
388 WebInputEvent::Type type, 388 blink::WebGestureDevice device,
389 uint32_t reasons) { 389 uint32_t reasons) {
390 static const char* kGestureHistogramName = 390 static const char* kGestureHistogramName =
391 "Renderer4.MainThreadGestureScrollReason"; 391 "Renderer4.MainThreadGestureScrollReason";
392 static const char* kWheelHistogramName = 392 static const char* kWheelHistogramName =
393 "Renderer4.MainThreadWheelScrollReason"; 393 "Renderer4.MainThreadWheelScrollReason";
394 394
395 DCHECK(type == WebInputEvent::GestureScrollBegin || 395 DCHECK(device == blink::WebGestureDeviceTouchpad ||
396 type == WebInputEvent::MouseWheel); 396 device == blink::WebGestureDeviceTouchscreen);
397 397
398 if (type != WebInputEvent::GestureScrollBegin && 398 if (device != blink::WebGestureDeviceTouchpad &&
399 type != WebInputEvent::MouseWheel) { 399 device != blink::WebGestureDeviceTouchscreen) {
400 return; 400 return;
401 } 401 }
402 402
403 if (reasons == cc::MainThreadScrollingReason::kNotScrollingOnMain) { 403 if (reasons == cc::MainThreadScrollingReason::kNotScrollingOnMain) {
404 if (type == WebInputEvent::GestureScrollBegin) { 404 if (device == blink::WebGestureDeviceTouchscreen) {
405 UMA_HISTOGRAM_ENUMERATION( 405 UMA_HISTOGRAM_ENUMERATION(
406 kGestureHistogramName, 406 kGestureHistogramName,
407 cc::MainThreadScrollingReason::kNotScrollingOnMain, 407 cc::MainThreadScrollingReason::kNotScrollingOnMain,
408 cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount); 408 cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount);
409 } else { 409 } else {
410 UMA_HISTOGRAM_ENUMERATION( 410 UMA_HISTOGRAM_ENUMERATION(
411 kWheelHistogramName, 411 kWheelHistogramName,
412 cc::MainThreadScrollingReason::kNotScrollingOnMain, 412 cc::MainThreadScrollingReason::kNotScrollingOnMain,
413 cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount); 413 cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount);
414 } 414 }
415 } 415 }
416 416
417 for (uint32_t i = 0; 417 for (uint32_t i = 0;
418 i < cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount - 1; 418 i < cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount - 1;
419 ++i) { 419 ++i) {
420 unsigned val = 1 << i; 420 unsigned val = 1 << i;
421 if (reasons & val) { 421 if (reasons & val) {
422 if (type == WebInputEvent::GestureScrollBegin) { 422 if (device == blink::WebGestureDeviceTouchscreen) {
423 UMA_HISTOGRAM_ENUMERATION( 423 UMA_HISTOGRAM_ENUMERATION(
424 kGestureHistogramName, i + 1, 424 kGestureHistogramName, i + 1,
425 cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount); 425 cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount);
426 } else { 426 } else {
427 UMA_HISTOGRAM_ENUMERATION( 427 UMA_HISTOGRAM_ENUMERATION(
428 kWheelHistogramName, i + 1, 428 kWheelHistogramName, i + 1,
429 cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount); 429 cc::MainThreadScrollingReason::kMainThreadScrollingReasonCount);
430 } 430 }
431 } 431 }
432 } 432 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 : 0, 481 : 0,
482 wheel_event.railsMode != WebInputEvent::RailsModeHorizontal 482 wheel_event.railsMode != WebInputEvent::RailsModeHorizontal
483 ? -wheel_event.deltaY 483 ? -wheel_event.deltaY
484 : 0); 484 : 0);
485 485
486 if (wheel_event.scrollByPage) { 486 if (wheel_event.scrollByPage) {
487 // TODO(jamesr): We don't properly handle scroll by page in the compositor 487 // TODO(jamesr): We don't properly handle scroll by page in the compositor
488 // thread, so punt it to the main thread. http://crbug.com/236639 488 // thread, so punt it to the main thread. http://crbug.com/236639
489 result = DID_NOT_HANDLE; 489 result = DID_NOT_HANDLE;
490 RecordMainThreadScrollingReasons( 490 RecordMainThreadScrollingReasons(
491 wheel_event.type, cc::MainThreadScrollingReason::kPageBasedScrolling); 491 blink::WebGestureDeviceTouchpad,
492 cc::MainThreadScrollingReason::kPageBasedScrolling);
492 493
493 } else if (!wheel_event.canScroll) { 494 } else if (!wheel_event.canScroll) {
494 // Wheel events with |canScroll| == false will not trigger scrolling, 495 // Wheel events with |canScroll| == false will not trigger scrolling,
495 // only event handlers. Forward to the main thread. 496 // only event handlers. Forward to the main thread.
496 result = DID_NOT_HANDLE; 497 result = DID_NOT_HANDLE;
497 } else if (ShouldAnimate(wheel_event.hasPreciseScrollingDeltas)) { 498 } else if (ShouldAnimate(wheel_event.hasPreciseScrollingDeltas)) {
498 cc::InputHandler::ScrollStatus scroll_status = 499 cc::InputHandler::ScrollStatus scroll_status =
499 input_handler_->ScrollAnimated(gfx::Point(wheel_event.x, wheel_event.y), 500 input_handler_->ScrollAnimated(gfx::Point(wheel_event.x, wheel_event.y),
500 scroll_delta); 501 scroll_delta);
501 502
502 RecordMainThreadScrollingReasons( 503 RecordMainThreadScrollingReasons(
503 wheel_event.type, scroll_status.main_thread_scrolling_reasons); 504 blink::WebGestureDeviceTouchpad,
505 scroll_status.main_thread_scrolling_reasons);
504 506
505 switch (scroll_status.thread) { 507 switch (scroll_status.thread) {
506 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: 508 case cc::InputHandler::SCROLL_ON_IMPL_THREAD:
507 result = DID_HANDLE; 509 result = DID_HANDLE;
508 break; 510 break;
509 case cc::InputHandler::SCROLL_IGNORED: 511 case cc::InputHandler::SCROLL_IGNORED:
510 result = DROP_EVENT; 512 result = DROP_EVENT;
511 break; 513 break;
512 default: 514 default:
513 result = DID_NOT_HANDLE; 515 result = DID_NOT_HANDLE;
514 break; 516 break;
515 } 517 }
516 } else { 518 } else {
517 cc::ScrollStateData scroll_state_begin_data; 519 cc::ScrollStateData scroll_state_begin_data;
518 scroll_state_begin_data.position_x = wheel_event.x; 520 scroll_state_begin_data.position_x = wheel_event.x;
519 scroll_state_begin_data.position_y = wheel_event.y; 521 scroll_state_begin_data.position_y = wheel_event.y;
520 scroll_state_begin_data.is_beginning = true; 522 scroll_state_begin_data.is_beginning = true;
521 cc::ScrollState scroll_state_begin(scroll_state_begin_data); 523 cc::ScrollState scroll_state_begin(scroll_state_begin_data);
522 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( 524 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin(
523 &scroll_state_begin, cc::InputHandler::WHEEL); 525 &scroll_state_begin, cc::InputHandler::WHEEL);
524 526
525 RecordMainThreadScrollingReasons( 527 RecordMainThreadScrollingReasons(
526 wheel_event.type, scroll_status.main_thread_scrolling_reasons); 528 blink::WebGestureDeviceTouchpad,
529 scroll_status.main_thread_scrolling_reasons);
527 530
528 switch (scroll_status.thread) { 531 switch (scroll_status.thread) {
529 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: { 532 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: {
530 TRACE_EVENT_INSTANT2("input", 533 TRACE_EVENT_INSTANT2("input",
531 "InputHandlerProxy::handle_input wheel scroll", 534 "InputHandlerProxy::handle_input wheel scroll",
532 TRACE_EVENT_SCOPE_THREAD, "deltaX", 535 TRACE_EVENT_SCOPE_THREAD, "deltaX",
533 scroll_delta.x(), "deltaY", scroll_delta.y()); 536 scroll_delta.x(), "deltaY", scroll_delta.y());
534 537
535 cc::ScrollStateData scroll_state_update_data; 538 cc::ScrollStateData scroll_state_update_data;
536 scroll_state_update_data.delta_x = scroll_delta.x(); 539 scroll_state_update_data.delta_x = scroll_delta.x();
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 gfx::Point scroll_point(gesture_event.x, gesture_event.y); 609 gfx::Point scroll_point(gesture_event.x, gesture_event.y);
607 scroll_status = input_handler_->ScrollAnimatedBegin(scroll_point); 610 scroll_status = input_handler_->ScrollAnimatedBegin(scroll_point);
608 } else { 611 } else {
609 scroll_status = input_handler_->ScrollBegin( 612 scroll_status = input_handler_->ScrollBegin(
610 &scroll_state, GestureScrollInputType(gesture_event.sourceDevice)); 613 &scroll_state, GestureScrollInputType(gesture_event.sourceDevice));
611 } 614 }
612 UMA_HISTOGRAM_ENUMERATION("Renderer4.CompositorScrollHitTestResult", 615 UMA_HISTOGRAM_ENUMERATION("Renderer4.CompositorScrollHitTestResult",
613 scroll_status.thread, 616 scroll_status.thread,
614 cc::InputHandler::LAST_SCROLL_STATUS + 1); 617 cc::InputHandler::LAST_SCROLL_STATUS + 1);
615 618
616 RecordMainThreadScrollingReasons(gesture_event.type, 619 RecordMainThreadScrollingReasons(gesture_event.sourceDevice,
617 scroll_status.main_thread_scrolling_reasons); 620 scroll_status.main_thread_scrolling_reasons);
618 621
619 InputHandlerProxy::EventDisposition result = DID_NOT_HANDLE; 622 InputHandlerProxy::EventDisposition result = DID_NOT_HANDLE;
620 switch (scroll_status.thread) { 623 switch (scroll_status.thread) {
621 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: 624 case cc::InputHandler::SCROLL_ON_IMPL_THREAD:
622 TRACE_EVENT_INSTANT0("input", 625 TRACE_EVENT_INSTANT0("input",
623 "InputHandlerProxy::handle_input gesture scroll", 626 "InputHandlerProxy::handle_input gesture scroll",
624 TRACE_EVENT_SCOPE_THREAD); 627 TRACE_EVENT_SCOPE_THREAD);
625 gesture_scroll_on_impl_thread_ = true; 628 gesture_scroll_on_impl_thread_ = true;
626 result = DID_HANDLE; 629 result = DID_HANDLE;
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 // is made asynchronously, to minimize divergence between main thread and 1359 // is made asynchronously, to minimize divergence between main thread and
1357 // impl thread event handling paths. 1360 // impl thread event handling paths.
1358 base::ThreadTaskRunnerHandle::Get()->PostTask( 1361 base::ThreadTaskRunnerHandle::Get()->PostTask(
1359 FROM_HERE, 1362 FROM_HERE,
1360 base::Bind(&InputScrollElasticityController::ObserveGestureEventAndResult, 1363 base::Bind(&InputScrollElasticityController::ObserveGestureEventAndResult,
1361 scroll_elasticity_controller_->GetWeakPtr(), gesture_event, 1364 scroll_elasticity_controller_->GetWeakPtr(), gesture_event,
1362 scroll_result)); 1365 scroll_result));
1363 } 1366 }
1364 1367
1365 } // namespace ui 1368 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/blink/input_handler_proxy.h ('k') | ui/events/blink/input_handler_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698