游戏卡顿白皮书 › L2 客户端操作系统与设备
游戏内覆盖层干扰 Overlays and screen hooks
原因 ID co-overlay · 主责 外部·外部 · 配合 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
聊天软件、启动器、录屏软件、FPS 显示工具为了在游戏画面上叠加绘制自己的 UI,会介入游戏的渲染过程(hook)。每帧的工作量随之增加,偶尔还会与游戏冲突,导致顿一下或游戏被强制关闭。
起因 聊天软件、游戏启动器、显卡工具、录屏软件的覆盖层处于开启状态 → 结果 每次把帧送往屏幕时,覆盖层都会介入并叠加绘制自己的 UI → 画面表现 帧略微变慢,弹出通知的瞬间顿一下,或出现画面异常、被强制关闭(玩家看来像掉线)
- 症状
- 一卡一卡, 卡住, 掉线
- 因素
- 停顿
- 谁会遇到
- 只有我
- 何时出现
- 一直, 偶尔随机
- 负责方
- 主责 外部·外部 · 配合 研发团队·客户端开发
- 研发团队要做的事
- 在崩溃报告和卡顿日志中一并收集正在运行的覆盖层列表。
- 外部要做的事
- 收到反馈时,引导玩家关闭所有覆盖层后再试。
- 监控图上
- 仅部分偏高 · 帧耗时、崩溃次数(开启覆盖层的玩家)
- 查看位置
- 关闭所有覆盖层,对比同一场景的 PresentMon 帧耗时;有崩溃时,查看事件查看器事件 ID 1000 中的出错模块名称(Faulting module name)
- 确认依据
- 关闭覆盖层后顿一下、画面异常消失,或崩溃的出错模块是覆盖层程序的 DLL
- 排除依据
- 关闭所有覆盖层后仍一样,看显卡驱动或“客户端崩溃”
- 确认手段
- 需在玩家侧环境确认
- 深入了解
- 只有特定玩家一卡一卡或游戏闪退,又无法用配置解释时,先怀疑覆盖层与游戏安全模块的冲突。
出处
- Steam Overlay (Steamworks Documentation) Valve
Steam 覆盖层会自动 hook 进从 Steam 启动的游戏,这种方式有时会暴露游戏使用渲染 API 时的内存错误,进而导致崩溃 - PresentMon Capture Application (README-CaptureApplication.md) Intel
用 FrameTime(帧与帧之间的 CPU 时间)录制每帧耗时 - The application or service crashing behavior troubleshooting guidance Microsoft
“应用程序”日志中的事件 ID 1000 包含出错模块名称(Faulting module name),有时因其他模块损坏,出错模块会显示为 Windows 模块
相关原因
同一层:L2 客户端操作系统与设备
其他层中同样导致“一卡一卡”的原因
查看含图示和实验的原卡片