android的hwc浅析【转】

https://blog.csdn.net/alien75/article/details/39290109

注:本文档基于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.htmlhttp://blog.csdn.net/jinzhuojun/article/details/17427491

http://www.cnblogs.com/samchen2009/p/3364327.html

http://blog.csdn.net/brucexu1978/article/details/8976781

The Android graphics path, in depth.pdf Android Graphics And Android EGL.pdf

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

数据“厨师”ETL竞赛:今天的数据能做些什么?

它们是一个烹饪比赛的电视系列节目,享有盛名的厨师们撸起袖子,争相做出完美的菜肴。基于一个设定的主题,结合厨师们的经验,创造力和想象力,将可能有问题的食材转化为最...

1975
来自专栏IT派

7月Python最佳开源项目Top 10

【导读】七月就要结束了,小编为大家整理了本月 Python 最受欢迎的十大开源项目。他山之石,可以攻玉,爱好Python的朋友们一起学习Github上的优秀项目...

573
来自专栏AI科技评论

学界 | 谷歌推出有界负载的一致性哈希算法,解决服务器负载均衡问题

studyinsweden AI科技评论按:运行大型Web服务需要负载平衡,例如内容托管。通常做法是在多个服务器之间均匀分发客户端,以免任何服务器超负荷运行。...

3709
来自专栏专知

【干货】如何为论文设计精致的插图

【导读】论文是经过数月或数年实验得到的数据的积淀。 但是,原始数据或描述本身并不能成为好的期刊文章。 数据可视化工具和免费绘图软件能帮助科学家阐述他们的工作。 ...

1393
来自专栏AI研习社

数据太大爆内存怎么办?七条解决思路 | 机器学习开发手册

Jason Brownlee 在研究、应用机器学习算法的经历中,相信大伙儿经常遇到数据集太大、内存不够用的情况。 这引出一系列问题: 怎么加载十几、几十 GB...

36010
来自专栏邹成卓的专栏

Web AR 技术调研笔记

去年年末集中学习了一下已经存在的web ar 相关的项目和技术,并整理和试用了一下各项目的Demo,为了备忘记录了一份笔记。

2.5K4
来自专栏数据小魔方

R语言数据清洗实战——世界濒危遗产地数据爬取案例

最近重复新翻阅R语言领域唯一一本关于网络数据采集的参考书——《基于R语言的自动数据收集》,开篇就是一个数据爬取的案例。 尽管之前已经粗略的看过一遍,但是仍感书中...

4126
来自专栏量子位

奇怪的拍立得,按下快门,你就被AI变成一张简笔涂鸦 | 补童年·有代码

902
来自专栏企鹅号快讯

计算机高频知识点详解

重磅!福建农信社招863人,大专/往届均可报考! 福建农信社报考须知:我是笔试类还是免笔试类? 紧急通知 | 农信社笔试内容大变动 01 计算机中的信息表示 1...

1785
来自专栏新智元

【自动编译代码】陈天奇团队TVM重磅更新:直接在浏览器使用GPU

【新智元导读】华盛顿大学陈天奇团队的深度学习自动优化代码生成器TVM发布更新,不需要写一行Javascprit代码,直接就能将深度学习模型编译到WebGL,然后...

3035

扫码关注云+社区