Chromium Code Reviews| 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..cefe4ae341b5a9de560644767e20ba122021ad77 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,7 @@ MouseWheelEventQueue::MouseWheelEventQueue(MouseWheelEventQueueClient* client, |
| needs_scroll_begin_(true), |
| needs_scroll_end_(false), |
| enable_scroll_latching_(enable_scroll_latching), |
| + send_wheel_events_async_(false), |
| scrolling_device_(blink::kWebGestureDeviceUninitialized) { |
| DCHECK(client); |
| } |
| @@ -176,6 +179,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 +271,20 @@ void MouseWheelEventQueue::TryForwardNextEventToRenderer() { |
| event_sent_for_gesture_ack_ = std::move(wheel_queue_.front()); |
| wheel_queue_.pop_front(); |
| + if (base::FeatureList::IsEnabled(features::kAsyncWheelEvents)) { |
|
dtapuska
2017/06/16 17:36:09
don't check the feature list on every event. stash
sahel
2017/06/20 19:22:33
Done.
|
| + 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_); |
| } |