Android trace presentFence屏幕显示的帧
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是否有问题。
Android trace中CPU的RenderThread与GPU-CSDN博客文章浏览阅读952次,点赞15次,收藏25次。在Android系统中,RenderThread是负责GPU渲染的关键线程,它通过dequeueBuffer和queueBuffer机制与GPU进行交互,执行图形图像的密集渲染任务。RenderThread的存在解耦了Android的UI主线程与GPU渲染,避免了UI线程的阻塞,同时充分利用了GPU的并行计算能力,减少了栅格化的耗时。在硬件加速开启的情况下,RenderThread与GPURenderThread协同工作,通过SurfaceFlinger进行图像合成和显示。如果应用关闭硬件加速,则只有UIT_renderthreadhttps://blog.csdn.net/zhangphil/article/details/148003427