android的hwc浅析

Android图形显示系统原理 Android显示系统的原理 FrameBuffer SurfaceFlinger HardwareComposer 硬件组合抽象层(HWComposer、Hardware Composer HAL),作为 HAL 硬件抽象层,其实现是基于特定设备的,通常由屏幕硬件设备制造商 (OEM) 完成。主要用于确定合成缓冲区的最有效方式,SurfaceFlinger 在收集可见层的所有缓冲区后,便会询问 HWC 应如何进行合成。如果 HWC 将层合成类型标记为客户端合成(Client合成),则 SurfaceFli 阅读详情

注:本文档基于kk进行分析,着重于概念的精确定义和版本历史演变


一、关于hwc的介绍
广义的来讲是指利用硬件完成图像数据组合并显示的功能(能力),狭义的来讲就是指Hwcomposer HAL。


1、从广义的角度来分析,有几个概念需要精确定义(注意字母大小写差异)
(1)hwc:利用硬件完成图像数据组合并显示的功能(能力),具体到代码级别它是由多个类如SurfaceFlinger、HWComposer、DisplayDevice等协同完成的一种功能(能力)。
(2)HWComposer:硬件组合抽象层,介于SurfaceFlinger和HAL之间,具体到代码级别就是一个类,封装对于Hwcomposer HAL和Gralloc HAL的使用。根据官方的介绍,Hwcomposer HAL有1.0、1.1、1.2、1.3等多个版本,当为1.1及之后版本时,HWComposer不再需要使用Gralloc HAL。
(3)Hwcomposer:具体到代码级别就是Hwcomposer HAL
(4)hw composer:具体到平台硬件级别就是composer硬件,如BE。


2、从狭义的角度来分析,Hwcomposer HAL是从Honeycomb(3.0)引入,取代2.3的Overlay实现方式(但不是必须的),以降低代码实现及维护难度。它的实现版本经历了1.0到1.3的演变,在Jellybean MR1(4.2)实现的1.1版本,引入了硬件组合抽象层(HWComposer)的概念,向上对SurfaceFlinger完全隐藏了平台显示硬件特性,工作方式也修改成如下官方描述:
(1)SurfaceFlinger provides the HWC with a full list of layers, and asks, "how do you want to handle this?"
SurfaceFlinger提供所有软图层信息给HWComposer,询问其处理方式
(2)The HWC responds by marking each layer as "overlay" or "GLES composition"
HWComposer根据硬件性能决定是使用硬件图层合成器还是GPU合成
(3)SurfaceFlinger takes care of any GLES composition, passing the output buffer to HWC, and lets HWC handle the rest
SurfaceFlinger处理需要GPU合成的软图层,将结果递交给HWComposer做显示(通过Hwcomposer HAL),需要硬件图层合成器合成的软图层由HWComposer自行处理(通过Hwcomposer HAL)
分析:这样设计的好处是可以充分发挥硬件性能,同时降低SurfaceFlinger和硬件平台的耦合度(方便移植)


3、Hwcomposer HAL的大概演变
(1)pre-1.1
只支持一个Display
(2)1.1(example: exynos5)
不需要Gralloc HAL
支持Multiple Display
支持hotplug
增加HWC_FRAMEBUFFER_TARGET合成类型
(3)1.2(example: msm8960、msm8x26)
支持Alpha运算(setPlaneAlpha),之前由GPU完成
(4)1.3(example: msm8974)
支持Virtual Display图层合成,之前由GPU完成
支持crop(裁剪)


4、终端显示支持
从JellyBean(4.2)开始支持多屏幕,屏幕类型:
Primary Display:设备自带的屏幕,由SurfaceFlinger管理
External Display:通过HDMI连接,由SurfaceFlinger监控和管理
Virtual Display:这种方式是在4.2新增的(如基于Wifi Direct技术实现的Mircast),由DisplayManagerService监控和管理。Virtual Display可选择全部或部分的图层进行合成,在KitKat之前,Hwcomposer只能管理Primary Display的合成,Virtual Display使用GLES进行合成;从KitKat开始,Hwcomposer也能参与Virtual Display的合成。Virtual Display的显示数据也是由BufferQueue处理


