移动端 PGO 优化怎么评估:平均 FPS 没变,为什么 1% Low 更关键?

📅 2026/7/12 23:13:03
移动端 PGO 优化怎么评估:平均 FPS 没变,为什么 1% Low 更关键?
移动端 PGO 优化怎么评估平均 FPS 没变1% Low 为什么能说明问题摘要PGO 的效果经常不是“平均 FPS 暴涨”而是让主线程、渲染线程和 RHI 线程更稳。本文用一次脱敏的移动端高帧场景对比说明如何从 FPS、1% Low、FrameTime、GT/RT/RHI 耗时和 CPU 占用判断 PGO 是否真的生效。推荐分类Android / 开发工具推荐标签PGO、性能测试、1%Low、FrameTime、HarmonyOS、移动端游戏封面短标题PGO 性能评估1. 为什么 PGO 不能只看平均 FPSPGO全称 Profile Guided Optimization本质是让编译器基于真实运行画像重新优化代码布局、分支预测、内联策略和热点路径。它对移动端游戏的收益经常体现在“帧时间更稳”而不是“平均帧率突然变高”。如果一个 120 帧场景本来就能跑到 119.x FPS那么平均 FPS 的提升空间非常有限。这个时候更应该看1% Low 是否抬升最低帧是否变好FrameTime 标准差是否下降CPU 均值是否下降GameThread、RenderThread、RHIThread 的执行耗时是否下降是否减少 GameGap / RHIThread / GameThread 类型瓶颈帧。一次脱敏测试里PGO 版本与非 PGO 版本的平均 FPS 只差约 0.2 FPS看起来几乎没变化。但 1% Low 从约 85 FPS 提升到约 96 FPS最低帧从 113 提升到 117CPU 均值下降约 3.8 个百分点。这种结果比“平均 FPS 0.2”更有意义因为它说明 PGO 改善的是卡顿尾部。2. 推荐的 PGO 对比指标PGO 评估建议分三层看。第一层是体验指标指标作用平均 FPS判断整体性能上限但高帧场景容易被帧率上限钳住最低帧观察最极端瞬时波动但容易被偶发事件影响1% Low衡量尾部稳定性比平均 FPS 更适合看微卡顿Jank / 10min适合长时间跑图或战斗场景标准差衡量帧率波动程度第二层是线程耗时指标解释FrameTime单帧总耗时GT_TimeExcGameThread 排除等待后的实际执行耗时RT_ExcRenderThread 执行耗时RHI_ExcRHIThread 执行耗时FrameSyncTime等待同步造成的帧时间成本GT_Idle / RT_Idle / RHI_Idle判断是不是线程空等或被其他线程卡住第三层是场景上下文当前坐标、相机方向、地图区域DrawCall、PrimitivesDrawn是否触发载具、AI、特效、UI、加载是否同一画质、同一帧率档、同一设备温度条件是否存在录屏、日志、调试开关影响。3. 一个更靠谱的 PGO 测试流程PGO 对比最怕“场景不一致”。我更推荐固定一条可复现路线清后台重启设备或至少冷却到稳定温度固定画质、帧率、亮度、电量区间固定地图路线、移动速度、镜头方向分别跑非 PGO 与 PGO 版本采集 FPS、CPU、GPU、内存、SS2/CSV 帧时间对齐同一路线区间去除加载、结算、异常暂停等非稳态帧输出平均值、P95/P99、1% Low、线程耗时均值与高分位对瓶颈类型进行分布统计。如果只是拿两段随机跑图数据比较很容易得到错误结论。PGO 本身优化的是热点路径场景路径不一致时收益会被资源加载、视野差异、网络波动、温控等因素淹没。4. 怎么解释“平均 FPS 只高 0.2但 1% Low 高 11”这类结果可以这样写结论在高帧率上限场景中平均 FPS 已接近帧率上限PGO 对平均 FPS 的提升不明显但从 1% Low、最低帧和 CPU 均值看PGO 对帧时间尾部有改善说明热点路径执行效率和线程稳定性有所提升。不要写成“PGO 无明显收益”。因为平均 FPS 被上限钳住时它本来就不是敏感指标。如果线程耗时也同步下降比如GT_TimeExc 下降RT_Exc 下降RHI_Exc 下降FrameTime 小幅下降那结论就更稳PGO 的收益不是采样误差而是主线程/渲染线程/RHI 链路都有改善。5. 注意PGO 不是万能优化PGO 对 CPU 热点更敏感对纯 GPU 瓶颈不一定有效。如果场景瓶颈来自大面积半透明过绘高复杂度材质过高三角面纹理带宽压力后处理成本GPU 频率被温控压低PGO 的收益可能很有限。所以 PGO 结论里要区分CPU/线程侧收益GPU/渲染侧收益帧时间稳定性收益用户体感收益。6. 推荐的报告模板可以把 PGO 测试报告写成下面这个结构1. 测试对象 - PGO 版本 - 非 PGO 版本 - 设备、画质、帧率、场景 2. 体验指标 - 平均 FPS - 最低帧 - 1% Low - Jank - 标准差 3. 线程指标 - FrameTime - GT_TimeExc - RT_Exc - RHI_Exc 4. 结论 - 平均 FPS 是否接近上限 - 尾部帧是否改善 - CPU 是否下降 - 是否建议接入 5. 风险 - 是否只覆盖单场景 - 是否需要战斗、UI、载具、加载等更多场景回归7. 我的判断口径如果我来判断一个移动端 PGO 是否值得合入会按这个优先级是否有稳定的 1% Low 提升是否降低 GT/RT/RHI 任一热点线程耗时是否降低 CPU 均值或峰值是否不增加内存、包体、启动时间风险是否在多场景、多设备上没有回退。平均 FPS 是门面1% Low 和 FrameTime 才是底子。PGO 的价值很多时候就是让底子变稳。