Android Performance

Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战

Word count: 3.9kReading time: 13 min
2025/04/26
loading

本文是 Android Perfetto 系列的第六篇,主要介绍 Android 设备上 120Hz 刷新率的相关知识。如今,120Hz 已成为 Android 旗舰手机的标配,本文将讨论高刷新率带来的优势和挑战,以及从系统角度解析 120Hz 的工作原理。

在过去的几年中,移动设备的屏幕刷新率经历了从 60Hz 到 90Hz,再到现在普遍的 120Hz 的演进过程。这种提升不仅带来了更流畅的视觉体验,也对系统架构和应用开发提出了新的要求。通过 Perfetto 工具,我们可以更直观地理解高刷新率设备上帧渲染的过程和性能表现。

系列文章目录

  1. Android Perfetto 系列目录
  2. Android Perfetto 系列 1:Perfetto 工具简介
  3. Android Perfetto 系列 2:Perfetto Trace 抓取
  4. Android Perfetto 系列 3:熟悉 Perfetto View
  5. Android Perfetto 系列 4:使用命令行在本地打开超大 Trace
  6. Android Perfetto 系列 5:Android App 基于 Choreographer 的渲染流程
  7. Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战
  8. 视频(B站) - Android Perfetto 基础和案例分享

如果您还没看过早期的 Systrace 系列文章,以下是相关内容的传送门:

  1. Systrace 基础知识 - Why 60 fps ?
  2. 新的流畅体验,90Hz 漫谈

本文使用到的 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 应该与屏幕刷新率匹配,但实际体验与内容类型和用户感知紧密相关:

  1. 内容类型差异

    • 视频内容:电影(24fps)或视频(30fps)即使在 120Hz 屏幕上也能看起来流畅,这是因为视频内容包含自然运动模糊,且符合观看者对该媒介的预期
    • 交互式界面:而滑动列表、动画等交互场景对帧率要求更高,从 120fps 降到 110fps 都可能被用户感知为卡顿
  2. 帧率稳定性:稳定的低帧率(如稳定的 60fps)通常比不稳定的高帧率(如在 90-120fps 之间波动)体验更好

  3. 系统行为

    • 当 FPS 低于刷新率时,显示系统会复用帧或插入黑帧
    • 当 FPS 高于刷新率时,多余的帧会被丢弃,造成计算资源浪费

不同应用场景有不同的流畅度标准,开发者需要根据应用类型选择合适的优化策略。

什么是 Vsync?

Vsync(垂直同步)是将软件帧率与屏幕刷新率同步的机制,目的是避免画面撕裂现象。Android 系统中,Vsync 信号被用来触发应用渲染新一帧的时机,确保渲染过程与屏幕刷新周期保持一致。

为什么 120Hz 成为新标准?

市场从 60Hz 到 90Hz,再到 120Hz 的演进有着明确的技术和用户体验驱动因素:

  1. 更高的流畅度:120Hz 比 60Hz 提供了两倍的视觉信息,使滑动、动画等交互感觉更加流畅自然。

  2. 减少延迟:输入事件到显示结果的延迟从 60Hz 的 16.67ms 减少到 120Hz 的 8.33ms,让用户操作反馈更及时。

  3. 硬件支持成熟:现代移动处理器(如高通骁龙 8 系列、联发科天玑系列)已经有足够性能支持 120Hz 的稳定运行。

  4. 电池技术进步:更高效的电池和电源管理技术缓解了高刷新率带来的功耗压力。

  5. 可变刷新率技术: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 下 App 的渲染流程

在 120Hz 设备上,我们可以看到:

  1. Vsync 间隔:VSYNC 信号每 8.33ms 触发一次
  2. 帧处理流程:每一帧的处理依然遵循 Input → Animation → Traversal 的顺序
  3. 时间压缩:所有处理步骤必须在更短的时间内完成,对系统和应用性能要求更高

