美文网首页
解决 macos上chrome/VS Code 滚动掉帧卡顿的问

解决 macos上chrome/VS Code 滚动掉帧卡顿的问

作者: 这名字真不对 | 来源:发表于2018-09-13 10:52 被阅读0次

    2019年12月12日 10:34:27 - update

    vscode 1.40 disable-gpu-acceleration 更新了一个配置选项:

    • 打开命令板 (Ctrl+Shift+P/ CMD+Shift+P / F1).
    • 输入Preferences: Configure Runtime Arguments
    • 添加 "disable-hardware-acceleration": true 配置项
    • 重启
      此时应用启动时默认关闭硬件加速,等同于code --disable-gpu

    2019年09月04日22:18:16 - update 已fixed 只是缓解

    当前版本已更新到 1.37.1 卡顿问题仍会有,这个时候突然灵光闪现,去搜索了一下关闭gpu渲染的方式:

    # macos
    $ code --disable-gpu 
    

    首先需要完全退出vscode,此时再通过禁用gpu启动vscode,之前的卡顿现象就彻底消失了。
    经过长时间的观察,我猜测是我使用的macbook pro 集显渲染存在问题,导致输入延迟和掉帧,关闭gpu渲染后,整个webview不再出现原先严重的输入延迟,算是真正的解决了开发体验的问题(除了启动时需要手动关闭gpu渲染)。同理,先前卡顿时,开启chrome devtool Layer borders,后卡顿现象消失,说明开启该功能后,渲染会交由CPU处理,很可能是GPU渲染出现了问题。

    chrome devtool

    2019年07月04日12:45:53 - update

    今天更新了vscode 1.36,遇到了之前出现的问题,现在不再是2k屏渲染的差异问题,尝试单屏重启vscode,重启电脑,仍会有相当大的输入响应延迟。
    重装1.35.1版,问题消失。接着尝试安装insider版本,同样出现了卡顿。

    比对多几个版本vscode的内置版本情况:
    Code/1.35.1 Chrome/66.0.3359.181 Electron/3.1.8
    Code-Insiders/1.36.0-insider Chrome/69.0.3497.128 Electron/4.2.5

    再回看之前的记录,最早出现在68升级到69时候,出现这个问题,比对今天的情况,基本可以确定问题是Chrome69存在这一个问题。
    按之前后续的体验来看,目前只能等vscode多更新几个electron版本,至少要在chrome71以后才得到解决。

    electron 5.0 版本log

    2018年12月19日11:47:51 - update

    经过一段时间使用,发现可能chrome卡顿可能是macos带来的问题,已复现问题。
    我的设备是一台macbook + 外接2k屏。

    复现场景:
    当外接2k屏时,启动基于chromium的程序,比如vscode 或者chrome,开启后,用户输入的响应会被延迟到400 ~ 1000ms,即下文截图中的performance的紫色宽度条。这个时候整个程序的渲染都是非常卡顿的。此时拔掉显示器线,依然是卡顿的情况。
    未接入2k屏时,启动程序时,渲染则是正常的,此时再接上外屏,程序也是正常的。

    现在不清楚是chrome在启动时,获取了显示器参数来处理输入事件还是什么原因导致了这个问题。

    ps. 需要注意,macos下关闭窗口不等于关闭程序,只要保证启动程序时,不接入外屏,之后使用中,只要不完整退出程序(退出后dock上不显示),就能保证程序正常使用。


    退出程序

    版本

    MacOS: 10.13.14
    MacBook Pro 2017 无touch-bar
    chrome版本 69.0.3497.92(正式版本) (64 位)

    最近chrome69更新,第一时间我就从68更新到了69,紧接着就出现了浏览器整体卡顿的问题。
    这个卡顿表现在,外接2k显示屏情况下,chrome在外接屏上整体帧数比mac内屏上少20帧,滚动页面时明显感觉到卡顿。google了半天后,没有搜到什么有用的资料。

    开启开发者工具,使用performance录制卡顿和非卡顿时的表现可以发现,interaction下的scroll update耗时相差了100~200ms左右。

    紧接着,尝试重装68,68下chrome没有出现双屏时表现不一致的情况。而且chrome自更新也让我放弃了继续折腾。再换了n个关键词后,搜到一个chrome 提供了硬件加速的选项,关闭之后,问题得到了解决(chrome 69),恢复了正常。

    然而过了两天后,类似的事情又发生了,这次略有不同,仅在公司后台web项目下,外屏的页面只有不到5帧,而且在项目的tab下,整个浏览器也出现了卡顿,切换到其他页面就没有这个情况。

    同样的问题,也是搜索了半天,仍然得不到解决。昨晚突然想起,硬件加速关闭了,重新打开硬件加速,页面又恢复了流畅,非常的迷。

    这里放一些performance的截图,后面的截图,前本段是内屏,后半段是外屏,可以看紫色条宽度对比:

    关闭硬件加速-1 关闭硬件加速-2

    可以看到,主线程存在堵塞的情况,交互发生后,等待主线程超过了100ms,而每一次滚动鼠标滚轮,触摸板或者其他交互,均会因为主线程堵塞被拖长执行时间,我猜测可能是chrome在不同屏幕分辨率下的调用策略不同,同时由于之前关闭了硬件加速(GPU加速),导致页面的渲染全部交由主线程(CPU)处理,一旦主线程出现卡顿或者处理延迟,整个渲染就被延后。现在重新开启了硬件加速,这部分问题得到了缓解,但是从性能上看,依然是存在一些问题的,但延迟降低到了100ms以下,帧率相比之前的卡顿起码能恢复到60帧,而不是全程5帧。

    开启硬件加速后

    虽然问题暂时得到了解决,不知道之后还会不会出现类似的问题,这次的问题,希望未来能够学会到如何提bug给google,或者参与到更大的开源项目中。

    相关文章

      网友评论

          本文标题:解决 macos上chrome/VS Code 滚动掉帧卡顿的问

          本文链接:https://www.haomeiwen.com/subject/ogxwgftx.html