DescriptionMake --disable-gpu-vsync work with CoreAnimation
CoreAnimation provides GPU backpressure from the browser process to the
renderer process by only acknowledging frames when they are displayed.
This mechanism has the side-effect of throttling the renderer to about
vsync, because the layer will not request to be displayed much more
than once per vsync.
Relieve this pressure by not going into isAsynchronous mode when
receiving new frames when vsync is disabled.
This exposed an issue where unluckily-timed setNeedsDisplay calls could
be dropped on the floor, hanging the renderer because it would never
get its ack. Work around this by calling setNeedsDisplay and
displayIfNeeded explicitly, and, if the draw is not triggered by that,
sending the ack explicitly. This bug has never triggered without vsync
disabled, but apply the workaround in both situations, to be sure.
Use a ScopedClosureRunner to ensure that the swap ack be issued in
CompositorSwapBuffers, rather than sprinkling ack calls all over the
function. Remove the TODOs because the scoped runner should solve
the problem they were working around.
BUG=245900
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=252784
Patch Set 1 #Patch Set 2 : Clean up #Patch Set 3 : Add matching loops #
Total comments: 1
Patch Set 4 : Add swap ack scoped runner fix #
Total comments: 2
Messages
Total messages: 13 (0 generated)
|