#背景:通过联系人拨打电话调起UI界面完成时延为1911ms。
测试用例:
手机版本:开发者手机Openharmony4.1
【预置条件】
1.通过联系人拨打电话调起UI界面
【测试步骤】
1.打开辅助相机或者高速相机,并对准测试机开始录像
2.启动APP,待界面稳定后退出APP,手动清理后台并重启手机
3.重复步骤2,总计操作5次
4.将拍摄好的视频传到PC端
5.在PC端打开AVIDEMUX2,点击文件选择上传的拍摄视频,弹出视频后左下角选择帧编号模块
6.手动左右键播放计算起点帧数和终点帧数,通过时延公示算出完成时延
起点帧数:手指离开屏幕联系人拨号按键第一帧
终点帧数:通话页面完全加载完成通话读秒出现的第一帧

原因分析:

1. 分析Systrace,发现从联系人收到TP事件,到通话界面拉起,主要耗时点在callui加载耗时1.9s

img

2. 分析callui界面显示慢主要是主线加载binder耗时835ms

img

2.1 binder对端是audio_server

img

2.2 搜索查看audio相关操作,只发现一个文件导入audio包。

src/main/ets/common/utils/VibrationAndProximityUtils.ts

img

2.3 埋Systrace点,找到binder阻塞的代码

img


注意:Systrace请使用Openharmony的开源性能分析工具Smartperf_Host,进行打开,否则看不到自己在应用层埋的trace点。

img

修改方案:

1. 把比较耗时获取系统服务调用,放到子线程进行同步加载,避免阻塞主线加载界面。

2. 放到work子线程优化后,界面加载明显改善,由以前1.9s变成只要0.9s.

img

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