5、hwc能完成的工作
(1)Full-screen games in portrait and landscape mode
(2)Full-screen video with closed captioning and playback control
(3)The home screen(compositing the status bar, system bar, application window, and live wallpapers)
(4)Protected video playback
(5)Multiple display support


二、引用
http://source.anddroid.com/devices/graphics.html
http://blog.youkuaiyun.com/jinzhuojun/article/details/17427491
http://www.cnblogs.com/samchen2009/p/3364327.html
http://blog.youkuaiyun.com/brucexu1978/article/details/8976781


The Android graphics path, in depth.pdf
Android Graphics And Android EGL.pdf
Android图形系统之HWComposer、ComposerHal、ComposerImpl、Composer、Hwc2::Composer实例总结(十四) 本篇目的:Android图形系统中,HWC特别的复杂,特别是HWComposer、ComposerImpl、Composer、Hwc2::Composer之间的关系,有种剪不断理还乱的感觉,通过几个演化例子,看清楚它本来的面目。 阅读详情

相关推荐

【Android】硬件合成器 HWC

硬件合成器(Hardware Composer, HWC)是Android显示系统的核心组件,负责高效管理图形层的合成与显示。作为SurfaceFlinger的关键模块,HWC通过硬件加速实现图层合成,显著提升性能并降低功耗。

lijian2017的博客 1974

Android图形之HWC(二十四)

HWC概述 HWC(hwcomposer)是Android中进行窗口(Layer)合成和显示的HAL层模块,其实现是特定于设备的,而且通常由显示设备制造商 (OEM)完成,为SurfaceFlinger服务提供硬件支持。 SurfaceFlinger可以使用OpenGL ES合成Layer,这需要占用并消耗GPU资源。大多数GPU都没有针对图层合成进行优化,当SurfaceFlinger通过GPU合成图层时,应用程序无法使用GPU进行自己的渲染。而HWC通过硬件设备进行图层合成,可以减...

Android系统攻城狮 9470

Android图形系统系统篇之HWC

HWC概述 HWC(hwcomposer)是Android中进行窗口(Layer)合成和显示的HAL层模块,其实现是特定于设备的,而且通常由显示设备制造商 (OEM)完成,为SurfaceFlinger服务提供硬件支持。 SurfaceFlinger可以使用OpenGL ES合成Layer,这需要占用并消耗GPU资源。大多数GPU都没有针对图层合成进行优化,当SurfaceFlinger通过GPU...

tli600605的专栏 1万+

Android下HWC以及drm_hwcomposer普法(上)

当VSync信号到来时,SurfaceFlinger被唤醒,处理Layer的新建,销毁和更新,并且为相应Layer设置期望的合成方式。所有Layer更新后,SurfaceFlinger调用validateDisplay,让HWC决定每个Layer的合成方式。

IT先森 6520

Android HWC

HWC(hwcomposer)是Android中进行窗口(Layer)合成和显示的HAL层模块,其实现是特定于设备的,而且通常由显示设备制造商 (OEM)完成,为SurfaceFlinger服务提供硬件支持。SurfaceFlinger可以使用OpenGL ES合成Layer,这需要占用并消耗GPU资源。大多数GPU都没有针对图层合成进行优化,当SurfaceFlinger通过GPU合成图层时,应用程序无法使用GPU进行自己的渲染。而HWC通过硬件设备进行图层合成,可以减轻GPU的合成压力。

liuning1985622的博客 1935

Android P 图形显示系统(一)硬件合成HWC2

Android P 图形显示系统(一)硬件合成HWC2 SurfaceFlinger概述 HWC2 概述 HWC 常规准则 HWC2 框架 HWC2 数据结构 图层Layer 类型 属性 显示屏Display HWC设备 composerDevice 接口指针 句柄Handle HWC合成服务 Client和Server的通信 IComposerClient.hal 接口 ICompo...

