New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 642368 link

Starred by 6 users

Issue metadata

Status: Fixed
Owner:
Closed: May 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Launch-OWP
Launch-Accessibility: ----
Launch-Exp-Leadership: ----
Launch-Leadership: ----
Launch-Legal: ----
Launch-M-Approved: 59-Dev , 59-Beta , 59-Stable-Exp , 59-Stable
Launch-M-Target: 55-Dev , 59-Dev , 59-Beta , 59-Stable-Exp , 59-Stable
Launch-Privacy: ----
Launch-Security: ----
Launch-Test: ----
Launch-UI: ----
Rollout-Type: ----

Blocked on:
issue 625693
issue 661141

Blocking:
issue 268213



Sign in to add a comment

rAF Aligned Touch Input

Project Member Reported by dtapu...@chromium.org, Aug 30 2016

Issue description

Technical feature description:
Run an experiment where we turn on RAF aligned input on Canary and Dev.

Continuous events will be dispatched according to the BeginFrame callback instead of immediately.


Eng owner: dtapuska

Design doc:
https://docs.google.com/document/d/1aM9AqyYuceRHOmsJZXFKcgi_D4jvFAymYvI36OEwIpI/edit?usp=sharing

Finch/experimentation:

50/50 trial

A number of histograms will likely change:
Event.MainThreadEventQueue.CoalescedCount should increase
Event.MainThreadEventQueue.Continuous.QueueingTime should be below a single frame but should move around to be more of a random distribution
Event.MainThreadEventQueue.NonContinuous.QueueingTime should stay the same


 
Description: Show this description
Labels: Launch-M-Target-55-Dev
Blockedon: 625693
Blocking: 268213
Labels: Hotlist-Input-Dev
Blockedon: 661141
Project Member

Comment 9 by bugdroid1@chromium.org, Jan 4 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/5494d50ab65532c64a28e91e23b0a722ebbfe8ed

commit 5494d50ab65532c64a28e91e23b0a722ebbfe8ed
Author: dtapuska <dtapuska@chromium.org>
Date: Wed Jan 04 22:00:09 2017

Remove the requirement to only rAF align non-blocking touch moves.

We want to align all touchmoves regardless of whether they cause
a regression in scroll start. The expected regression would on average
half a frame.

BUG= 642368 

