2、性能指标定义:帧率(FPS)、渲染延迟、CPU/GPU占用率、内存带宽、显存占用、屏幕撕裂与卡顿的量化标准
做多屏系统性能调优,第一件事是什么?
不是上来就改代码,也不是盲目换硬件。
你得先搞清楚——到底用什么尺子去量问题。
我见过太多团队,一卡顿就说是显卡不行,一掉帧就怪驱动。其实很多时候,是连最基本的性能指标都没吃透。今天咱们就把这七把尺子,一把一把捋清楚。
2.1 帧率(FPS)——最直观的“体检报告”
帧率,说白了就是每秒能刷出多少张画面。单位是fps(Frames Per Second)。
我个人习惯把帧率分成三个档位:
- 30fps以下:肉眼可见的卡顿,基本没法用
- 30-60fps:勉强流畅,但快速滑动时能感觉到“顿一下”
- 60fps以上:丝滑,人眼基本感知不到单帧延迟
但这里有个坑——平均帧率高不代表不卡。
我在项目中遇到过一台设备,平均帧率显示58fps,但用户就是觉得卡。后来一查,原来是帧率波动太大,时不时掉到20fps再弹回去。这种“过山车”式的体验,比稳定在30fps还难受。
量化标准:
- 流畅:平均帧率 ≥ 60fps,且最低帧率 ≥ 45fps
- 可接受:平均帧率 ≥ 45fps,最低帧率 ≥ 30fps
- 卡顿:平均帧率 < 30fps,或帧率波动超过 ±20%
2.2 渲染延迟——从“点击”到“看见”的时间差
帧率看的是“量”,渲染延迟看的是“快慢”。
你想想看,你用手指点了一下屏幕,到画面真正发生变化,这中间隔了多少毫秒?
这个时间差,就是渲染延迟。也叫“触控到显示延迟”。
我建议重点关注两个数字:
- 16.7ms:60fps下,每帧的理想渲染时间
- 100ms:人眼能感知到“延迟”的临界点
嗯,这里要注意——渲染延迟和帧率不是一回事。帧率60fps,不代表延迟就低。如果渲染管线里某个环节卡住了,哪怕帧率正常,你点下去还是会觉得“慢半拍”。
我的经验:用高速摄像机拍屏幕,配合示波器抓触控信号,能精确测出渲染延迟。工具推荐:LatencyMon(Windows)或 SurfaceFlinger 的 dump 日志(Android)。
2.3 CPU/GPU占用率——别被“100%”吓到
很多人一看CPU占用率到90%,就慌了。其实不一定。
CPU和GPU的占用率,要分场景看:
| 场景 | CPU占用率 | GPU占用率 | 说明 |
|---|---|---|---|
| 静态桌面 | <10% | <5% | 正常 |
| 4K视频播放 | 10-30% | 30-60% | GPU硬解为主 |
| 3D游戏/多屏渲染 | 30-70% | 70-95% | 正常负载 |
| 卡顿场景 | >90% 或 <20% | >95% 或 <10% | 异常! |
为什么会这样?CPU占用率过高,说明任务调度不过来;GPU占用率过低,说明CPU在“等数据”,没喂饱GPU。这两种情况都会导致卡顿。
我曾经调过一个双屏异显的项目,GPU占用率一直只有15%,但帧率就是上不去。查了半天,发现是CPU端的纹理拷贝太慢,GPU一直在空转。说白了,瓶颈不在渲染,在数据搬运。
2.4 内存带宽——被忽视的“隐形杀手”
内存带宽,就是内存和CPU/GPU之间“传数据”的速度。单位是GB/s。
很多人只盯着内存容量,觉得8GB够用就行。但带宽不够,照样卡。
举个例子:
- 一块4K屏幕,60fps,每帧需要传输约24MB的像素数据
- 三块4K屏幕同时渲染,每秒需要传输:24MB × 60 × 3 = 4.3GB/s
- 这还只是像素数据,还没算纹理、顶点、着色器数据
我建议用 perf 或 nvidia-smi 查看内存带宽利用率。如果持续超过80%,基本可以断定带宽是瓶颈。
避坑指南:我曾经遇到过DDR4-3200和DDR4-2400混插的情况,带宽直接降级到最低频率。多屏系统对带宽敏感,内存条尽量同型号、同频率。
2.5 显存占用——别让显存“爆仓”
显存是GPU的“工作台”。纹理、帧缓冲、渲染目标,全堆在里面。
多屏系统最怕什么?显存溢出。
量化标准很简单:
- 显存占用 < 70%:安全区
- 70% - 90%:警戒区,需要关注
- > 90%:危险区,随时可能触发OOM(显存溢出)
显存一旦爆了,系统会怎么做?把数据往系统内存里倒腾。这一倒腾,延迟直接翻倍,帧率断崖式下跌。
我记得有一次调一个三屏拼接的项目,显存占用一直在85%左右徘徊,偶尔掉帧。后来发现是某个纹理没及时释放,占了好几百MB。清理掉之后,显存降到60%,帧率稳如老狗。
2.6 屏幕撕裂——画面“劈叉”了
屏幕撕裂长什么样?画面中间出现一条错位的“裂缝”,上半部分和下半部分对不上。
原因很简单:GPU渲染完一帧,还没等显示器刷新完,就开始渲染下一帧了。显示器读到一半,画面换了,就撕裂了。
量化标准:
- 无撕裂:开启垂直同步(V-Sync)或自适应同步(FreeSync/G-Sync)
- 轻微撕裂:偶尔出现,肉眼不易察觉
- 严重撕裂:每几秒出现一次,画面明显错位
我个人建议:多屏系统尽量用支持自适应同步的显示器。如果硬件不支持,至少把V-Sync打开。虽然会牺牲一点帧率,但画面完整度更重要。
2.7 卡顿的量化标准——综合判断
卡顿不是单一指标能定义的。它是多个指标“共振”的结果。
我总结了一套“卡顿诊断公式”:
卡顿指数 = (帧率波动幅度 × 0.4) + (渲染延迟超标次数 × 0.3) + (CPU/GPU占用率异常时长 × 0.3)
具体量化:
- 流畅:卡顿指数 < 20,用户无感知
- 轻微卡顿:20 - 40,偶尔能感觉到“顿一下”
- 明显卡顿:40 - 60,操作有明显延迟感
- 严重卡顿:> 60,基本无法正常使用
一个小技巧:用 dumpsys gfxinfo(Android)或 PresentMon(Windows)抓取帧时间数据。如果连续3帧的渲染时间都超过16.7ms,基本可以判定为一次卡顿事件。
好了,这七把尺子都给你了。下次遇到多屏卡顿,别急着拍脑袋。先拿这些指标量一遍,问题出在哪,心里就有数了。