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

Unified Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 2902303002: phase based wheel scroll latching for mac (Closed)
Patch Set: in -> after Created 3 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_view_mac.mm
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index efe95f0a6e7492a295e168eaa7c62e2d5582fbc3..f6988b5dfec8539a7509ebf0cc2be4f86cd72531 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -1755,6 +1755,33 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
UpdateScreenInfo(cocoa_view_);
}
+void RenderWidgetHostViewMac::SendSyntheticWheelEventWithPhaseEnded(
+ blink::WebMouseWheelEvent wheel_event,
+ bool should_route_event) {
+ wheel_event.dispatch_type =
+ blink::WebInputEvent::DispatchType::kEventNonBlocking;
+ if (should_route_event) {
+ render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->RouteMouseWheelEvent(this, &wheel_event,
+ ui::LatencyInfo(ui::SourceEventType::WHEEL));
+ } else {
+ ProcessMouseWheelEvent(wheel_event,
+ ui::LatencyInfo(ui::SourceEventType::WHEEL));
+ }
+}
+
+void RenderWidgetHostViewMac::StartMouseWheelEndDispatchTimer(
+ blink::WebMouseWheelEvent wheel_event,
+ bool should_route_event) {
+ mouse_wheel_end_dispatch_timer_.Start(
+ FROM_HERE,
+ base::TimeDelta::FromMilliseconds(
+ kDefaultMouseWheelLatchingTransactionMs),
+ base::Bind(
+ &RenderWidgetHostViewMac::SendSyntheticWheelEventWithPhaseEnded,
+ base::Unretained(this), wheel_event, should_route_event));
+}
} // namespace content
@@ -2356,10 +2383,14 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
WebMouseWheelEvent webEvent = WebMouseWheelEventBuilder::Build(
event, self);
webEvent.rails_mode = mouseWheelFilter_.UpdateRailsMode(webEvent);
- ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL);
- latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
- renderWidgetHostView_->render_widget_host_->
- ForwardWheelEventWithLatencyInfo(webEvent, latency_info);
+ if (renderWidgetHostView_->WheelScrollLatchingEnabled()) {
+ renderWidgetHostView_->StartMouseWheelEndDispatchTimer(webEvent, false);
+ } else {
+ ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL);
+ latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
+ renderWidgetHostView_->render_widget_host_
+ ->ForwardWheelEventWithLatencyInfo(webEvent, latency_info);
+ }
}
if (endWheelMonitor_) {
@@ -2565,6 +2596,30 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
webEvent.rails_mode = mouseWheelFilter_.UpdateRailsMode(webEvent);
ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL);
latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
+ if (renderWidgetHostView_->WheelScrollLatchingEnabled()) {
+ if (webEvent.phase == blink::WebMouseWheelEvent::kPhaseEnded) {
tdresser 2017/05/25 15:18:36 Could you add a comment per condition here?
sahel 2017/05/25 16:00:04 Done.
+ renderWidgetHostView_->StartMouseWheelEndDispatchTimer(
+ webEvent, renderWidgetHostView_->ShouldRouteEvent(webEvent));
+ return;
+ }
+ if (webEvent.phase == blink::WebMouseWheelEvent::kPhaseBegan) {
+ // A new scrolling sequence hase started, stop the timer and send its
tdresser 2017/05/25 15:18:36 hase -> has
sahel 2017/05/25 16:00:04 Done.
+ // wheel end event.
+ if (renderWidgetHostView_->mouse_wheel_end_dispatch_timer_
+ .IsRunning()) {
+ base::Closure task =
+ renderWidgetHostView_->mouse_wheel_end_dispatch_timer_
+ .user_task();
+ renderWidgetHostView_->mouse_wheel_end_dispatch_timer_.Stop();
+ task.Run();
+ }
+
+ } else if (webEvent.momentum_phase ==
+ blink::WebMouseWheelEvent::kPhaseBegan) {
+ renderWidgetHostView_->mouse_wheel_end_dispatch_timer_.Stop();
+ }
+ }
+
if (renderWidgetHostView_->ShouldRouteEvent(webEvent)) {
renderWidgetHostView_->render_widget_host_->delegate()
->GetInputEventRouter()

Powered by Google App Engine
This is Rietveld 408576698