| 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 <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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |