Update: Firefox 40 起已经默认启用 Linux 下的 OMTC 支持(见这篇开发博客),无需再按照本文说明强制手动开启。
UPDATE: 发现开启 layers.offmainthreadcomposition.async-animations 会导致右键菜单无法响应鼠标位置,必须使用键盘控制。推荐关闭。 (Fixed)
最近在玩儿一些 HTML5 游戏的时候发现我的 Firefox 图形渲染似乎比之前卡了很多。明明很早之前就强制开启了硬件加速却没觉得有效果。在 about:support 中一看,“GPU 图像加速窗口”竟然又变成了 0/1 Basic ,虽然下面的“WebGL 渲染器”正确识别到了我的 Intel 集显。根据文档,这说明部分启用了硬件加速,但由于不支持硬件合成器,所以事实上是把内容交给显卡计算后再读取出来显示。
搜索一番,看到这篇博客:No more main-thread OpenGL in Firefox (important note for Linux users who use OpenGL)。才知道原来从去年开始, Firefox 正式将 OpenGL 合成从主线程移出来了。虽然 Off Main Thread Compositing (OMTC)已经实验了很长时间(搜索一下就可以看到不少 2012 年的记录),但在 Linux 上还是存在问题,所以就默认关闭,导致 Linux 无法使用硬件加速合成。
解决方法很简单——首先需要按照旧办法强制开启硬件加速绕过黑名单,然后再开启试验性的 OMTC 支持:设置 MOZ_USE_OMTC=1 环境变量(可以修改 firefox.desktop 文件,将 Exec 设置为 env MOZ_USE_OMTC=1 /usr/lib/firefox/firefox %u ,注销重新登录以生效),并且在 about:config 中打开以下几个选项:
layers.acceleration.force-enabled (就是上篇文章中提到的关键设置)
layers.offmainthreadcomposition.enabled
layers.offmainthreadcomposition.testing.enabled
layers.offmainthreadcomposition.async-animations
layers.async-video.enabled (这个应该是默认打开的)
当然, layers.acceleration.disabled 应该是关闭的(也就是在 GUI 设置界面中勾选上自动使用硬件加速)。最后,通过禁用 XRender 还可以进一步获取一点性能提升(关闭 gfx.xrender.enabled 选项)。
完成后在 about:support 中应该看到这样的信息:“GPU 加速窗口: 1/1 OpenGL (OMTC)”。
提示:我在开启 OMTC 时遇到过一次段错误浏览器崩溃, bug tracker 中也有包括渲染错误、崩溃在内的不少问题,请谨慎尝试并尽量使用最新内核和驱动。