响应时延是用户使用移动设备时,从手指触摸屏幕(如点击按钮)到屏幕上有反应(如按钮呈现被按下的效果)的时间间隔。
页面侧滑返回响应时延指用户滑动屏幕左或右侧,从当前页面返回到上一页面中,滑动完成、手指离开屏幕到当前页面开始退出的时间间隔。时间间隔越短,响应越快,用户体验上就越流畅。
对于当前页面侧滑返回上一页面场景,设备上整体处理流程大致如下:
Trace文件是一种用于追踪应用程序在运行时的性能和行为的文件,它是通过调用系统提供的Trace类的方法来记录应用程序的操作。通过Trace文件能够分析应用程序运行时各阶段的耗时情况。查看Trace文件可使用SmartPerf工具。
关键字 | 线程/泳道 | 说明 |
|---|---|---|
H:originEventHandle code:501 | mmi_service | 点击应用页面内容离手点。 |
H:DispatchTouchEvent 位置 type=1 | ohos.sceneboard | sceneboard应用收到点击离手的事件,返回手势窗口在该应用中。 |
H:[Gesture]backGesture | H:[Gesture]backGesture | 返回手势消费事件阶段。 |
H:ABILITY_OR_PAGE_SWITCH | H:ABILITY_OR_PAGE_SWITCH | 页面切换过程。 |
H:SendCommands | 应用包名 | 应用发送绘制请求,下方H:MarshRSTransactionData表示提交绘制相关数据给渲染服务。 |
H:RSMainThread::ProcessCommandUni[应用进程号,序号] | render_service | 渲染服务处理渲染请求,在接收Vsync信号时执行,应用进程号、序号与应用发送渲染请求的transactionFlag相同。 |
H:RSHardwareThread::CommitAndReleaseLayers rate: 帧率,now:时间 | RSHardwareThread | 将GPU处理的渲染结果提交到显示硬件,now与H:RSMainThread::ProcessCommandUni上方的H:ReceiveVsync中的now字段一一对应。 |
H:JSAnimateTo | 应用包名 | 执行动画。 |
以某应用侧滑返回首页响应时延267ms问题为例,按整体流程拆分总耗时,确定各模块耗时。
接着以该点为起始点在ohos.sceneboard泳道中找到ohos.sceneboard应用收到该事件的地方(Trace点H:DispatchTouchEvent xxx type=1),根据两者之间的时间间隔得到多模输入模块耗时为3.3ms。

找到应用页面切换起始点、接收Vsync信号处,点击上方的Actual Timeline,在下方显示框中点击render_service右侧的跳转箭头可以找到渲染服务处理该绘制请求相应的Vsync信号接收点。


然后以render_service此处Vsync信号接收点为起点,根据now时间值,在RSHardwareThread泳道中找到render_service将该帧GPU处理的渲染结果提交到显示硬件的地方,最终得到渲染服务模块耗时14.6ms。

最终得到如下耗时拆分结果:
多模输入模块 | 返回手势窗口模块 | 应用 | 应用->渲染服务(应用结束点到渲染服务起始点) | 渲染服务 | 总和 |
|---|---|---|---|---|---|
3.3ms | 5.1ms | 12.9ms | 11.0ms | 14.6ms | 46.9ms |
按上述步骤分析得到总耗时为46.9ms,与问题反馈的总耗时267ms相差甚远。需要对各模块逐个分析、排查异常点。