夕月风 1万+

android的hwc浅析【转】

https://blog.youkuaiyun.com/alien75/article/details/39290109 注:本文档基于kk进行分析,着重于概念的精确定义和版本历史演变 一、关于hwc的介绍 广义的来讲是指利用硬件完成图像数据组合并显示的功能(能力),狭义的来讲就是指Hwcomposer HAL。 1、从广义的角度来分析,有几个概念需要精确定义(注意字母大小写差异) (1)hwc:利...

weixin_30765475的博客 348

HWC与GPU混合渲染概念详解

然后,SurfaceFlinger 通过调用 setClientTarget 将该缓冲区提供给屏幕,以便缓冲区可以在屏幕上显示,或者进一步与未标记为进行 SurfaceFlinger 合成的图层合成。该框架假设,在热插拔第一个内部屏幕之后,所有热插拔操作都是在外部屏幕上进行,因此如果添加了更多内部屏幕,它们将被错误地归类为 Display.TYPE_HDMI,而不是 Display.TYPE_BUILT_IN。在显示缓冲区之前,HWC 会检查同步栅栏是否已发出信号,如果有,则显示缓冲区。

kevin's cache的专栏 2277

Android显示 HWC实现

和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、HWC概述二、HWC2的实现三、HWC Layer合成方式四、总结一、HWC概述HWC(hwcomposer)是Android中进行窗口(Layer)合成和显示的HAL层模块,其实现是特定于设备的,而且通常由显示设备制造商 (OEM)完成,为SurfaceFlinger服务提供硬件支持。SurfaceF...

程序员Android 1413

Android SurfaceFlinger——HWC图层合成器加载(四)

HWC,全称为 Hardware Composer,是 Android 系统中一个至关重要的组件,位于硬件抽象层(HAL)。它的主要职责是利用图形处理器(GPU)和其他硬件资源来高效地合成和显示屏幕上的多个图层(Layers)。HWC 的设计目标在于减轻 CPU 和 GPU 的负担,提升显示性能并降低功耗。

小旭的专栏 2171

Android SurfaceFlinger——HWC Adapter初始化(五)

上一篇文章对 HWC 硬件加载流程进行了分析,在加载完成后开始创建 HAL 实例时,首先需要对 hwc2_device_t 的适配器进行初始化,这里我们主要分析 HWC Adapter 的创建流程。

小旭的专栏 1184

Android Surface对应的Buffer怎么传递给HWC

因为要预研Android Video overlay,需要将SurfaceView对应的GraphicBuffer从drm_hwcomposer中剥离出来,这就需要们了解SurfaceView对应的GraphicBuffer的前世今生,以及它的数据流向以及在各个模块之间的对应关系。这里我们对该函数单独站看来分析下,ensureOutputLayer将创建Output layer,不是所有layer都会创建对应的hwc layer,创建出来的这些layer最后是要显示到屏幕上的。我先分析下,再告诉你!

IT先森 2525

逆向某团mtgsig参数时,我踩过的3个坑:从H5guard混淆到Python校验

本文详细解析了逆向某团mtgsig参数时遇到的三大挑战:H5guard混淆破解、环境补全检测与Python结果校验。通过实战案例,揭示了JavaScript加密算法的逆向技巧,包括控制流混淆拆解、隐蔽环境检测点规避以及跨语言校验的解决方案,为开发者提供了一套完整的逆向工程避坑指南。

weixin_27722377的博客 1061

android hwc设计思路

本文介绍了Displayd系统对Android显示框架的扩展设计。Displayd通过解耦显示控制与图层管理,解决了HWC 1.x架构中存在的代码耦合问题。系统核心包括DeviceManager设备管理类、HdmiDevice HDMI属性适配模块以及HWCProxy通信接口。Displayd支持分辨率切换、切边、3D模式、HDR等高级功能,实现了多显示设备的热插拔管理。HWCProxy定义了与HWC的通信协议,包括设备切换、显示模式设置、数据空间控制等接口。

懒洋洋也在奋斗哦 1156

