1. 背景
项目开发过程中,经常遇到app丢帧,卡顿的问题,这些问题单纯依靠log基本是束手无策的。相信有点开发经验的程序员都知道需要systrace或者perfetto来分析,一番折腾之后,好不容易抓到了问题场景的perfetto,但是打开之后,却不知道应该从哪里分析起,只会看简单的VSYNC-app和VSYNC-sf,发现确实有丢帧,但是查不出来到底是哪里的问题。本文结合项目实际项目经验,简单介绍下,针对这类性能问题,除了VSYNC之外,还能看什么指标。
2. systrace图解
QueuedBuffer减少的触发点有点问题,是releaseBuffer的时候触发。
错误的描述:
正确的描述:
从systrace我们可以看出来BufferTX - SurfaceViewcom.xxx/com.unity3d.player.UnityPlayerActivity# 这个BufferQueue,在 app queueBuffer的时候,数量+1,当SF合成的时候,数量-1.
往往这个BufferTX的数量变为0的时候,当Vsync-sf来到的时候,没有需要合成的buffer,导致丢帧的结果,这个时候,就需要查为什么app queueBuffer卡了。
增加部分:QueuedBuffer的来龙去脉
从systrace可以清晰看到代码中给出的两个触发点: