Chrome's 96MB GPU memory limit breaks VSYNC|
July 30, 2016
The problem: Run vsynctester.com and switch to a 44MP background image, and Chrome
is no longer VSYNC aligned. This is most noticeable on Intel integrated graphics systems.
YOUR VOTE CAN HELP GET CHROME FIXED: Visit https://crbug.com/422000 and click on the 'star'
in the bug report
(if you don't see the star, click on 'Sign in' in the upper right corner of the web page
and use your Google sign in):
How to prove to yourself that Chrome's GPU memory limit is the problem: First, verify that Chrome
is using the GPU for canvas -- go to "chrome://gpu" and verify that "Canvas" is "Hardware accelerated".
Next, go to "chrome://flags", find the "Accelerated 2D canvas" section, click on the "Disable" link
(to re-eanble the GPU for canvas, repeat these steps and click on "Enable"):
Then, relaunch Chrome
(very important step; do not miss restarting Chrome) and
notice that Chrome -- when it does NOT use the GPU for <canvas> -- now PASSES the
www.vsynctester.com '44MP' VSYNC test!
Google has known about the core issue causing this bug since at least 2013
(Chrome is limited to using 96MB of GPU memory, even if your GPU has 12288MB of memory).
See the 'Bug 464835' section below for more information, and another test...
Other Chrome VSYNC bugs and issues:
- Bug 658601: Chrome on Windows has twice
the input delay (two frames instead of one frame) that it should because Chrome
presents rendered frames to the Windows OS on VSYNC -- which is the proper present
location for an OS that does not composite, but it is the worst possible location
for an OS that does composite (as Windows does).
With both Chrome and the Windows OS compositing, the end result is interference, and
one extra frame of delay in the presentation of rendered frames to the display.
- Bug 464835 and Bug 367355:
Chrome can not VSYNC when only 96MB of GPU memory is used.
Google has ignored this issue since at least 2013 (Bug 305617).
GPU memory test: Chrome crashes and burns (in an "Aw, Snap!" message) in
this simple GPU memory test, whereas all other major web
browsers pass the test.
The core problem is that Chrome has a hard-coded inflexible 96MB GPU memory limit.
It does not matter if your GPU has 999MB or 12288MB of memory. Chrome will
refuse to use more than 96MB of GPU memory. And the result is visibly devastating -- Chrome
comes to a crawl, because it is spending all of its time thrashing GPU memory
(trying to do everything via a 96MB window).
UPDATE 2016/09/29: In Canary 55.0.2875.0 (r421703), the GPU is turned OFF
when large images are detected. This 'fix' works when there is a single large
image, but it does not work when many smaller images are referenced.
- Bug 467617: How to dramatically improve Chrome VSYNC accuracy, and improve battery life!
Google has a functional prototype working.
- Bug 631166: Chrome GPU memory purge is too agressive, which causes VSYNC failures.
Fixed for the general public as of 2016/12/01 with release of Chrome 55.0.2883.75.
As of 2016/09/22, a fix is pending in 55.0.2869.0 (r420485)
- Bug 632785: Chrome does not VSYNC properly in Windows, until Chrome app window is resized.
Fixed for the general public as of 2016/10/12 with release of Chrome 54.0.2840.59.
As of 2016/08/02, a fix was pending in 54.0.2817.0 (r409376).