| Index: content/browser/renderer_host/input/mouse_wheel_event_queue.cc
|
| diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
|
| index 2652afa065edfd4bfbfbdc56bf60c53d626f123b..9b850fd39f809b0641c9fa530132d5a1f753dde1 100644
|
| --- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
|
| +++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
|
| @@ -7,6 +7,8 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/trace_event/trace_event.h"
|
| +#include "content/common/input/input_event_dispatch_type.h"
|
| +#include "content/public/common/content_features.h"
|
| #include "ui/events/base_event_utils.h"
|
| #include "ui/events/blink/web_input_event_traits.h"
|
|
|
| @@ -40,6 +42,9 @@ MouseWheelEventQueue::MouseWheelEventQueue(MouseWheelEventQueueClient* client,
|
| needs_scroll_begin_(true),
|
| needs_scroll_end_(false),
|
| enable_scroll_latching_(enable_scroll_latching),
|
| + enable_async_wheel_events_(
|
| + base::FeatureList::IsEnabled(features::kAsyncWheelEvents)),
|
| + send_wheel_events_async_(false),
|
| scrolling_device_(blink::kWebGestureDeviceUninitialized) {
|
| DCHECK(client);
|
| }
|
| @@ -176,6 +181,7 @@ void MouseWheelEventQueue::ProcessMouseWheelAck(
|
| if (enable_scroll_latching_) {
|
| if (event_sent_for_gesture_ack_->event.phase ==
|
| blink::WebMouseWheelEvent::kPhaseBegan) {
|
| + send_wheel_events_async_ = true;
|
| SendScrollBegin(scroll_update, false);
|
| }
|
|
|
| @@ -267,6 +273,20 @@ void MouseWheelEventQueue::TryForwardNextEventToRenderer() {
|
| event_sent_for_gesture_ack_ = std::move(wheel_queue_.front());
|
| wheel_queue_.pop_front();
|
|
|
| + if (enable_async_wheel_events_) {
|
| + DCHECK(event_sent_for_gesture_ack_->event.phase !=
|
| + blink::WebMouseWheelEvent::kPhaseNone ||
|
| + event_sent_for_gesture_ack_->event.momentum_phase !=
|
| + blink::WebMouseWheelEvent::kPhaseNone);
|
| + if (event_sent_for_gesture_ack_->event.phase ==
|
| + blink::WebMouseWheelEvent::kPhaseBegan) {
|
| + send_wheel_events_async_ = false;
|
| + } else if (send_wheel_events_async_) {
|
| + event_sent_for_gesture_ack_->event.dispatch_type =
|
| + WebInputEvent::kEventNonBlocking;
|
| + }
|
| + }
|
| +
|
| client_->SendMouseWheelEventImmediately(*event_sent_for_gesture_ack_);
|
| }
|
|
|
|
|