小米万兆路由器里的Docker安装可道云(Kodexplorer)私有网盘

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装[可道云](http://kodcloud.com/)(Kodexplorer)私有网盘。

engchina的专栏 1万+

从Mate到Mate40 Pro+:华为旗舰核心配置演进与选购避坑指南

本文回顾了华为Mate系列从初代到Mate40 Pro+的核心配置演进历程,重点分析了处理器性能、影像系统、屏幕设计及续航快充的技术突破。针对选购需求,提供了区分版本、5G选择及存储配置的实用避坑建议,帮助消费者明智选择华为旗舰机型。

weixin_30015371的博客 494

android多媒体框架介绍(四)显示图形系统之hwc叠加器

前面我们讲解了整个android图形显示系统的主要模块关系,和framebuffer,接下来我们讲解hwc叠加模块。 Android7.0提供了HWC和HWC2两个版本,到了Android8.0就都默认使用HWC2,我们接下来的介绍都是基于HWC2的。 文章目录一、hwc模块定义与规格场景分析hwc模块定义---The Hardware Composer硬件叠加器常见的hwc典型规格---叠加支持/回调事件hwc基础模块抽象---device/display/layerDevice类关键分析Display类

runafterhit的博客 8254

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 493

Android下HWC以及drm_hwcomposer普法(下)

Android下HWC以及drm_hwcomposer普法(下)引言不容易啊,写到这里。经过前面的普法(上),我相信童鞋们对HWC和drm_hwcomposer已经有了一定的认知了。谷歌出品,必须精品。我们前面的篇章见分析到啥来了,对了分析到了HwcDisplay::init,然后设置Backend后端来着!

IT先森 4658

[比赛]新冠期间饿了么骑士行为预估-数据理解

写在前面 饿了么的比赛的赛题数据理解。 一、骑士行为数据 courier_id 骑士id wave_index 波次index tracking_id 订单id courier_wave_start_lng 波次起始时刻骑士位置 courier_wave_...

Helslie的博客 2941

洛达开发--AB1585 PC 工具介绍

洛达常用的PC开发工具包括三款:1)IOT_Flash_Tool是固件烧写工具,支持USB/UART接口下载,需通过断电重启完成烧录;2)EPT是图形化PinMux配置工具,适用于MT25x3/MT768x等芯片的引脚复用设置;3)ATK是综合开发套件,包含日志工具、配置工具、OTA工具和实验室测试工具等组件。这三款工具分别针对固件烧录、硬件配置和系统调试等不同开发环节,形成完整的开发工具链。

Joon2020的博客 669

Android开发者必看:HWC硬件合成器实战调试技巧与常见问题排查

本文为Android开发者提供了HWC硬件合成器的实战调试技巧与常见问题排查指南。通过解析HWC合成决策机制,详细介绍了使用dumpsys、logcat、systrace/Perfetto等核心工具分析图层合成类型、定位卡顿、撕裂及功耗问题的具体方法,并针对视频播放卡顿、屏幕撕裂等典型场景给出了系统性的排查步骤与解决思路。

cream的博客 963

多目标优化AI Agent:增强LLM的复杂决策能力

在人工智能领域,尤其是自然语言处理(NLP)和大语言模型(LLM)的应用中,决策问题往往涉及多个目标的平衡与优化。例如,在智能客服系统中,既要提高客户满意度,又要降低运营成本;在自动驾驶中,既要确保安全,又要追求行驶效率。传统的单目标优化方法难以满足这种复杂场景的需求,因此多目标优化成为了一种必然趋势。AI Agent是一种智能系统,能够通过感知环境、处理信息并采取行动来实现特定目标。它可以是一个软件程序,也可以是一个物理设备。NSGA-II:一种基于群体的多目标优化算法,通过遗传算法的思想进行迭代优化。

AI天才研究院 1299
上一篇: 高通方案camera子系统daemon存在原因
下一篇: 流驱动XXX_Init中分配内存引起的问题
alien75
博客等级 码龄25年 195粉丝 116原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值