平均 FPS 正常为什么仍然白屏:HarmonyOS 场景性能测试怎么拆响应与完成时延
性能报告显示平均 FPS 59,测试人员却录到了接近一秒的白屏。两个结论可以同时成立:白屏期间页面几乎没有动画,FPS 并不一定下降;真正超标的是点击后的响应时延、内容稳定前的完成时延,或者中间出现了白块与黑块。
验证范围:本文依据华为开发者官网截至 2026-09-22 的公开资料整理。当前本机 DevEco SDK 为 API 24,且没有连接 HDC 真机;涉及 API 26 的接口片段用于说明接入与排障边界,不宣称已经完成 API 26 编译或真机验证。文中的时间戳校验、状态机、坐标换算、去重合并与资源预算逻辑已通过 Node.js 宿主测试,正式上线仍需在 API 26 SDK 和目标设备上补齐编译、权限、异常分支与性能验收。
能力边界先画清楚
FPS 只描述帧率维度,不能替代时延和内容正确性。官方性能测试把基线、场景和监控分开,并给出点击响应、点击完成、滑动响应、视频起播等不同指标。一次“看起来流畅”的录屏,不能证明首帧内容及时出现。
| 输入 | 中间状态 | 可交付结果 |
|---|---|---|
| 点击/启动动作 | 动作时间戳 | 响应时延 |
| 首个可见反馈 | 首帧或反馈标记 | 用户知道操作已生效 |
| 内容稳定 | 目标控件与数据就绪 | 完成时延 |
| 渲染过程 | FPS、卡顿、白块/黑块 | 过程质量 |
案例一:冷启动骨架屏出现得快,真实内容很晚
骨架屏可以缩短感知等待,但不能把“骨架出现”当成业务完成。记录启动动作、首个可交互控件和真实首屏数据三个点,分别比较响应与完成。若真实内容需要较长时间,进度提示也要与任务状态一致。
interfaceMilestone{action:number;feedback:number;complete:number}functionlatency(m:Milestone){return{response:m.feedback-m.action,completion:m.complete-m.action};}案例二:详情页转场顺滑,中间闪过白块
转场动画保持高 FPS,但目标页背景或大图晚一帧提交,用户仍会看到白块。场景测试需要同时保留视频证据、连续掉帧和内容显示异常标记;修复后在相同网络、相同数据与相同设备温度下对比。
typeSample={fps:number;whiteRatio:number;ts:number};functionbadFrames(items:Sample[]):Sample[]{returnitems.filter(v=>v.whiteRatio>0.35||v.fps<45);}取舍不是“开或不开”
把用户动作到稳定结果拆成里程碑,并让 FPS、卡顿和内容异常各自回答一个问题。只有同条件基线和场景回归都通过,才能称性能问题已经闭环。
交付前检查
- 基线测试固定设备状态、网络和测试数据。
- 响应时延与完成时延分别记录。
- FPS、最大连续丢帧和白块/黑块同时观察。
- 修复前后使用同一操作脚本和采样窗口。
- 报告标明工具版本、系统版本和场景输入。
官方资料
- HarmonyOS 性能测试
- HiSmartPerf 使用指导
- 应用时延体验建议
性能验收不是挑一个最好看的数字。FPS 正常而白屏存在,说明测量问题选错了;把响应、完成与内容过程拆开,优化才有方向。