系列文章请扫关注公众号!
本文主要包括部分:
1、APP duration与SF duration
1.1 Backpressure
1.2 Duration Overview
1.3 waitPresentAfterTs
1.4 Latch Unsignaled buffer
2、System显示整体行为分析
2.1 CPU相关问题的简单梳理
2.2 如何看一帧从产生到显示在屏幕
2.3 如何从Trace来看当前的UI行为
本文主要讲解duration与system显示行为分析相关的调试技巧,通过图文详解各个关键分析点。
1、APP duration与SF duration
1.1 Backpressure
Backpressure就是check 前一次的SF+HWC的工作是否已经完成,如果完成就可以正常将这帧送下去,
如果没有完成就代表合成有backpressure,本次VSYNC-sf合成就放弃,需要等下一次VSYNC-sf再check
1)backpressure在trace中的表现
看到SF miss frame,且没有发生被latch Unsignaled buffer挡住,则一般就是有backpressure,如下图:
- backpressure打开和关闭
第三图Backpressure + Duration的用法和之前都不同
1,如图A点是N+1帧的SF backpressure在check
2,N这一帧的SF+HWC合成实际要再B点才能完成,所以如果直接check N的合成状况,就会和[To-be-1]一样Miss这一帧
3,如果往前回溯一帧,check N-1那一帧的合成状况,则应该就是已经完成的
4,Durtaion的加入可以有机会来决定往前check到我想要的那一帧,或者理解为SF-duration给了一个预期,
a) 预期当前帧N+1差不多在当前开始到SF-duration设定的时间内可以完成合成的工作
b) 所以实际上当前check完会往下送的也并非刚才画完的N+1帧,而是往前推两帧的N-1帧,当前的N+1是会延迟送HWC的
3)backpressure在不同帧率下的check范围
60Hz, 往前check 2帧
120Hz, 往前check 4帧
166Hz, 往前check 5帧
4)如何确认backpressure的check点
如下例中,在84419这一帧当中,选中trace可看到一tag:
previousPresentFence shift=1 ,这里的shift值表示从当前帧开始往前check的帧数。从0开始,1就是往前check2帧。
在code中位置如下:shift的值一般为sf_duration/period,具体可以直接查看trace中的打印值。
以此trace为例,sfWorkDuration为15.1,period是90hz,最终结果:shift=1。
5)duration设定值不合理产生backpressure的范例
该问题是发生在CMD屏上的一个例子:
当前duration设定:15.6
帧率60hz:16.6
backpressure check值:shift=0
CMD屏刷图会等待TE信号: TE->SOF->release pf
5.1
文章详情见