2. 性能调优基础

在SA8155平台上进行显示性能调优,首先需要建立统一的度量体系。帧率、渲染时间、GPU利用率与CPU负载率是诊断显示瓶颈的四大核心指标。本章将逐一拆解其定义、测量方法及在车载双屏(仪表+中控)场景下的特殊含义。

核心原则: 单一指标无法反映真实性能瓶颈。帧率达标但渲染时间抖动,仍会导致视觉卡顿;GPU利用率低但CPU负载高,可能意味着驱动或调度存在阻塞。必须联合分析四类指标。

2.1 帧率(FPS)与帧间隔(Frame Interval)

帧率(Frames Per Second, FPS) 是最直观的流畅度指标,表示每秒渲染并送显的画面数量。车载系统通常要求仪表屏稳定在60 FPS,中控屏在动画场景下不低于30 FPS。

然而,平均FPS具有欺骗性。例如:1秒内前500ms渲染了30帧,后500ms渲染了0帧,平均FPS仍为30,但用户会感知到明显的停顿。因此,必须引入 帧间隔(Frame Interval) 指标,即相邻两帧之间的时间差(单位ms)。

指标 定义 车载合格标准 抖动容忍度
平均FPS 统计周期内总帧数 / 总时间 仪表 ≥ 55 FPS;中控 ≥ 28 FPS 低(仅反映整体吞吐)
帧间隔(Jitter) 相邻两帧时间戳差值 仪表 ≤ 18ms;中控 ≤ 35ms 高(超过阈值即视为卡顿)
掉帧率 帧间隔超过阈值的帧数占比 仪表 < 1%;中控 < 5% 极高(直接反映用户体验)
调优提示: 使用 dumpsys gfxinfo 或 SurfaceFlinger 的 trace 点可以精确抓取每一帧的提交时间戳。重点关注帧间隔的 P95(95分位值),而非平均值。
帧间隔抖动对比:稳定 vs 卡顿场景 稳定场景 帧间隔稳定在 16~17ms 卡顿场景 帧间隔出现 33ms 和 50ms 尖峰 16.7ms 基准线 16.7ms 基准线 结论:平均FPS可能均为55+,但卡顿场景的P95帧间隔远超16.7ms,导致用户感知到明显卡顿。 调优目标:消除帧间隔尖峰,而非仅提升平均FPS。

2.2 渲染时间(Render Time)与流水线分解

渲染时间是指从应用提交绘制指令到 SurfaceFlinger 合成并送显的总耗时。在SA8155的显示流水线中,渲染时间可分解为三个阶段:

  1. 应用绘制(App Draw): CPU端执行 onDraw(),构建DisplayList。耗时受UI复杂度、View层级深度影响。
  2. GPU渲染(GPU Render): GPU执行着色器、纹理采样、光栅化。耗时受填充率、着色器复杂度、纹理带宽限制。
  3. 合成与送显(Composition & Flip): SurfaceFlinger通过HWC(硬件合成器)或GPU合成,最终调用 flip() 提交到显示控制器。耗时受图层数量、HWC能力影响。
阶段 测量工具 SA8155典型耗时 瓶颈特征
App Draw systrace / atrace 2~5 ms CPU负载高、GC频繁、View过度绘制
GPU Render GLES / Vulkan 调试层 4~10 ms GPU利用率100%、纹理带宽饱和
Composition dumpsys SurfaceFlinger 1~3 ms 图层数过多、HWC fallback到GPU合成
常见误区: 不要将“GPU渲染时间”等同于“总渲染时间”。在SA8155上,即使GPU渲染仅需5ms,如果App Draw阶段因CPU调度延迟而耗时15ms,总帧间隔仍会超标。必须联合分析CPU与GPU的时间线。
SA8155 显示渲染流水线分解 App Draw CPU: 构建DisplayList 耗时: 2~5ms 提交 GPU Render GPU: 光栅化/着色 耗时: 4~10ms 合成 Composition HWC / GPU合成 耗时: 1~3ms 送显 总渲染时间 = App Draw + GPU Render + Composition ≤ 16.7ms (60FPS) 或 ≤ 33.3ms (30FPS)

2.3 GPU利用率(GPU Utilization)

