Android图形显示系统——下层显示4:图层合成下(硬件合成器)

本文深入探讨Android的硬件合成器HwComposer,解释其如何减轻GPU负担,提高性能并降低功耗。HwComposer是专门的合成芯片驱动,负责图层的合成。内容包括接口定义、Layer的概念、物理显示屏与虚拟显示屏的区别以及Device的功能。
摘要由CSDN通过智能技术生成

硬件合成器-HwComposer

使用3D合成,需要大面积的像素混合计算和大量的内存传输(GPU读写GraphicBuffer所需),对GPU和DDR来说是一个巨大的负担。在GPU/DDR重度使用的场景(比如玩游戏),会造成发热、卡顿等。
为了提升性能,减少功耗,可以将合成这个过程交由另一个芯片完成,减轻GPU负担。进一步,直接让这个芯片连LCD,在LCD需要显示某一行时在线合成。
HwComposer便是这一个/多个专用合成芯片的驱动HAL层。
驱动由集成芯片系统的厂商自行设计,但需要遵循一定的标准,这个标准就是Android规定的HwComposer接口。

接口定义

hwcomposer的接口定义位于此文件:
hardware/libhardware/include/hardware/hwcomposer.h
其中部分宏定义在:
hardware/libhardware/include/hardware/hwcomposer_defs.h

Layer

在SurfaceFlinger中,Layer对应于window表示一个Buffer循环体系,对HwComposer而言,Layer仅指代当前Buffer,也即SurfaceFlinger中的Layer的当前帧。

typedef struct hwc_layer_1 {
    int32_t compositionType;//合成类型,SurfaceFlinger将合成目标Framebuffer的合成类型设为HWC_FRAMEBUFFER_TARGET,其他hwcomposer在prepare时根据实际情况修改
    /*
     * HWC_FRAMEBUFFER_TARGET:该Layer是3D合成的目标Layer
     * HWC_FRAMEBUFFER:hwcomposer无法处理此Layer,该Layer需要走3D合成流程,用OpenGL绘制
     * HWC_OVERLAY:该Layer为硬件合成器所处理,不需要OpenGLES去渲染
     * HWC_SIDEBAND:该Layer为视频的边频带,需要硬件合成器作特殊处理,若不支持,OpenGL方式只能以一个色块替代,这个标志是外界(应用/驱动)调用窗口系统的perform方法配置的
     * HWC_CURSOR_OVERLAY:该Layer可通过setCursorPositionAsync 方法改变坐标
     */

    uint32_t hints;//hwcomposer设置,通知SurfaceFlinger需要修改的配置
    /*
    HWC_HINT_TRIPLE_BUFFER  = 0x00000001:表示需要SurfaceFlinger将此Layer改成3Buffer循环
    HWC_HINT_CLEAR_FB       = 0x00000002:要求SurfaceFlinger清空该Layer位置的FrameBuffer数据(即置0)
    */

    uint32_t flags;//SurfaceFlinger设置,hwcomposer作处理
    /*
    HWC_SKIP_LAYER = 0x00000001:此Layer不参与合成,应当忽略
    HWC_IS_CURSOR_LAYER = 0x00000002:此Layer建议设定为一个CURSOR_LAYER,hwcomposer能处理的话将其合成类型改为HWC_CURSOR_OVERLAY
    */

    /*该Layer的颜色/Buffer信息*/
    union {
        hwc_color_t backgroundColor;//背景颜色,适用于纯色Layer,hwc_color_t 为一个 argb 结构体

        struct {
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值