1. 帧率问题概述

各位同学好,我是老张。做嵌入式仪表盘开发这些年,帧率问题一直是个绕不开的坎。今天咱们就来聊聊帧率到底是什么,它不稳的时候会怎样,以及为什么用户会因为它而抓狂。

1.1 什么是帧率

帧率,说白了就是屏幕每秒钟刷新多少次。单位是 fps(Frames Per Second)。

举个例子:你翻书的时候,书页翻得越快,动画就越流畅。帧率就是这个翻页的速度。

在嵌入式仪表盘里,帧率通常指 UI 渲染的刷新频率。我习惯用这个公式来理解:

帧率 = 1 / 单帧渲染时间

比如单帧渲染花了 16.67ms,那帧率就是 60fps。嗯,这个数字很关键,后面会反复提到。

关键点:帧率不是越高越好,但必须稳定。60fps 是大多数仪表盘的黄金标准。

1.2 帧率不稳的表现

帧率不稳,说白了就是画面忽快忽慢。我遇到过不少项目,刚开机时挺流畅,跑着跑着就开始卡顿。

常见的表现有这几种:

  • 卡顿(Jank):画面突然停顿一下,像被什么东西拽住了。我在一个车载仪表项目里遇到过,转速表指针走到 3000 转时突然卡住,然后猛地跳过去。用户反馈说「这车是不是有问题」。
  • 抖动(Jitter):帧率忽高忽低,画面像在呼吸。比如从 60fps 突然掉到 30fps,又弹回 55fps。这种最让人头疼,因为很难复现。
  • 撕裂(Tearing):画面上下不同步,像被撕开了。这通常跟垂直同步没开有关。我记得有一次调试,发现是双缓冲切换时机不对导致的。
  • 延迟(Latency):操作后画面反应慢半拍。比如你按了加速键,指针要等 200ms 才动。这在赛车游戏仪表盘里特别明显。

注意:帧率不稳往往不是单一原因造成的。我曾经排查过一个案子,最后发现是 GPU 负载、内存带宽、任务调度三个问题叠加在一起。所以别指望一招搞定。

1.3 帧率对用户体验的影响

你想想看,用户开车时瞄一眼仪表盘,结果指针在抖。他会怎么想?

我总结了几点影响:

帧率问题 用户体验影响 实际案例
卡顿 感觉系统反应慢,不跟手 转速表指针跳跃,用户误以为发动机故障
抖动 视觉疲劳,容易晕眩 导航地图缩放时画面忽大忽小
撕裂 画面不完整,信息丢失 速度表数字被撕裂,看不清当前车速
延迟 操作反馈滞后,不信任系统 按了菜单键,等半秒才弹出界面

为什么会这样?因为人眼对运动物体的流畅度非常敏感。研究表明,当帧率低于 30fps 时,人眼就能明显感觉到卡顿。而 60fps 到 30fps 的跳变,用户会直接判定为「系统有问题」。

我的经验:在项目早期就要定好帧率目标。我一般会定两个指标:平均帧率不低于 55fps,最低帧率不低于 45fps。低于这个线,用户大概率会投诉。

另外,帧率不稳还会影响安全性。你想想,如果车速表在关键时刻卡住,司机可能误判速度。嗯,这可不是闹着玩的。

我曾经参与过一个后装市场的仪表盘项目,客户反馈说「开车时指针会跳」。我们排查了三天,最后发现是后台有个日志线程在整点时刻刷盘,导致 UI 线程被阻塞。从那以后,我养成了一个习惯:所有后台任务都要做帧率影响评估。

好了,这一章就讲到这里。帧率问题看似简单,但背后牵扯的东西很多。下一章我会详细讲帧率不稳的根因分析,包括 CPU、GPU、内存、任务调度这些方面。到时候我会拿实际项目中的案例来拆解,保证让你听得过瘾。

记住一句话:帧率稳,用户心才稳。