Review-Url: https://codereview.chromium.org/2612823002
Cr-Commit-Position: refs/heads/master@{#441478}

[modify] https://crrev.com/5494d50ab65532c64a28e91e23b0a722ebbfe8ed/content/renderer/input/main_thread_event_queue.cc
[modify] https://crrev.com/5494d50ab65532c64a28e91e23b0a722ebbfe8ed/content/renderer/input/main_thread_event_queue_unittest.cc

Project Member

Comment 10 by bugdroid1@chromium.org, Jan 27 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/73607ca60d8d03e9ac7397da44a9744d64e444b8

commit 73607ca60d8d03e9ac7397da44a9744d64e444b8
Author: dtapuska <dtapuska@chromium.org>
Date: Fri Jan 27 17:20:19 2017

Move the TouchEventQueue to be completely virtual.

We need to provide a new implementation of the TouchEventQueue and
the easiest is to rewrite it according to the external interface.
So make the interface completely virtual to support two implementations
for now. Move the old implementation to LegacyTouchEventQueue.

BUG= 642368 
TBR=creis@chromium.org

Review-Url: https://codereview.chromium.org/2663493003
Cr-Commit-Position: refs/heads/master@{#446701}

[modify] https://crrev.com/73607ca60d8d03e9ac7397da44a9744d64e444b8/content/browser/BUILD.gn
[modify] https://crrev.com/73607ca60d8d03e9ac7397da44a9744d64e444b8/content/browser/renderer_host/input/input_router_impl.cc
[modify] https://crrev.com/73607ca60d8d03e9ac7397da44a9744d64e444b8/content/browser/renderer_host/input/input_router_impl.h
[modify] https://crrev.com/73607ca60d8d03e9ac7397da44a9744d64e444b8/content/browser/renderer_host/input/input_router_impl_unittest.cc
[rename] https://crrev.com/73607ca60d8d03e9ac7397da44a9744d64e444b8/content/browser/renderer_host/input/legacy_touch_event_queue.cc
[add] https://crrev.com/73607ca60d8d03e9ac7397da44a9744d64e444b8/content/browser/renderer_host/input/legacy_touch_event_queue.h
[modify] https://crrev.com/73607ca60d8d03e9ac7397da44a9744d64e444b8/content/browser/renderer_host/input/touch_event_queue.h
[modify] https://crrev.com/73607ca60d8d03e9ac7397da44a9744d64e444b8/content/browser/renderer_host/input/touch_event_queue_unittest.cc

Project Member

Comment 12 by bugdroid1@chromium.org, Feb 22 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ec3a4f60b7c9ca26b32424abe1fc0c238eee739b

commit ec3a4f60b7c9ca26b32424abe1fc0c238eee739b
Author: dtapuska <dtapuska@chromium.org>
Date: Wed Feb 22 20:21:55 2017

Merging of touch event ack ids was inconsistent.

The merging of event ids was slightly off that the ack type would be
sent for the wrong type. The newly merged dispatch type should reflect
the type of the ack event id. ie; if 17 was non-blocking it should
continue as non-blocking not be 17 and have type blocking afterwards.

BUG= 642368 

Review-Url: https://codereview.chromium.org/2710663003
Cr-Commit-Position: refs/heads/master@{#452183}

[modify] https://crrev.com/ec3a4f60b7c9ca26b32424abe1fc0c238eee739b/content/renderer/input/main_thread_event_queue.cc
[modify] https://crrev.com/ec3a4f60b7c9ca26b32424abe1fc0c238eee739b/content/renderer/input/main_thread_event_queue_unittest.cc

I don't like the new behavior.  Deleting events is bad.  Chrome should just deliver all events on rAF.
You'll still be able to access all events via the new coalesced points API (https://bugs.chromium.org/p/chromium/issues/detail?id=656781). For most use cases, folks don't need all events. If you do, you can use the new API. This is equivalent to how most native platform handle events (e.g., https://developer.android.com/reference/android/view/MotionEvent.html#getHistoricalX(int, int) ).
Delete events, only to then add yet another api to recover the deleted events?  What a mess!
It is one thing to coalesce events when the system is busy.  It is quite another for Chrome to coalesce events when the computer is only 5% busy.  Why?
jerryj@ what's your use case here?

Android (and iOS) already have this property - 60hz touchmove by default, explicitly opt-in to high-frequency points for the rare art use cases.  See "Batching": https://developer.android.com/reference/android/view/MotionEvent.html.  So we're not really "deleting events" at all, just keeping them at the 60hz frequency supplied by the OS.

So this is effectively already the case in Chrome for Android (since we never "opt-in" ourselves).  We would never start sending touchmove events at 120hz or 240hz by default because we know in ~99% of the use cases, it would result in wasted work (and risk causing increased jank).
That is simply not true at all under Windows.  The native OS WM_MOUSEMOVE messages can easily be delivered faster than vsync.  Why are you forcing the Windows peg into the Android and iOS hole?

I have a canvas app that easily gets 120 mouse moves/sec now under Chrome release (native Win32 and Chrome/JavaScript).  But under Chrome snapshots builds, the JS build gets only 40 mouse moves/sec on one system -- which is NOT good.  And the CPU is barely even used.

You need to rethink turning this 'always on'.  So, yes you are deleting mouse move messages if in Chrome release I now see 120/sec, and on snapshot builds I only see 40/sec.
And who thought that it was a good idea to add a significant DELAY to the rAF callback, by aligning mouse input to rAF?  What is THAT going to do to jank?

The attached chart displays the delta time from true vsync that the rAF callback is called -- and more importantly -- the delay in calling the rAF callback that happens when the mouse is moved!

At first I thought the delay/jump of over one millisecond must somehow be caused by my code, so I changed my code so that the mouse event callback was blank/empty/donothing function.  The result was unchanged.  That means Chrome itself is responsible for the delay.

The 1ms delay seems inconsequential until you compare that to the entire frame time of 16.6 ms for 60fps, or 8.3 ms for 120fps.

The delay of 1.2ms then becomes a very important REGRESSION.
movingmousedelaysraf.jpg
69.0 KB View Download
The mouse raf sync code is only an experiment to gather feedback. Move to beta or stable channel and you won't see it. 
And you got your feedback.  It significantly delays rAF callback.  Please never enable that in the stable channel.
Could you share your example app? But your feedback is very helpful. I think we should add some uma metrics to see what on average this is causing delay to the raf signal. I wonder if it is causing delay due to slow main thread hit testing from a complex layout tree. In such cases mousemove events would delay the raf event signal it just might not be measurable. So ideally I'd like to reproduce what you are seeing. 
Project Member

Comment 23 by bugdroid1@chromium.org, Feb 24 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/97286c88bded97a7254edd950b26712fd2a616e7

commit 97286c88bded97a7254edd950b26712fd2a616e7
Author: dtapuska <dtapuska@chromium.org>
Date: Fri Feb 24 23:14:43 2017

Teach MainThreadEventQueue about touchmove throttling.

Avoid the rAF callbacks when we are throttling touch moves. To do this
we check the last rAF time and see if there is a single touch move
in the queue that is non-cancelable (only occurs during scrolling)

BUG= 642368 

Review-Url: https://codereview.chromium.org/2713093005
Cr-Commit-Position: refs/heads/master@{#452985}

[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/input/input_event_filter.cc
[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/input/input_event_filter.h
[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/input/input_handler_manager.cc
[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/input/input_handler_manager.h
[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/input/input_handler_manager_client.h
[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/input/main_thread_event_queue.cc
[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/input/main_thread_event_queue.h
[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/input/main_thread_event_queue_unittest.cc
[modify] https://crrev.com/97286c88bded97a7254edd950b26712fd2a616e7/content/renderer/render_widget.cc

Project Member

Comment 24 by bugdroid1@chromium.org, Feb 27 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/53f9f4ee5790ce47bf43eee521fdd3536cd1763a

commit 53f9f4ee5790ce47bf43eee521fdd3536cd1763a
Author: dtapuska <dtapuska@chromium.org>
Date: Mon Feb 27 01:14:26 2017

Add a passthrough touch event queue.

The passthrough touch event queue does no queuing of sending events. It
does handle the fact that touch events can be ack'd out of order and
it makes it appear to the higher layers in the browsers that the acks
are all in order. ie; You can get an ack for a touchend before a touchstart
from the renderer. If the compositor acks the touchend and the touchstart
is sent to the main thread. This class makes this appear logical to the
browser which relies upon things like the touchstart being ack before the
touchend.

This change allows coalescing to only happen in the main thread event queue.
It also removes the async sending of touchmoves. All touchmoves are
sent right away.

BUG= 642368 
TBR=clamy@chromium.org

Review-Url: https://codereview.chromium.org/2715623002
Cr-Commit-Position: refs/heads/master@{#453133}

[modify] https://crrev.com/53f9f4ee5790ce47bf43eee521fdd3536cd1763a/content/browser/BUILD.gn
[modify] https://crrev.com/53f9f4ee5790ce47bf43eee521fdd3536cd1763a/content/browser/renderer_host/input/input_router_impl.cc
[modify] https://crrev.com/53f9f4ee5790ce47bf43eee521fdd3536cd1763a/content/browser/renderer_host/input/legacy_touch_event_queue.h
[rename] https://crrev.com/53f9f4ee5790ce47bf43eee521fdd3536cd1763a/content/browser/renderer_host/input/legacy_touch_event_queue_unittest.cc
[add] https://crrev.com/53f9f4ee5790ce47bf43eee521fdd3536cd1763a/content/browser/renderer_host/input/passthrough_touch_event_queue.cc
[add] https://crrev.com/53f9f4ee5790ce47bf43eee521fdd3536cd1763a/content/browser/renderer_host/input/passthrough_touch_event_queue.h
[add] https://crrev.com/53f9f4ee5790ce47bf43eee521fdd3536cd1763a/content/browser/renderer_host/input/passthrough_touch_event_queue_unittest.cc
[modify] https://crrev.com/53f9f4ee5790ce47bf43eee521fdd3536cd1763a/content/test/BUILD.gn

Project Member

Comment 25 by bugdroid1@chromium.org, Mar 2 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/48e55aa69627f177a523bbf80f753454764ac2ac

commit 48e55aa69627f177a523bbf80f753454764ac2ac
Author: dtapuska <dtapuska@chromium.org>
Date: Thu Mar 02 13:07:06 2017

Fix unit tests to enable them testing with the rAF aligned touch input.

rAF aligned touch input enables a passthrough touch event queue and a
number of tests were testing the number of ACKs or messages sent.
Explicitly enable the tests so that it is independent of the actual feature
setting. In certain test cases run both the rAF enabled and disabled. For
tests where it doesn't really matter just enable it. Most of the changes
here are related to GestureScrollUpdate which then generates 2 messages
sent immediately (instead of 1 sent and 1 queued).

BUG= 642368 

Review-Url: https://codereview.chromium.org/2727683002
Cr-Commit-Position: refs/heads/master@{#454243}

[modify] https://crrev.com/48e55aa69627f177a523bbf80f753454764ac2ac/content/browser/renderer_host/input/input_router_impl_unittest.cc
[modify] https://crrev.com/48e55aa69627f177a523bbf80f753454764ac2ac/content/browser/renderer_host/render_widget_host_unittest.cc
[modify] https://crrev.com/48e55aa69627f177a523bbf80f753454764ac2ac/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
[modify] https://crrev.com/48e55aa69627f177a523bbf80f753454764ac2ac/content/renderer/input/input_event_filter_unittest.cc
[modify] https://crrev.com/48e55aa69627f177a523bbf80f753454764ac2ac/content/renderer/input/input_handler_manager.h
[modify] https://crrev.com/48e55aa69627f177a523bbf80f753454764ac2ac/content/renderer/input/main_thread_event_queue_unittest.cc

Project Member

Comment 26 by bugdroid1@chromium.org, Mar 2 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a1b99feca7254bceaabcf4feb3db2532de0b3608

commit a1b99feca7254bceaabcf4feb3db2532de0b3608
Author: dtapuska <dtapuska@chromium.org>
Date: Thu Mar 02 14:35:01 2017

Enabled rAF aligned touch input

Enable rAF aligned touch input. Approved intent to ship:
https://groups.google.com/a/chromium.org/d/msg/blink-dev/axrIk4FPw7A/8X9WVwO5BAAJ

BUG= 642368 

Review-Url: https://codereview.chromium.org/2724043002
Cr-Commit-Position: refs/heads/master@{#454255}

[modify] https://crrev.com/a1b99feca7254bceaabcf4feb3db2532de0b3608/content/public/common/content_features.cc

Project Member

Comment 27 by bugdroid1@chromium.org, Mar 2 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9a97d2d1d08b39636a0a6c014ff06320a78f1375

commit 9a97d2d1d08b39636a0a6c014ff06320a78f1375
Author: dtapuska <dtapuska@chromium.org>
Date: Thu Mar 02 16:38:11 2017

Revert of Enabled rAF aligned touch input (patchset #3 id:40001 of https://codereview.chromium.org/2724043002/ )

Reason for revert:
We are holding back rAF aligned input right now because of perf bot regression with the passthrough touch event queue. And we don't want to ship rAF alignment without that.

Original issue's description:
> Enabled rAF aligned touch input
>
> Enable rAF aligned touch input. Approved intent to ship:
> https://groups.google.com/a/chromium.org/d/msg/blink-dev/axrIk4FPw7A/8X9WVwO5BAAJ
>
> BUG= 642368 
>
> Review-Url: https://codereview.chromium.org/2724043002
> Cr-Commit-Position: refs/heads/master@{#454255}
> Committed: https://chromium.googlesource.com/chromium/src/+/a1b99feca7254bceaabcf4feb3db2532de0b3608

TBR=dgozman@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 642368 

Review-Url: https://codereview.chromium.org/2725163003
Cr-Commit-Position: refs/heads/master@{#454281}

[modify] https://crrev.com/9a97d2d1d08b39636a0a6c014ff06320a78f1375/content/public/common/content_features.cc

Project Member

Comment 28 by bugdroid1@chromium.org, Mar 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/550f89fa439bba1a6aad2d2e343259bca9d0e731

commit 550f89fa439bba1a6aad2d2e343259bca9d0e731
Author: dtapuska <dtapuska@chromium.org>
Date: Fri Mar 03 01:55:39 2017

Revert of Fix unit tests to enable them testing with the rAF aligned touch input. (patchset #3 id:40001 of https://codereview.chromium.org/2727683002/ )

Reason for revert:
Rolling back passthrough event queue being enabled.

Original issue's description:
> Fix unit tests to enable them testing with the rAF aligned touch input.
>
> rAF aligned touch input enables a passthrough touch event queue and a
> number of tests were testing the number of ACKs or messages sent.
> Explicitly enable the tests so that it is independent of the actual feature
> setting. In certain test cases run both the rAF enabled and disabled. For
> tests where it doesn't really matter just enable it. Most of the changes
> here are related to GestureScrollUpdate which then generates 2 messages
> sent immediately (instead of 1 sent and 1 queued).
>
> BUG= 642368 
>
> Review-Url: https://codereview.chromium.org/2727683002
> Cr-Commit-Position: refs/heads/master@{#454243}
> Committed: https://chromium.googlesource.com/chromium/src/+/48e55aa69627f177a523bbf80f753454764ac2ac

TBR=tdresser@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 642368 

Review-Url: https://codereview.chromium.org/2725263002
Cr-Commit-Position: refs/heads/master@{#454463}

[modify] https://crrev.com/550f89fa439bba1a6aad2d2e343259bca9d0e731/content/browser/renderer_host/input/input_router_impl_unittest.cc
[modify] https://crrev.com/550f89fa439bba1a6aad2d2e343259bca9d0e731/content/browser/renderer_host/render_widget_host_unittest.cc
[modify] https://crrev.com/550f89fa439bba1a6aad2d2e343259bca9d0e731/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
[modify] https://crrev.com/550f89fa439bba1a6aad2d2e343259bca9d0e731/content/renderer/input/input_event_filter_unittest.cc
[modify] https://crrev.com/550f89fa439bba1a6aad2d2e343259bca9d0e731/content/renderer/input/input_handler_manager.h
[modify] https://crrev.com/550f89fa439bba1a6aad2d2e343259bca9d0e731/content/renderer/input/main_thread_event_queue_unittest.cc

Project Member

Comment 29 by bugdroid1@chromium.org, Mar 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/abf462cdff2f095ab1ab69beb78c8b658bfb634a

commit abf462cdff2f095ab1ab69beb78c8b658bfb634a
Author: dtapuska <dtapuska@chromium.org>
Date: Fri Mar 03 03:46:57 2017

Disable the passthrough touch event queue for now.

Due to perf regressions disable the passthrough touch event queue
it causes GestureScrollUpdate events to take more time.

BUG= 697871 , 642368 

Review-Url: https://codereview.chromium.org/2722113007
Cr-Commit-Position: refs/heads/master@{#454504}

[modify] https://crrev.com/abf462cdff2f095ab1ab69beb78c8b658bfb634a/content/browser/renderer_host/input/input_router_impl.cc
[modify] https://crrev.com/abf462cdff2f095ab1ab69beb78c8b658bfb634a/content/browser/renderer_host/input/input_router_impl_unittest.cc

Project Member

Comment 30 by bugdroid1@chromium.org, Mar 6 2017

Labels: merge-merged-3029
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6e69ab6bfafc78b6037ee64329e6af6974e3afb6

commit 6e69ab6bfafc78b6037ee64329e6af6974e3afb6
Author: Dave Tapuska <dtapuska@chromium.org>
Date: Mon Mar 06 15:23:26 2017

Disable the passthrough touch event queue for now.

Due to perf regressions disable the passthrough touch event queue
it causes GestureScrollUpdate events to take more time.

BUG= 697871 , 642368 

Review-Url: https://codereview.chromium.org/2722113007
Cr-Commit-Position: refs/heads/master@{#454504}
(cherry picked from commit abf462cdff2f095ab1ab69beb78c8b658bfb634a)

Review-Url: https://codereview.chromium.org/2731213003 .
Cr-Commit-Position: refs/branch-heads/3029@{#20}
Cr-Branched-From: 939b32ee5ba05c396eef3fd992822fcca9a2e262-refs/heads/master@{#454471}

[modify] https://crrev.com/6e69ab6bfafc78b6037ee64329e6af6974e3afb6/content/browser/renderer_host/input/input_router_impl.cc
[modify] https://crrev.com/6e69ab6bfafc78b6037ee64329e6af6974e3afb6/content/browser/renderer_host/input/input_router_impl_unittest.cc

Project Member

Comment 31 by bugdroid1@chromium.org, Mar 6 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/48123136ee6788085fc91bf856bf5e05f97da590

commit 48123136ee6788085fc91bf856bf5e05f97da590
Author: dtapuska <dtapuska@chromium.org>
Date: Mon Mar 06 22:28:30 2017

Re-enable passthrough touch event queue.

Async touchmoves were going to the main thread to be ack'd by the
compositor but this was useless and causing a regression in the
mean input event latency. Ack async touch moves right away just like
the LegacyTouchEventQueue did.

BUG= 697871 , 642368 

Review-Url: https://codereview.chromium.org/2734563002
Cr-Commit-Position: refs/heads/master@{#454977}

[modify] https://crrev.com/48123136ee6788085fc91bf856bf5e05f97da590/content/browser/renderer_host/input/input_router_impl.cc
[modify] https://crrev.com/48123136ee6788085fc91bf856bf5e05f97da590/content/browser/renderer_host/input/input_router_impl.h
[modify] https://crrev.com/48123136ee6788085fc91bf856bf5e05f97da590/content/browser/renderer_host/input/input_router_impl_perftest.cc
[modify] https://crrev.com/48123136ee6788085fc91bf856bf5e05f97da590/content/browser/renderer_host/input/input_router_impl_unittest.cc
[modify] https://crrev.com/48123136ee6788085fc91bf856bf5e05f97da590/content/renderer/input/input_event_filter_unittest.cc
[modify] https://crrev.com/48123136ee6788085fc91bf856bf5e05f97da590/content/renderer/render_widget_unittest.cc
[modify] https://crrev.com/48123136ee6788085fc91bf856bf5e05f97da590/ui/events/blink/web_input_event_traits.cc
[modify] https://crrev.com/48123136ee6788085fc91bf856bf5e05f97da590/ui/events/blink/web_input_event_traits.h

Project Member

Comment 32 by bugdroid1@chromium.org, Mar 7 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/8bf474227977d380910fd4e9f5c00c269ccc6a09

commit 8bf474227977d380910fd4e9f5c00c269ccc6a09
Author: dtapuska <dtapuska@chromium.org>
Date: Tue Mar 07 22:23:08 2017

Reland fix unit tests to enable them testing with the rAF aligned touch input.

Originally landed in 48e55aa69627f177a523bbf80f753454764ac2ac
and reviewed in Review-Url: https://codereview.chromium.org/2727683002

rAF aligned touch input enables a passthrough touch event queue and a
number of tests were testing the number of ACKs or messages sent.
Explicitly enable the tests so that it is independent of the actual feature
setting. In certain test cases run both the rAF enabled and disabled. For
tests where it doesn't really matter just enable it. Most of the changes
here are related to GestureScrollUpdate which then generates 2 messages
sent immediately (instead of 1 sent and 1 queued).

BUG= 642368 

Review-Url: https://codereview.chromium.org/2740613002
Cr-Commit-Position: refs/heads/master@{#455251}

[modify] https://crrev.com/8bf474227977d380910fd4e9f5c00c269ccc6a09/content/browser/renderer_host/input/input_router_impl_unittest.cc
[modify] https://crrev.com/8bf474227977d380910fd4e9f5c00c269ccc6a09/content/browser/renderer_host/render_widget_host_unittest.cc
[modify] https://crrev.com/8bf474227977d380910fd4e9f5c00c269ccc6a09/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
[modify] https://crrev.com/8bf474227977d380910fd4e9f5c00c269ccc6a09/content/renderer/input/input_event_filter_unittest.cc
[modify] https://crrev.com/8bf474227977d380910fd4e9f5c00c269ccc6a09/content/renderer/input/input_handler_manager.h
[modify] https://crrev.com/8bf474227977d380910fd4e9f5c00c269ccc6a09/content/renderer/input/main_thread_event_queue_unittest.cc

Project Member

Comment 33 by bugdroid1@chromium.org, Mar 8 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/90f20260cfc14c445b56fd0b266b284db34cf575

commit 90f20260cfc14c445b56fd0b266b284db34cf575
Author: dtapuska <dtapuska@chromium.org>
Date: Wed Mar 08 17:04:34 2017

Re-land "Enabled rAF aligned touch input"

Originally landed via https://codereview.chromium.org/2724043002
https://crrev.com/a1b99feca7254bceaabcf4feb3db2532de0b3608
but reverted due to a perf regression which is now fixed.

Enable rAF aligned touch input. Approved intent to ship:
https://groups.google.com/a/chromium.org/d/msg/blink-dev/axrIk4FPw7A/8X9WVwO5BAAJ

BUG= 642368 
TBR=dgozman@chromium.org

Review-Url: https://codereview.chromium.org/2732313003
Cr-Commit-Position: refs/heads/master@{#455478}

[modify] https://crrev.com/90f20260cfc14c445b56fd0b266b284db34cf575/content/public/common/content_features.cc

dtapu/22: vsynctester.com -- To replicate the graph seen in comment #19...

1) I am using "System Three" at http://www.vsynctester.com/manual.html#testsetup
2) download any recent x64 snapshot
3) run chrome.exe with --enable-features=D3DVsync (see issue 467617).  This is not needed to replicate the issue, but makes the issue very 'visible'.
4) visit vsynctester.com
5) click on the gear icon
6) check "Use rAF time arg as frame time" and wait 20 seconds
7) check "Locked" and uncheck "Use rAF time arg as frame time"
8) observe blue line (rAF callback time offset from true vsync)
9) move mouse around and blue line spikes significantly (only with RafAlignedMouseInput)

Then run Chrome with "--disable-features=RafAlignedMouseInput" and notice that the problem goes away (repeating steps above).

jerry@ I've attached 4 captured images from your vsynctester.com using the instructions you provided. As you can see in the images without D3D there is a lot of variance in the numbers and the time processing the mouse moves is essentially drowned out by this. If you look at the D3D graphs (they have much less variance) you can see there are a lot of peaks (this is because the rAF signal is delayed due to processing mouse events and possibly style updates). But they are normalized in when rAF aligned mouse inputs are on because there is significantly less mouse events. The magnitude in the difference of my events are no where near the same magnitude of your events. I'll try on a different laptop here.
RafAlignedMouse.png
1.5 MB View Download
RafAlignedMouseDisabled.png
791 KB View Download
RafAlignedMouseDisabledWithD3D.png
831 KB View Download
RafAlignedMouseEnabledWithD3D.png
1.3 MB View Download
dtapu/35, Looks like you are seeing around a 0.45ms difference?  To see the difference more accurately, change the vsynctester.com chart 'scale' to '2' ms and turn off (uncheck) the inter-frame line.  I am testing on entry level notebooks -- that likely explains the timing difference?

Even 0.45ms is significant.  Why is there that delay?

Also, on 'RafAlignedMouseInput', there is a delay in calling the rAF callback function when the mouse is moved -- even with NO mouse callback registered.  Does that make sense?




jerry there are lots of mouse listeners... just not necessarily javascript listeners. Link over an anchor; it turns to a finger pointer. That is this code path doing that we just don't want to do that at like 200-300Hz that a mouse reports events at... just when we need to update the display and keep it close to the rAF callback. Doing less work allows us to be more predictable; notice the peaks are gone. I'll increase the scale when I'm back in the office tomorrow.
jerry.. here are the graphs.. change only seems to be about 0.1ms and the peak of disabled is far worse than the peak of it enabled.
RafAlignedMouseDisabledWithD3D2ms.png
1.4 MB View Download
RafAlignedMouseEnabledWithD3D2ms.png
371 KB View Download
Just tested against r457082 and got the attached.  Test on an entry level laptop.  For example, with a Intel i5-5200U processor and intel integrated graphics.

system1.jpg
65.6 KB View Download
dtapu, just emailed a chrome trace to you from the system in question...

dtapu, new test tool: http://www.vsynctester.com/testing/rafaligned.html.  Must move (or not) the mouse for 5 seconds for average number displayed to be accurate (at 60Hz rAF).

Jerry provided some traces out of band via email to me...

My response via email was:

Thanks for the trace Jerry they are appreciated. I see that in your trace the average of the RenderWidgetInputHandler::OnHandleInputEvent Wall time is about what you have claimed. 1.2-1.6ms... Roughly 40% of this time is spent in the dispatch of the event listener to JS.

I've tried on a low end Dell laptop here as well and my times are less then are around 0.4. We are certainly doing much less work in the rAF aligned input but if you have a slow mouse listener than due to the timing the delayed mouse move event could have more effect on the rAF signal not running as quick as it could.
Labels: -M-55 M-59 Launch-M-Approved-59-Dev Launch-M-Approved-59-Beta Launch-M-Approved-59-Stable-Exp Launch-M-Approved-59-Stable Launch-M-Target-59-Dev Launch-M-Target-59-Beta Launch-M-Target-59-Stable-Exp Launch-M-Target-59-Stable
Summary: rAF Aligned Touch Input (was: RAF Aligned Input Finch Experiment)
Moving mouse events to  issue 703344 .
There is still the delay, even when there is NO mouse callback registered.
Status: Fixed (was: Assigned)
Project Member

Comment 46 by bugdroid1@chromium.org, Oct 19 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a65557d12806c7f50475badc80bd7356fb107477

commit a65557d12806c7f50475badc80bd7356fb107477
Author: Dave Tapuska <dtapuska@chromium.org>
Date: Thu Oct 19 19:08:27 2017

Remove rAF aligned touch settings.

Delete relevant code now that rAF aligned touch and mouse have
both shipped for a couple of releases.

BUG= 642368 

Change-Id: Ib61e7023cc311e3967427566a5beb2875d7db469
Reviewed-on: https://chromium-review.googlesource.com/726406
Reviewed-by: Timothy Dresser <tdresser@chromium.org>
Reviewed-by: Daniel Bratell <bratell@opera.com>
Reviewed-by: Robert Kaplow <rkaplow@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510153}
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/BUILD.gn
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/input/input_router_impl.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/input/input_router_impl.h
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/input/input_router_impl_unittest.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/input/legacy_input_router_impl.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/input/legacy_input_router_impl.h
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/input/legacy_input_router_impl_perftest.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/input/legacy_input_router_impl_unittest.cc
[delete] https://crrev.com/2b12fcc1b0d6f04d6b2030e5be9237413cd01327/content/browser/renderer_host/input/legacy_touch_event_queue.cc
[delete] https://crrev.com/2b12fcc1b0d6f04d6b2030e5be9237413cd01327/content/browser/renderer_host/input/legacy_touch_event_queue.h
[delete] https://crrev.com/2b12fcc1b0d6f04d6b2030e5be9237413cd01327/content/browser/renderer_host/input/legacy_touch_event_queue_unittest.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/render_widget_host_unittest.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/public/common/content_features.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/public/common/content_features.h
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/renderer/input/input_event_filter_unittest.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/renderer/input/main_thread_event_queue.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/renderer/input/main_thread_event_queue.h
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/renderer/input/main_thread_event_queue_unittest.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/content/test/BUILD.gn
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/testing/variations/fieldtrial_testing_config.json
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/ui/events/blink/web_input_event_traits.cc
[modify] https://crrev.com/a65557d12806c7f50475badc80bd7356fb107477/ui/events/blink/web_input_event_traits.h

Sign in to add a comment