Android Graphics 多屏同显/异显 - 多屏时用于GPU合成的GraphicBuffer数量

“ 在当今内卷的时代,内耗可能比内卷更可怕。因为内卷是关于人与人之间的竞争,但内耗更像是一个人和自己的斗争。处在“内耗”状态的人,活在无休止的自我怀疑中,反刍过去、忧虑未来。消耗我们的动力,阻碍我们的行动。作为一个高敏感的人,小编也时常会沉浸在自己的世界里反复回忆一些让自己不快的细节,把自己搞的身心俱疲,不过我开始行动,慢慢的尝试着与自己和解,接受自己的不完美,臣服于现实的此时此刻。拒绝内耗,让我快乐!

01

用于GPU合成的GraphicBuffer的数量

在前面的文章中曾经讲到过,对于Composition Type标记为CLIENT的图层是会先由GPU进行合成,存放到GraphicBuffer中,然后再通过调用HWC的setClientTarget方法把数据传递给HWC完成最后的合成与显示。

具体信息可以查看早前文章:

Android Graphics 显示系统 - SurfaceFlinger的GPU合成(廿一)

开机初始化阶段,会收到display hotplug事件,从而触发创建用于GPU合成的BufferQueue的流程,大概如下:

图片

那在多屏的情况下,会接收到几次hotplug事件?创建几个BufferQueue服务于GPU合成?每个BufferQueue会分配几个GraphicBuffer呢?

有以下几个结论:

  • 有几个屏幕就有收到几次hotplug事件;

  • 有几个屏幕就会创建几个BufferQueue来服务于每个屏幕的GPU合成;

  • 每个BufferQueue默认分配2个buffer或根据下面属性值决定

    ro.surface_flinger.max_frame_buffer_acquired_buffer
    

02

验证
 

为了验证上面的结论,我们需要按照之前文章提供的方式搭建一个多屏的环境,可以参考文章:

Android Graphics 显示系统 - 如何模拟多(物理)显示屏?

这里我们模拟三个屏幕的状况,启动模拟器时,指定参数:

--display0=width=720,height=1280 
--display1=width=1920,height=1080  
--display2=width=720,height=960

我们这里模拟的是一个3屏幕的车机系统automotive

图片

为了便于观察,我设定了每个屏幕都是不同的size,同时,做完adb root & adb remount后,手动补上属性值,让每个屏幕分配3块GraphicBuffer

echo ro.surface_flinger.max_frame_buffer_acquired_buffers=3 >> /vendor/build.prop

准备工作就绪,我们可以执行adb reboot重新开机并且抓取开机logcat了!

先看开机logcat

3块屏幕对应收到3次hotplug事件

//第一次 display:0
04-16 03:06:48.460   403   403 I RanchuHwc: registerCallback hotplug connecting display:0
04-16 03:06:48.460   492   492 I SurfaceFlinger: onComposerHalHotplug(0, connected)
//第二次 display:1
04-16 03:06:48.464   403   403 I RanchuHwc: registerCallback hotplug connecting display:1
04-16 03:06:48.464   492   492 I SurfaceFlinger: onComposerHalHotplug(1, connected)
//第三次 display:2
04-16 03:06:48.485   403   403 I RanchuHwc: registerCallback hotplug connecting display:2
04-16 03:06:48.485   492   492 I SurfaceFlinger: onComposerHalHotplug(2, connected)

再看看SurfaceFinger源码

阅读原文

Android Graphics 多屏同显/异显 - 多屏时用于GPU合成的GraphicBuffer数量

关注公众号获取更多Android Graphics知识解析

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值