游戏卡顿白皮书 › L2 客户端操作系统与设备
窗口最小化/失去焦点时处理受限 Minimized / unfocused window throttling
原因 ID co-unfocused · 主责 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
切到别的窗口或最小化游戏时,游戏和 Windows 为了省电会让游戏降速运行。切回来时,积压的数据包会一下子涌来,或者已经掉线。
起因 用 Alt+Tab 切到别的窗口,或最小化游戏 → 结果 游戏不可见时大幅降低 FPS 或直接暂停,Windows 也会降低不可见程序的优先级 → 画面表现 切回来的瞬间出现快进,切出时间长就会掉线
- 症状
- 快进, 一卡一卡, 掉线
- 因素
- 停顿
- 谁会遇到
- 只有我
- 何时出现
- 做特定操作时, 挂机一段时间后
- 负责方
- 主责 研发团队·客户端开发
- 研发团队要做的事
- 窗口不可见时,数据包接收和心跳仍在独立线程中继续,检查引擎的“后台运行”设置,切回时一次性对齐到最新状态。
- 数值参考
- 窗口不可见时把 FPS 降到 5~10,一帧就是 100~200 ms。逐帧处理数据包的游戏,读取数据包也会相应变慢。
- 监控图上
- 断流后集中到达 · 帧间隔(切换窗口前后)、已处理的数据包数
- 查看位置
- 开着 PresentMon 试着 Alt+Tab、最小化,查看窗口不可见时的帧间隔。在游戏日志中记录窗口焦点变化的时刻,与断线原因对照
- 确认依据
- 窗口不可见期间帧间隔拉长到 100 ms 以上或记录中断,切回瞬间一次性处理积压的数据包,出现快进。切出时间长会因心跳超时而掉线
- 排除依据
- 窗口一直在前台也一样,看“后台进程占用 CPU”或网络侧
- 确认手段
- 需在玩家侧环境确认
- 深入了解
- Windows 11 不保证给最小化、完全被遮挡且不发声的窗口程序提供 1 ms 定时器。用电池运行的笔记本会把这类程序降到最省电的速度;在混合核心架构的 CPU 上,还可能让它跑在较慢的能效核上。同一台电脑上的两个客户端如果只有后台那个异常,也请看“后台窗口处理受限”。
出处
- Quality of Service Microsoft
既看不见也听不到的窗口程序被设为 Low QoS,使用电池时按最省电的 CPU 速度和能效核调度 - timeBeginPeriod function (timeapi.h) Microsoft
Windows 11 不保证被遮挡或最小化窗口的进程获得高于默认的定时器精度 - Application.runInBackground Unity
Unity 默认值为 false,窗口转到后台时游戏循环停住 - PresentMon Capture Application (README-CaptureApplication.md) Intel
MsBetweenPresents:本次 Present() 调用与上一次调用之间的时间(ms)
相关原因
同一层:L2 客户端操作系统与设备
其他层中同样导致“快进”的原因
查看含图示和实验的原卡片