本文是 Android Perfetto 系列的第六篇,主要介绍 Android 设备上 120Hz 刷新率的相关知识。如今,120Hz 已成为 Android 旗舰手机的标配,本文将讨论高刷新率带来的优势和挑战,以及从系统角度解析 120Hz 的工作原理。
在过去的几年中,移动设备的屏幕刷新率经历了从 60Hz 到 90Hz,再到现在普遍的 120Hz 的演进过程。这种提升不仅带来了更流畅的视觉体验,也对系统架构和应用开发提出了新的要求。通过 Perfetto 工具,我们可以更直观地理解高刷新率设备上帧渲染的过程和性能表现。
系列文章目录
- Android Perfetto 系列目录
- Android Perfetto 系列 1:Perfetto 工具简介
- Android Perfetto 系列 2:Perfetto Trace 抓取
- Android Perfetto 系列 3:熟悉 Perfetto View
- Android Perfetto 系列 4:使用命令行在本地打开超大 Trace
- Android Perfetto 系列 5:Android App 基于 Choreographer 的渲染流程
- Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战
- 视频(B站) - Android Perfetto 基础和案例分享
如果您还没看过早期的 Systrace 系列文章,以下是相关内容的传送门:
本文使用到的 Trace 文件我上传到了 Github :https://github.com/Gracker/SystraceForBlog/tree/master/Android_Perfetto/微信朋友圈滑动卡顿.perfetto-trace.zip ,需要的可以自取。
基本概念
什么是屏幕刷新率?
屏幕刷新率是一个硬件概念,指的是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。
- 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms
- 90Hz 屏幕:每秒刷新 90 次,每次刷新间隔约 11.11ms
- 120Hz 屏幕:每秒刷新 120 次,每次刷新间隔约 8.33ms
屏幕刷新率决定了显示设备能够展示的最高帧率,但屏幕只负责按固定频率显示内容,具体显示什么内容由软件系统决定。
什么是 FPS?
FPS(Frames Per Second)是一个软件概念,指的是系统每秒生成多少帧内容提供给屏幕显示。
- 60FPS:系统每秒生成 60 帧内容,每帧有约 16.67ms 的处理时间
- 90FPS:系统每秒生成 90 帧内容,每帧有约 11.11ms 的处理时间
- 120FPS:系统每秒生成 120 帧内容,每帧有约 8.33ms 的处理时间
为了获得最佳的视觉体验,FPS 应该与屏幕刷新率匹配。如果 FPS 低于刷新率,会出现掉帧;如果 FPS 高于刷新率,多余的帧会被丢弃,造成资源浪费。
为了获得最佳的视觉体验,理想情况下 FPS 应该与屏幕刷新率匹配,但实际体验与内容类型和用户感知紧密相关:
内容类型差异:
- 视频内容:电影(24fps)或视频(30fps)即使在 120Hz 屏幕上也能看起来流畅,这是因为视频内容包含自然运动模糊,且符合观看者对该媒介的预期
- 交互式界面:而滑动列表、动画等交互场景对帧率要求更高,从 120fps 降到 110fps 都可能被用户感知为卡顿
帧率稳定性:稳定的低帧率(如稳定的 60fps)通常比不稳定的高帧率(如在 90-120fps 之间波动)体验更好
系统行为:
- 当 FPS 低于刷新率时,显示系统会复用帧或插入黑帧
- 当 FPS 高于刷新率时,多余的帧会被丢弃,造成计算资源浪费
不同应用场景有不同的流畅度标准,开发者需要根据应用类型选择合适的优化策略。
什么是 Vsync?
Vsync(垂直同步)是将软件帧率与屏幕刷新率同步的机制,目的是避免画面撕裂现象。Android 系统中,Vsync 信号被用来触发应用渲染新一帧的时机,确保渲染过程与屏幕刷新周期保持一致。
为什么 120Hz 成为新标准?
市场从 60Hz 到 90Hz,再到 120Hz 的演进有着明确的技术和用户体验驱动因素:
更高的流畅度:120Hz 比 60Hz 提供了两倍的视觉信息,使滑动、动画等交互感觉更加流畅自然。
减少延迟:输入事件到显示结果的延迟从 60Hz 的 16.67ms 减少到 120Hz 的 8.33ms,让用户操作反馈更及时。
硬件支持成熟:现代移动处理器(如高通骁龙 8 系列、联发科天玑系列)已经有足够性能支持 120Hz 的稳定运行。
电池技术进步:更高效的电池和电源管理技术缓解了高刷新率带来的功耗压力。
可变刷新率技术:LTPO 等自适应刷新率技术允许设备在不同场景下智能切换刷新率,平衡流畅度和功耗。
如今,120Hz 不仅是 Android 旗舰机型的标配,连 iOS 设备(iPhone 13 Pro 及以上)也已支持 120Hz 的 ProMotion 技术,标志着高刷新率已成为高端移动设备的基本特性。
系统实现与工作原理
Perfetto 视角下的 120Hz 渲染流程
在 120Hz 刷新率下,Android 系统的渲染流程没有本质变化,主要区别是每一帧的时间预算从 16.67ms 缩短到了 8.33ms ( 当然这里没有讨论 App duration,如果 App Duration 配置大于 8.33ms,那么 App 的 UI + Render 在 App duration 区间完成都是可以的,注意 每个机器的 App Duration 配置不一样)。下图展示了 120Hz 环境下应用渲染的 Perfetto 追踪图:
在 120Hz 设备上,我们可以看到:
- Vsync 间隔:VSYNC 信号每 8.33ms 触发一次
- 帧处理流程:每一帧的处理依然遵循 Input → Animation → Traversal 的顺序
- 时间压缩:所有处理步骤必须在更短的时间内完成,对系统和应用性能要求更高
上图中出现了两个 Buffer 相关的 Trace,这里做一个简单的说明:
- QueuedBuffer:(例如:QueuedBuffer - VRI[ImproveSnsTimelineUI]#748BLAST#748)
- 这个 Trace Tag 是在 App 进程中打印的
- 表示应用完成一帧渲染后,将渲染好的 Buffer 放入队列准备提交给 SurfaceFlinger
- 在使用 BlastBufferQueue 的系统中,这个时刻标志着 RenderThread 完成渲染并准备将结果传输到系统服务
- BufferTX:(例如:BufferTX - com.tencent.mm/com.tencent.mm.plugin.sns.ui.improve.ImproveSnsTimelineUI#47974)
- 这个 Trace Tag 是在 SurfaceFlinger 进程中打印的
- 表示 SurfaceFlinger 接收到应用传来的 Buffer 并开始处理的时刻
- TX 代表 “Transfer/Transmission”,即缓冲区的传输过程
可以理解在 Android 12 以后,App 完成的 Buffer(指的是 App 的 RenderThread 调用 queueBuffer 的时间点,其实此时 Buffer 还需要 GPU 完成才最终可用, 观察 Trace 中的 GPU completion(表明 GPU 实际完成该 Buffer 内容渲染的时间点) 所对应的 id 即可) 会先进入 App 的 BufferQueue(QueuedBuffer + 1),然后再触发传输到SurfaceFlinger (BufferTX +1 ,QueuedBuffer -1),SurfaceFlinger 拿去合成之后(BufferTX -1)。
Perfetto 同时也提供了 Buffer 追踪的功能,点击 App 上面的 Actual Timeline (这部分知识可以看 Actual Timeline 介绍),就可以看到这个 Buffer 从生产到消费的全过程。
支撑 120Hz 的系统架构优化
要流畅地支持 120Hz 高刷新率,Android 系统架构做了不少调整和改进。这些变化涉及多个组件,也包括了对整个渲染管线的重要优化。下面我们来详细看看几个关键的技术点:
自适应刷新率技术
现代 Android 设备采用多层次刷新率管理策略:
硬件层支持:LTPO(低温多晶氧化物)显示技术允许屏幕在 1Hz 到 120Hz 范围内精确调节刷新率,而非固定档位切换
内容感知算法:系统通过分析屏幕内容类型自动调整刷新率:
- 静态内容(阅读、图片浏览):降至 10-30Hz
- 视频播放:匹配视频源帧率(通常 24-60Hz)
- 滚动和交互:提升至 90-120Hz
- 游戏:根据游戏引擎输出帧率动态调整
API 支持:Android 提供
Surface.setFrameRate()
API,允许应用明确指定其首选帧率,系统会尽可能满足这一请求
1 | // 应用可以指定首选帧率和刷新率行为 |
120Hz 的优势与挑战
120Hz 带来的体验提升
我拿到第一台120Hz手机的时候,最直观的感受就是:
一切操作都变得更流畅:从桌面滑动、应用切换到刷微博,画面更新更频繁,内容跟随手指移动也更加精准。尤其在快速滑动朋友圈或微博feed流时,文字依然清晰可辨,而不是一片模糊。
游戏体验大幅提升:玩《王者荣耀》或《和平精英》这类竞技游戏时,画面流畅度提升让我的操作精准度也跟着提高。在激烈对抗中,能提前8ms看到敌人动作,虽然时间很短,但确实能带来优势。
眼睛疲劳感减轻:这点可能是个人感受,但长时间盯着120Hz屏幕确实比60Hz舒适,特别是阅读和滑动内容时,眼睛追踪内容的负担减轻了。
触控体验更精准:120Hz不仅是显示更新快,触控采样率通常也会提高,让操作响应更及时,无论是打字还是精细控制都更准确。
120Hz 面临的实际问题
当然,高刷屏幕也带来了一系列技术挑战:
功耗问题:实测中,同一台手机在120Hz模式下比60Hz大约多耗电15-20%。对于本就紧张的手机续航来说,这是不小的压力。
开发门槛提高:原来在60Hz环境下勉强能跑的应用,到了120Hz可能就会显得卡顿。每帧只有8.33ms的处理时间,对开发者的代码效率提出了更高要求。
发热增加:长时间运行高帧率游戏,手机发热明显比60Hz更严重,这不仅影响体验,还可能导致性能降频。
应用适配并不完善:很多应用并未针对高刷做优化,即使在120Hz屏幕上,实际输出帧率可能还是60fps,浪费了屏幕潜力。
思考与展望
按需调整:从 ProMotion 看刷新率的智能管理
随着 120Hz 高刷新率逐渐成为旗舰手机的标配,一个值得思考的问题是:我们真的需要在所有场景下都保持 120Hz 的刷新率吗?
苹果的 ProMotion 技术实际上给出了一个更为合理的答案:只有在真正需要高感知度的动画场景下才激活高刷新率,而在其他场景则可以适当降低刷新率以节省电量。
从上图可以看到,苹果在iOS开发文档中为不同类型的动画场景提供了非常精细的ProMotion帧率推荐配置:
高影响力动画(High-impact animations):
- 适用场景:全屏转场(如照片应用中点击缩略图展开)、第一人称游戏、Sheet弹出展示等
- 推荐帧率:80-120Hz,首选120Hz(CAFrameRateRange(minimum:80, maximum:120, preferred:120))
- 使用建议:谨慎使用,仅在关键交互场景应用,以减少电量消耗
透明度/颜色过渡和微小移动:
- 适用场景:开关状态变化、进度指示器旋转、背景模糊效果等
- 推荐帧率:使用系统默认帧率范围(CAFrameRateRange.default)
- 使用建议:这类动画不需要过高帧率,视觉效果差异不大
低速小动画:
- 适用场景:时钟指针移动、缓慢进度条等
- 推荐帧率:根据动画速度,可选择8-15Hz、15-24Hz或30-48Hz不等
- 使用建议:低帧率在这些场景下视觉效果已足够好,同时可显著节省电量
其他所有情况:
- 推荐使用系统默认帧率
这种精细化的帧率管理策略,不仅让系统能够在用户体验和电池寿命之间取得最佳平衡,也为开发者提供了明确的指导。相比于简单粗暴地全局使用120Hz,这种有针对性的帧率调整方案显然更加科学和高效。
电量与体验的权衡
测试表明,将刷新率从 120Hz 降至 60Hz 可节省约 10-15% 的电量。智能地控制刷新率,能在保持良好用户体验的同时,显著延长电池续航时间。
120Hz 的主要价值在于提升交互流畅度和响应速度,而非始终保持高刷新率。更智能的做法是根据实际需求动态调整:在用户感知敏感的场景使用高刷新率,在用户感知不敏感的场景降低刷新率。
开发者的适配策略
应用开发者应当意识到,并非所有内容都需要以最高帧率渲染。通过 Android 提供的 API(如 Surface.setFrameRate()),可以为不同内容类型指定合适的帧率,配合系统的自适应刷新率机制,共同达到最佳的性能与电量平衡。
总之,未来高刷新率技术的发展方向应该是更加智能、更加精细的自适应调节,而非简单地追求更高的数字。真正的技术进步是在用户无感知的情况下,在体验和能效之间找到最佳平衡点。
结论
回顾过去几年高刷屏幕的发展,我认为120Hz确实是手机交互体验的一次重要跃升。虽然它带来了功耗和开发复杂性等挑战,但好处是显而易见的:更流畅的体验、更低的输入延迟、更自然的动画效果。
对于开发者而言,Perfetto这类工具让我们能够看清120Hz下的性能问题,有的放矢地进行优化。虽然从16ms减少到8ms的预算听起来很紧张,但事实上主流处理器已经有足够能力应对这个挑战。只要合理规划UI复杂度、避免主线程阻塞,流畅的120fps体验是完全可以实现的。
从趋势来看,我不认为手机屏幕刷新率会无限攀升。120Hz可能会在相当长的时间内成为标准,而未来的焦点将更多放在如何智能化地调整刷新率,在不同场景下找到体验和功耗的最佳平衡点。毕竟,我们追求的不是数字上的高,而是实际体验的好。
关于我 && 博客
下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!
- 博主个人介绍 :里面有个人的微信和微信群链接。
- 本博客内容导航 :个人博客内容的一个导航。
- 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
- Android性能优化知识星球 : 欢迎加入,多谢支持~
一个人可以走的更快 , 一群人可以走的更远