한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › L1 客户端游戏进程

帧耗时尖峰 Frame hitch

原因 ID cg-hitch · 主责 研发团队·客户端开发

在含图示和实验的完整版中打开此卡片 →

某一帧的计算比平时多花了几倍时间,画面短暂停顿。

起因 技能特效激增、大量实体生成、UI 整体刷新挤在同一帧 → 结果 16.7 ms 内没能完成,要花 50~300 ms → 画面表现 画面顿一下,下一帧所有人一下子同时移动

症状
一卡一卡, 卡住
因素
停顿
谁会遇到
只有我
何时出现
人多的时候, 做特定操作时, 偶尔随机
负责方
主责 研发团队·客户端开发
研发团队要做的事
把繁重的工作拆到多帧执行,用 profiler 找出耗时冲高的帧,限制特效数量上限。
数值参考
60 FPS 下一帧是 16.7 ms。只要有一帧超过 50 ms,就很容易觉得“卡了一下”。
监控图上
偶发随机尖峰 · 帧耗时
查看位置
用 PresentMon 录制游戏中的帧耗时(FrameTime),以及 CPU、GPU 在该帧上花费的时间(CPUBusy、GPUBusy)。移动端看 Android vitals 的慢速会话、渲染缓慢指标
确认依据
平时在 16.7 ms 附近的帧耗时冲到 50 ms 以上的时刻,与技能演出、大量实体生成、UI 整体刷新重合,而此时 ping 不变
排除依据
帧耗时平稳、只有其他角色顿一下,是网络侧问题,看“没有插值缓冲或缓冲过短”等。冲高间隔有规律,先看“客户端垃圾回收”
确认手段
需在玩家侧环境确认

出处

  1. Slow rendering Android (Google)
    要达到 60 FPS,每帧必须在 16 ms 内绘制完;超时就会跳帧,表现为卡顿(jank)
  2. Slow Sessions (games only) Android (Google)
    Android vitals 把超过 50 ms(20 FPS)、34 ms(30 FPS)的游戏帧视为慢帧
  3. PresentMon Capture Application (README-CaptureApplication.md) Intel
    FrameTime(帧与帧之间的 CPU 时间)、CPUBusy/GPUBusy(生成该帧时 CPU、GPU 各自花费的时间)

相关原因

同一层:L1 客户端游戏进程

其他层中同样导致“一卡一卡”的原因

查看含图示和实验的原卡片