为什么启用Paint Flashing会大幅提高帧速率?

BSL*_*L-5 6 javascript google-chrome google-chrome-devtools

这是有问题的代码.但是,我可以在大多数网站页面上展示相同的效果,此页面就是其中之一.

使用内置于谷歌浏览器中的FPS测量仪测量帧速率时,帧速率介于15和35之间.但是,当一个启用"绘制闪烁"时,帧率为(几乎)稳定的60fps.

我正在使用User Timing API来测量运行动画javascript所需的时间,并且在启用或不启用Paint Flashing的情况下运行之间似乎没有明显的区别.

我使用Google Chrome测试版测试版52.0.2743.41测试版(64位,Arch Linux)和版本52.0.2743.116 m(64位,Windows 10)进行了测试,结果一致.

所以,我有两个问题:

  1. 为什么会这样
  2. 如果这会提高页面的性能,为什么在chrome的正常渲染过程中不会出现这种情况?

图片:

没有油漆闪烁:

没有油漆闪烁

使用Paint Flashing:

用油漆闪烁

BSL*_*L-5 1

这个问题已经存在一年多了,并被标记为“WontFix”。合成器中的 FPS 仪表在设计上会先处理系统中的任何其他工作,包括油漆闪烁。Chromium 的开发人员需要转向基于 RAF 或其他形式的 FPS 计数,才能避免遇到此问题。