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
  • 这还只是像素数据,还没算纹理、顶点、着色器数据

我建议用 perfnvidia-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,基本可以判定为一次卡顿事件。

好了,这七把尺子都给你了。下次遇到多屏卡顿,别急着拍脑袋。先拿这些指标量一遍,问题出在哪,心里就有数了。