Android Display性能问题教战手册3

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



 

本文主要包括部分:

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,如下图:

  1. 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

文章详情见

Android Display Graphics系列文章-汇总

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值