1. 课程导入

在移动端与嵌入式图形应用中,用户对“流畅”的感知往往先于对“画质”的评价。一次滑动列表的卡顿、一次点击按钮后 300ms 的延迟、一次长时间游戏后机身发烫导致的降频,都会直接转化为差评与流失。性能优化不是“锦上添花”的后期工作,而是贯穿需求、架构、编码、测试、上线全生命周期的工程能力。本课程以“旭日”平台为背景,围绕帧率、延迟、内存、温度四个核心指标,建立一套可测量、可定位、可验证的优化方法论。

一、为什么性能优化如此重要

性能问题具有“木桶效应”:帧率、延迟、内存、温度四者相互耦合。例如,内存分配过多会触发频繁 GC,造成帧率抖动;GPU 负载过高会拉高功耗,进而使 SoC 升温降频,最终表现为延迟增大与掉帧。因此,孤立地优化单一指标往往收效有限,必须建立系统视角。

  • 用户体验:60fps 下每帧预算约 16.6ms,120fps 下仅 8.3ms,任何超支都会造成可见卡顿。
  • 商业价值:启动时间每减少 100ms,转化率与留存率通常有可观测提升。
  • 硬件约束:移动设备散热能力有限,持续高性能输出必然伴随温控策略介入。
  • 成本控制:更低的内存占用意味着更少的 OOM 崩溃与更低的设备门槛。
性能优化的本质,是在有限的时间预算与功耗预算内,把计算、渲染、IO 和内存访问安排到最合适的位置。

二、核心概念:四个指标与一条主线

本课程的主线是“测量 → 定位 → 优化 → 验证”。四个核心指标定义如下:

指标 关注对象 典型目标 常用工具/信号
帧率 FPS 渲染管线、UI 线程、GPU 提交 稳定 60/120fps,帧时间 P95 达标 FrameTimeline、Choreographer、GPU 计数器
延迟 Latency 输入到显示的端到端链路 触控响应 < 50ms,首帧 < 1s InputDispatcher、VSync 偏移、trace 打点
内存 Memory 堆、纹理、缓存、泄漏 峰值可控、无持续增长、无 OOM Heap Profiler、Graphics Memory、RSS/PSS
温度 Thermal SoC、GPU、电池、外壳 不触发降频,表面温度舒适 Thermal Zone、频率统计、功耗轨

下图给出四类指标之间的因果与数据流关系,帮助建立整体框架:

性能优化整体框架:四指标耦合与优化闭环 帧率 FPS 每帧预算 / 掉帧 延迟 Latency 输入 → 显示链路 内存 Memory 堆 / 纹理 / 缓存 温度 Thermal 降频 / 功耗墙 渲染压力 分配压力 功耗升高 降频掉帧 响应变慢 优化闭环:测量 → 定位 → 优化 → 验证 1. 测量基线 2. 定位瓶颈 3. 实施优化 4. 回归验证 持续迭代,防止性能回退

三、方法流程:从基线到回归

性能优化最忌讳“凭感觉改代码”。正确流程是先建立可复现的基线,再用工具定位瓶颈,最后用数据验证收益。

  1. 建立基线:固定设备、系统版本、场景与数据,记录 FPS、帧时间 P95、内存峰值、温度曲线。
  2. 定位瓶颈:区分 CPU 瓶颈、GPU 瓶颈、IO 瓶颈还是内存瓶颈,避免“优化错对象”。
  3. 实施优化:按收益/成本排序,优先处理高频路径与长尾帧。
  4. 回归验证:对比优化前后数据,确认无功能回退与新的性能回退。

例如,采集帧时间分布时,可先通过命令行抓取关键指标:

# 采集 10 秒帧时间与内存快照(示例)
perfetto -c trace_config.pbtx -o trace.perfetto-trace
adb shell dumpsys gfxinfo com.example.app framestats
adb shell dumpsys meminfo com.example.app | head -n 20
建议把“帧时间 P95 / P99”作为核心验收指标,而不是只看平均 FPS。平均值会掩盖长尾卡顿,而用户恰恰对长尾最敏感。

四、案例与场景:一次滑动卡顿的排查

某信息流应用在快速滑动时出现周期性掉帧。初步观察平均 FPS 仍有 55,但 P99 帧时间达到 48ms。排查发现:列表项在滚动中频繁创建 Bitmap 并触发 GC,同时 GPU 纹理上传与主线程解码竞争。优化措施包括:复用 Bitmap 池、将解码移至 IO 线程、预取相邻项、限制同时解码数量。优化后 P99 帧时间降至 18ms,内存峰值下降约 30%,机身温度上升速度明显放缓。

这个案例说明:帧率问题常常根源于内存与调度问题,而温度则是持续高负载的结果而非原因。

五、常见误区与复盘

  • 误区一:只盯平均 FPS。 应关注帧时间分布与长尾帧。
  • 误区二:过早优化。 没有基线和 profiling 的优化容易引入复杂度却无收益。
  • 误区三:忽视温度。 短时跑分正常,长时间运行后降频,体验断崖式下降。
  • 误区四:优化后不复测。 性能回退往往在版本迭代中悄悄发生。
不要用“感觉更流畅了”作为验收结论。性能优化必须用可复现的数据说话,否则无法定位回退、无法沉淀经验。

六、学习目标与课程地图

完成本课程后,你将能够:

  • 理解帧率、延迟、内存、温度四类指标的测量方法与相互影响;
  • 使用主流工具完成性能数据采集、瓶颈定位与归因分析;
  • 掌握渲染、内存、调度、功耗等方向的常用优化手段;
  • 建立性能回归与监控机制,把优化成果稳定保持到线上。