Android显示异常-合成类型问题详解

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

Android Display Graphics系列文章-汇总

本文主要包括部分:

一、合成类型问题overview

二、合成类型决策原因分析

   2.1 HWC dump 内容的解读

   2.2 GPU合成的判定逻辑

   2.3 Kernel HRT

三、BW能力导致的合成方式变化

四、Layer传输路径

一、合成类型问题overview

显示系统从SF开始往下至HWC->display driver做的大部分工作都是合成,合成完毕最终结果通过mipi显示在panel上。

合成需要根据场景图层的状况,系统硬件能力,以及系统执行状况来选择最佳的合成方式

实际问题中经常有针对合成方式和对比机不一样,合成方式改变相关的疑问,这篇文章将指导找出问题的原因

平台可用于合成的硬件: GPU (CLIENT)/  OverlayEngine (DEVICE)   

什么时候会去合成:对SF/HWC都是同一个动作 validate

合成是由哪些代码逻辑决定的?

  SurfaceFlinger -> HWComposer -> HRT(Kernel)

合成的决策过程大概是怎样的?从上到下依次介绍

1、SF

app或UI可以强制指定CLIENT合成,这部分一旦指定,即在SF中forceClientComposition,  HWC和kernel都不可更改这个指定合成类型

如果没有特别指定,则SF会默认先设定所有Layer为DEVICE合成,然后通过HWC来query平台的能力,平台根据自身能力来决定接受哪些Layer为DEVICE合成,其他的视为超过平台能力,就会标记变成CLIENT合成

2、HWC

HWC是中间层,最终查询系统的能力是HWC向kernel发起的,这部分逻辑名称为HRT

在向下查询之前,HWC本身也会设定一些条件,在HAL层就检查Layer是否有一些不符合平台能力的属性,如有就直接标记为CLIENT

3、HRT(kernel)

HRT是最后一道关卡,如果Layer在以上过程都未被标记CLIENT,HRT是最后一道关卡,一些与平台真正的硬件能力强相关的查询,或需要实时查询系统能力的部分会在这里做最后的判定  

二、合成类型决策原因分析

如何查看合成类型

 通过 SF dump中的信息来查看,dump中分别有列出SF和HWC的Comp Type信息

    adb shell dumpsys SurfaceFlinger > dumpsf.log

SF

HWC

SF的comp type和HWC的comp的第一列结果必须一致,如果有不一致那就是不正常,需要追究不一致的原因

SF (comp type)的代码来源:

高通Android13代码:

HWC (comp) 的代码来源

SF dump 推GPU合成的几种情况

如下是SF中直接相关的代码,包括但不完全限于如下几种:

1、cornerRadius   ------  Layer软件圆角,可查看sfdump,这个值不为0表示有开软件圆角

2、HdrY410   ----- 如上代码,hdr的特殊格式

3、drawShadows  ------ 阴影效果

4、blurRegions  ------ 模糊效果

5、app/UI  ------ 其他app/UI直接指定的强推

2.1 HWC dump 内容的解读

第一列

就是最终的合成结果,只有DEV/CLI 两种,请注意前一篇文章中有提过这里HWC dump类型和上面SF dump的必须一致,如果不一致一定是客制化造成的,需客户自查

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

》》》》》》》》》        文章详情,请关注公众号                 》》》》》》》》》》

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

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

Android Display Graphics系列文章-汇总

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值