Revert "[Reland] Synthetic input waits on compositor display"

This reverts commit b37e23cbd52ba447ab89c6d18f4ea0ecdc3fa5c0.

Reason for revert: 
Suspect this causes failure on WebKit Linux Trusty Leak:

Original change's description:
> [Reland] Synthetic input waits on compositor display
> Reland Note:
> {
>   Previously landed:
>   Reverted:
>   Revert was due to failing Leak Detector bot. Issue was that the
>   browser still held a reference to the V8 function for the gesture
>   completion callback which was never resolved. This CL resolves
>   callback when the BlinkTestRunner is reset. Original CL uploaded in
>   PS1.
> }
> This CL makes synthetic input - the kind used in web tests and
> telemetry (e.g. gpuBenchmarking.scrollBy) - wait until a CompositorFrame
> has been submitted by the renderer and displayed by the display
> compositor before resolving the completion callback. This means client
> code that wants to wait until any observable side-effects of this input
> is visible to further input need only wait on the gesture's completion
> callback.
> To give a motivating example: suppose we wish to write a test that
> scrolls an out-of-process iframe into view and clicks on a button in the
> frame. The code might look something like this:
> gpuBenchmarking.smoothScroll(1000, () => {
>   gpuBenchmarking.tap(0, 0);
> });
> This code contains a race today. The callback for smoothScroll is
> invoked as soon as the ScrollEnd is received in the renderer. However,
> until a new compositor frame is submitted from the renderer, the tap
> may occur against stale hit testing geometry. This is a major source of
> flakiness in our tests.
> This CL fixes the problem by forcing the renderer to perform a full
> redraw at the end of each gesture. The redraw produces a compositor
> frame and we invoke the callback once the compositor frame is displayed.
> We do this by reusing the RequestPresentation mechanism in RenderWidget.
> RequestPresentation required two modifications to work in web tests
> which use a single thread proxy with no scheduler:
>  - LayerTreeHost::Composite needs to check the forced redraw flag to
>    determine whether we need to raster, otherwise it won't produce a
>    frame
>  - RequestPresentation must request a main frame since there's no
>    scheduler to perform the commit, which is what SetNeedsForcedRedraw
>    requests.
> The timing change exposed an issue in the
> overlay-play-button-tap-to-hide.html test so this CL also cleans that
> test up to listen to the animation changes in media controls properly.
> Finally, it's possible we may get input in a RenderWidget that's not
> currently displayed. e.g. A click event sent via ChromeDriver causes a
> TouchStart followed by a TouchEnd. The TouchStart causes a
> which opens and focuses a new tab. The TouchEnd then happens on the
> background tab. In this case, we should resolve the callback rather than
> waiting on a CompositorFrame that'll never come. See ChromeDriver test
> testNetworkConnectionTypeIsAppliedToAllTabs for an example of this.
> Bug: 902446
> Change-Id: Ia2f0a5a6ae51216582bf4cc1d03cb5ba724ddffd
> Reviewed-on:
> Reviewed-by: David Bokan <>
> Reviewed-by: Peter Beverloo <>
> Commit-Queue: David Bokan <>
> Cr-Commit-Position: refs/heads/master@{#636440},,,,

Change-Id: I9200ea622887575de2d582f1d6e9030dd425aac9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 902446
Reviewed-by: Ella Ge <>
Commit-Queue: Ella Ge <>
Cr-Commit-Position: refs/heads/master@{#636485}
13 files changed