上图中出现了两个 Buffer 相关的 Trace,这里做一个简单的说明:

  1. QueuedBuffer:(例如:QueuedBuffer - VRI[ImproveSnsTimelineUI]#748BLAST#748)
    • 这个 Trace Tag 是在 App 进程中打印的
    • 表示应用完成一帧渲染后,将渲染好的 Buffer 放入队列准备提交给 SurfaceFlinger
    • 在使用 BlastBufferQueue 的系统中,这个时刻标志着 RenderThread 完成渲染并准备将结果传输到系统服务
  2. 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 从生产到消费的全过程。

image-20250426150441133

支撑 120Hz 的系统架构优化

要流畅地支持 120Hz 高刷新率,Android 系统架构做了不少调整和改进。这些变化涉及多个组件,也包括了对整个渲染管线的重要优化。下面我们来详细看看几个关键的技术点:

自适应刷新率技术

现代 Android 设备采用多层次刷新率管理策略:

  • 硬件层支持:LTPO(低温多晶氧化物)显示技术允许屏幕在 1Hz 到 120Hz 范围内精确调节刷新率,而非固定档位切换

  • 内容感知算法:系统通过分析屏幕内容类型自动调整刷新率:

    • 静态内容(阅读、图片浏览):降至 10-30Hz
    • 视频播放:匹配视频源帧率(通常 24-60Hz)
    • 滚动和交互:提升至 90-120Hz
    • 游戏:根据游戏引擎输出帧率动态调整
  • API 支持:Android 提供 Surface.setFrameRate() API,允许应用明确指定其首选帧率,系统会尽可能满足这一请求

1
2
// 应用可以指定首选帧率和刷新率行为
surface.setFrameRate(60.0f, Surface.FRAME_RATE_COMPATIBILITY_DEFAULT);

120Hz 的优势与挑战

120Hz 带来的体验提升

我拿到第一台120Hz手机的时候,最直观的感受就是:

  1. 一切操作都变得更流畅:从桌面滑动、应用切换到刷微博,画面更新更频繁,内容跟随手指移动也更加精准。尤其在快速滑动朋友圈或微博feed流时,文字依然清晰可辨,而不是一片模糊。

  2. 游戏体验大幅提升:玩《王者荣耀》或《和平精英》这类竞技游戏时,画面流畅度提升让我的操作精准度也跟着提高。在激烈对抗中,能提前8ms看到敌人动作,虽然时间很短,但确实能带来优势。

  3. 眼睛疲劳感减轻:这点可能是个人感受,但长时间盯着120Hz屏幕确实比60Hz舒适,特别是阅读和滑动内容时,眼睛追踪内容的负担减轻了。

  4. 触控体验更精准:120Hz不仅是显示更新快,触控采样率通常也会提高,让操作响应更及时,无论是打字还是精细控制都更准确。

120Hz 面临的实际问题

当然,高刷屏幕也带来了一系列技术挑战:

  1. 功耗问题:实测中,同一台手机在120Hz模式下比60Hz大约多耗电15-20%。对于本就紧张的手机续航来说,这是不小的压力。

  2. 开发门槛提高:原来在60Hz环境下勉强能跑的应用,到了120Hz可能就会显得卡顿。每帧只有8.33ms的处理时间,对开发者的代码效率提出了更高要求。

  3. 发热增加:长时间运行高帧率游戏,手机发热明显比60Hz更严重,这不仅影响体验,还可能导致性能降频。

  4. 应用适配并不完善:很多应用并未针对高刷做优化,即使在120Hz屏幕上,实际输出帧率可能还是60fps,浪费了屏幕潜力。

思考与展望

按需调整:从 ProMotion 看刷新率的智能管理

随着 120Hz 高刷新率逐渐成为旗舰手机的标配,一个值得思考的问题是:我们真的需要在所有场景下都保持 120Hz 的刷新率吗?

苹果的 ProMotion 技术实际上给出了一个更为合理的答案:只有在真正需要高感知度的动画场景下才激活高刷新率,而在其他场景则可以适当降低刷新率以节省电量。

iOS Promotion 的动画建议帧率

从上图可以看到,苹果在iOS开发文档中为不同类型的动画场景提供了非常精细的ProMotion帧率推荐配置:

  1. 高影响力动画(High-impact animations)

    • 适用场景:全屏转场(如照片应用中点击缩略图展开)、第一人称游戏、Sheet弹出展示等
    • 推荐帧率:80-120Hz,首选120Hz(CAFrameRateRange(minimum:80, maximum:120, preferred:120))
    • 使用建议:谨慎使用,仅在关键交互场景应用,以减少电量消耗
  2. 透明度/颜色过渡和微小移动

    • 适用场景:开关状态变化、进度指示器旋转、背景模糊效果等
    • 推荐帧率:使用系统默认帧率范围(CAFrameRateRange.default)
    • 使用建议:这类动画不需要过高帧率,视觉效果差异不大
  3. 低速小动画

    • 适用场景:时钟指针移动、缓慢进度条等
    • 推荐帧率:根据动画速度,可选择8-15Hz、15-24Hz或30-48Hz不等
    • 使用建议:低帧率在这些场景下视觉效果已足够好,同时可显著节省电量
  4. 其他所有情况

    • 推荐使用系统默认帧率

这种精细化的帧率管理策略,不仅让系统能够在用户体验和电池寿命之间取得最佳平衡,也为开发者提供了明确的指导。相比于简单粗暴地全局使用120Hz,这种有针对性的帧率调整方案显然更加科学和高效。

电量与体验的权衡

测试表明,将刷新率从 120Hz 降至 60Hz 可节省约 10-15% 的电量。智能地控制刷新率,能在保持良好用户体验的同时,显著延长电池续航时间。

120Hz 的主要价值在于提升交互流畅度和响应速度,而非始终保持高刷新率。更智能的做法是根据实际需求动态调整:在用户感知敏感的场景使用高刷新率,在用户感知不敏感的场景降低刷新率

开发者的适配策略

应用开发者应当意识到,并非所有内容都需要以最高帧率渲染。通过 Android 提供的 API(如 Surface.setFrameRate()),可以为不同内容类型指定合适的帧率,配合系统的自适应刷新率机制,共同达到最佳的性能与电量平衡。

总之,未来高刷新率技术的发展方向应该是更加智能、更加精细的自适应调节,而非简单地追求更高的数字。真正的技术进步是在用户无感知的情况下,在体验和能效之间找到最佳平衡点。

结论

回顾过去几年高刷屏幕的发展,我认为120Hz确实是手机交互体验的一次重要跃升。虽然它带来了功耗和开发复杂性等挑战,但好处是显而易见的:更流畅的体验、更低的输入延迟、更自然的动画效果。

对于开发者而言,Perfetto这类工具让我们能够看清120Hz下的性能问题,有的放矢地进行优化。虽然从16ms减少到8ms的预算听起来很紧张,但事实上主流处理器已经有足够能力应对这个挑战。只要合理规划UI复杂度、避免主线程阻塞,流畅的120fps体验是完全可以实现的。

从趋势来看,我不认为手机屏幕刷新率会无限攀升。120Hz可能会在相当长的时间内成为标准,而未来的焦点将更多放在如何智能化地调整刷新率,在不同场景下找到体验和功耗的最佳平衡点。毕竟,我们追求的不是数字上的高,而是实际体验的好。

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球 : 欢迎加入,多谢支持~

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫

CATALOG
  1. 1. 系列文章目录
  2. 2. 基本概念
    1. 2.1. 什么是屏幕刷新率?
    2. 2.2. 什么是 FPS?
    3. 2.3. 什么是 Vsync?
    4. 2.4. 为什么 120Hz 成为新标准?
  3. 3. 系统实现与工作原理
    1. 3.1. Perfetto 视角下的 120Hz 渲染流程
    2. 3.2. 支撑 120Hz 的系统架构优化
      1. 3.2.1. 自适应刷新率技术
  4. 4. 120Hz 的优势与挑战
    1. 4.1. 120Hz 带来的体验提升
    2. 4.2. 120Hz 面临的实际问题
  5. 5. 思考与展望
    1. 5.1. 按需调整:从 ProMotion 看刷新率的智能管理
    2. 5.2. 电量与体验的权衡
    3. 5.3. 开发者的适配策略
  6. 6. 结论
  7. 7. 关于我 && 博客