Android trace presentFence屏幕显示的帧
presentFence :当帧成功显示到屏幕时,present fence就会signal。
FrameMissed/GpuFrameMissed/HwcFrameMissed表示上一次合成的结果,当SurfaceFlinger合成后显示到屏幕上,present fence就会signal。因此可将present fence signal作为一次合成完结标志。SurfaceFlinger每次开始被Vsync-sf唤醒时,会先检查上一次合成情况,方式就是检查上一次合成的present fence有没有signal。如果没有,则认为是FrameMissed,并结合上一次合成方式是否有GPU或者HWC参与,同步GpuFrameMissed/HwcFrameMissed信息。
BufferTx :DrawFrame里queueBuffer以后BufferTx会增加,SF起来响应拿走Buffer合成时会减少; BufferTx内有可用Buffer,SF才会真正去合成。
present fence没有及时signal可能原因是GPU负载过高会导致底层大部分时间都在等GPU渲染工作完成,延迟了present fence的signal,导致FrameMissed。
dequeueBuffer时间长一般就是没有可用的buffer,SurfaceFlinger消费能力有问题,需要去看SurfaceFlinger。
trace中GPU Completion的每个waiting for GPU completion ×××长度,大致可以作为GPU渲染所花费的时间(即acquire fence释放的总时间)。通过这个时间,可以判断是否有GPU bound的现象。
相对应的,waiting for HWC release ×××的长度大致可以作为release fence的释放总时间参考。在release fence signal之前,GPU是无法对dequeueBuffer拿到的Buffer进行读写的(因为此时Buffer还是归HWC所有)。通过这点,可以判断Display是否有问题。