GPU利用率反映的是在采样周期内,GPU执行引擎(Shader Core、Texture Unit、Memory Controller)处于活跃状态的时间占比。在SA8155上,GPU利用率通常通过 KGSL(Kernel Graphics Subsystem) 驱动节点或 GPU Frequency 状态来估算。

需要区分两种利用率:

  • 整体利用率: GPU处于非空闲状态的时间百分比。过高(>95%)意味着GPU成为渲染瓶颈。
  • 分引擎利用率: 分别查看几何引擎、像素引擎、纹理单元的负载。例如:像素引擎满载但几何引擎空闲,说明存在像素填充瓶颈。
SA8155调优经验: 当GPU利用率持续超过90%且帧率未达标时,应优先降低渲染分辨率、减少过度绘制(Overdraw)或简化着色器复杂度。当GPU利用率低于50%但帧率仍不足时,瓶颈通常在CPU或内存带宽。
GPU利用率与帧率关系诊断矩阵 GPU利用率低 + 帧率达标 正常状态,无需优化 GPU利用率高 + 帧率达标 接近瓶颈,预留余量 GPU利用率低 + 帧率不达标 瓶颈在CPU/内存/驱动 GPU利用率高 + 帧率不达标 GPU渲染过载,需降负载

2.4 CPU负载率(CPU Load)与调度延迟

CPU负载率是显示性能调优中容易被低估的指标。在SA8155上,CPU不仅负责应用逻辑和UI绘制,还承担着 GPU驱动命令提交 和 SurfaceFlinger合成调度 的任务。

关键关注点:

  • 整体负载率: 8个核心的平均使用率。过高(>80%)可能导致调度延迟,影响渲染线程的及时唤醒。
  • 特定线程负载: 重点关注 RenderThread、SurfaceFlinger、HWC 线程的CPU占用。这些线程的调度延迟会直接转化为帧间隔抖动。
  • 跨核迁移: 渲染线程在不同CPU核心间频繁迁移会导致缓存失效,增加延迟。建议通过 cpuset 或 schedtune 将渲染线程绑定到特定高性能核心。
联合分析命令: 使用 perfetto 同时抓取CPU调度、GPU频率和SurfaceFlinger事件。在时间轴上对齐观察:当CPU负载飙升时,GPU渲染时间是否同步增加?当渲染线程被抢占时,帧间隔是否出现尖峰?

2.5 四维联合分析框架

单一指标无法定位问题。下表总结了四种典型瓶颈场景的联合特征:

瓶颈类型 帧率 帧间隔 GPU利用率 CPU负载率 典型根因
GPU渲染过载 低 高且稳定 95~100% 中低 着色器复杂、纹理过大、Overdraw严重
CPU调度瓶颈 低 间歇性尖峰 中低 高(>80%) 渲染线程被抢占、GC频繁、中断风暴
内存带宽瓶颈 低 高且抖动 中高 中 DDR带宽饱和、GPU等待纹理加载
合成层瓶颈 低 高 中 低 图层数过多、HWC fallback到GPU合成
重要提醒: 在SA8155车载双屏场景下,仪表屏和中控屏共享同一GPU和DDR带宽。仪表屏的渲染负载波动会直接影响中控屏的帧间隔。联合分析时必须同时监控两个显示通道的指标。
四维联合分析:从指标到瓶颈定位 帧率 & 帧间隔 GPU利用率 CPU负载率 渲染时间分解 联合交叉分析(时间轴对齐) GPU渲染过载 降分辨率/简化着色器 CPU调度瓶颈 绑核/优先级/减少GC 内存带宽瓶颈 压缩纹理/降低分辨率 合成层瓶颈 合并图层/使用HWC

2.6 本章小结

  • 帧率与帧间隔 是用户体验的直接度量,必须关注P95帧间隔而非仅平均FPS。
  • 渲染时间 应分解为App Draw、GPU Render、Composition三个阶段,分别定位瓶颈。
  • GPU利用率 需结合分引擎利用率分析,避免被整体利用率误导。
  • CPU负载率 重点关注渲染线程的调度延迟,而非整体平均负载。
  • 四维联合分析 是SA8155显示调优的核心方法论,单一指标诊断必然导致误判。