keiko233 排查 Nyanpasu 的 Linux 页面跳动,在本地实现 JavaScript 动画临时方案

keiko233 在 Clash Nyanpasu 的 Linux 页面跳动问题中表示,怀疑与 WebKitGTK 2.54 引入的新 Skia 合成器有关。在 WebKitGTK 2.54.0 MiniBrowser 中测试 Motion 的 transform 和 opacity 页面切换动画时,动画结束可能出现单帧渲染异常;尚不能确认与 look#531、WebKit Bug 321993 为同一根因。目前已在本地实现 Linux 临时方案,让 Motion 使用 JavaScript 帧循环代替浏览器原生 WAAPI,复杂页面的动画性能可能略受影响。作者仍在关注上游修复,希望在修复完成并发布测试版本后请用户确认问题是否消失。

作者原文

经过排查,我们怀疑这个问题与 WebKitGTK 2.54 引入的新 Skia 合成器有关。

Nyanpasu 使用 Motion(WAAPI)处理页面切换时的 transform 和 opacity 动画。在 WebKitGTK 2.54.0 的 MiniBrowser 中测试发现,动画结束时可能出现单帧渲染异常,导致进入的页面短暂消失、退出的页面瞬间重新显示,从而产生你所看到的跳动现象。

其他使用 WebKitGTK 的应用也报告过类似问题,可以参考 look#531 和 WebKit Bug 321993,不过目前还不能完全确认是同一个根因。

目前已经在本地实现了一个针对 Linux 的临时解决方案:让 Motion 使用 JavaScript 帧循环代替浏览器原生 WAAPI 动画,避免触发可能存在问题的合成路径。

这个方案可能会略微影响复杂页面的动画性能,因此后续仍会关注 WebKitGTK 上游的修复情况。

麻烦提供一下你的 WebKitGTK 版本:

如果使用的是 2.54.x,就与目前怀疑的问题环境一致。修复完成并发布测试版本后,也希望你能帮忙确认问题是否消失。