Android Display性能问题教战手册4-典型案例分析

系列文章请扫关注公众号!

Android Display Graphics系列文章-汇总

本文主要包括部分:

1、连续冷启动退出多款应用以后卡顿

2、VSYNC设定异常导致卡顿

本文主要两个典型案例,分析System显示整体行为逐步分析问题根因,通过图文详解各个关键分析点。

1、连续冷启动退出多款应用以后卡顿

遇到此类问题首先需要根据 System显示整体行为分析  一节进行梳理,

1,首先根据标题这个场景是在不停进退app,那么首先就要明确发生问题的trace段,

2,应用的进入和退出参与的图层主要就是应用的activitylauncher,通常都是其中之一有异常帧

3,此题根据我们的梳理,问题出现在Launcher,比较明显的是如下图中红色框中的这一帧

根据以上梳理,我们将问题具体化为: waiting for HWC release 3155 为什么做了那么久?


1,根据 BufferQueue 章节的介绍,可以知道:

   这是红框的drawFrame Buffer#1 dequeueBuffer触发的,说明是前一个用#1 Buffer的frame(浅蓝框)还没放掉Layer Fence

2,接着根据 Display Common Trace Tag 一节的介绍

   浅蓝这一帧的处理见图中标示,应该是到浅蓝圈layer_fence_rel的位置,#1才被present出去(就是config到driver,显示在了LCM上

3,按照理解,在新的一帧Buffer没有Ready,还没有Config到driver之前,当前帧会一直被显示,它所使用的Buffer不能内更改或释放

   它应该在下一帧(深蓝帧)被config下来的位置signal Layer Fence

4,但可以发现深蓝帧没有拿Launcher的Buffer (BufferTx未减少),表示这个Layer没有被更新,所以浅蓝帧Layer Fence需要被继续使用

5,所以直到深蓝帧的下一帧绿色帧config下来,才release浅蓝帧Layer Fence


此处涉及到的概念和对各个Fence Tag的理解比较多,不理解的话需要仔细阅读前面的章节,才能清楚地做出判断

通过这里的分析我们已经可以知道 waiting for HWC release 3155 变长的原因是因为Launcher里有一帧SF没有更新Buffer

 

 所以现在问题变成为什么深蓝这帧没有更新Launcher?

1,根据Latch signaled buffer一节,可以发现:

   深蓝帧的SF中出现了fence_unsignaled,表示这一帧的Launcher的Buffer GPU draw还没有完成,所以这帧SF无法使用这个Buffer,见第一张图的黄色竖线

2,那么这一帧没有及时画完是因为GPU draw没有完成纯粹是因为GPU本身慢还是有其他因素影响呢?

   第一张图仔细观察黄色线前面一帧#1 dequeueBufferwait for hwc release也有被拉长挤到了后面一帧的wait for hwc release

 

因此需要继续回溯前一个 #1 的wait for hwc release 3151为什么被拉长

=========================================================================

============================完整文章见公众号===============================

=========================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值