注:本文档基于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.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

android的hwc浅析相关推荐

  1. 键盘android,Android键盘系统浅析(上)

    Android键盘系统浅析(下) 通过往着几个文件中插桩,从模拟器的启动日志,我们可以更直观的开到整个Android键盘系统的建立: -------.. I/SystemServer(   57): ...

  2. Android应用框架浅析

    http://blog.csdn.net/yanbober/article/category/3206943 Android应用层View绘制流程与源码分析   http://blog.csdn.ne ...

  3. android 动画 alpha,浅析Android 动画之AlphaAnimation应用操作

    作为程序员不管是为了什么,或多或少都会模仿其他人的一些手法来达到效果,程序员都必须要做出各种绚丽的动画画面来吸引大家,下面是爱站技术频道小编浅析 动画之AlphaAnimation应用操作,一起来了解 ...

  4. Android Clean 架构浅析

    该原创文章首发于微信公众号"字节流动" Android 常用的架构主要有 MVC,MVP,MVVM 以及 Clean .以上架构设计模式没有绝对的优劣之分,关键要看具体的应用场景. ...

  5. Android Binder机制浅析及AIDL的使用

    参考 轻松理解 Android Binder,只需要读这一篇 图文详解 Android Binder跨进程通信的原理 Android中的Parcel是什么 Android Binder IPC通信机制 ...

  6. Android L 漫游浅析

    这篇文章主要是分析在Android L 源代码中对手机漫游的处理.当然我这里所说的漫游指的是国际漫游.通常我们判断手机是否在国际漫游,第一个想法就是比较网络上获取的MCC+MNC是否与手机中的IMSI ...

  7. android camera工程师,浅析Android Camera架构

    本博文是基于Android 4.4讲解 1.application 层: 当我们Android工程师想打开camera时通常直接调用Camera.java中的  Camer.open(cameraId ...

  8. Android.bp 语法浅析-Android10.0编译系统(八)

    摘要:Blueprint解析Android.bp到ninja的代码流程时如何走的? 阅读本文大约需要花费18分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Andro ...

  9. Android 蓝牙开发浅析

    Android Bluetooth API 翻译http://wenku.baidu.com/view/518414b069dc5022aaea007b.html?from=rec&pos=2 ...

最新文章

  1. 计算机科学与技术真的会掉头发吗,大学“最辛苦”的三个专业,“脱发率”很高,毕业后却都很吃香!...
  2. 禅道项目管理软件的命令行入口
  3. Spring 核心容器类BeanDefinition
  4. java判断方法_Java常用的判断方法
  5. vb 软件时间限制_带时间限制的软件加密锁
  6. python刚出来多少薪资-作为Python程序员,薪资一般是多少?
  7. 同花顺开放接口api_接口大师,即刻构建你的OpenAPI+开放平台
  8. PHP - 如何解析HTML文件
  9. DataStore的基础用法
  10. 只需3天即可启动应用发布营销核对清单
  11. 直播系统解决方案:直播平台如何开发搭建
  12. JavaScript 实现雪花效果
  13. 使用开源手机邮箱项目——mujMail
  14. win10硬盘锁怎么解除_win10系统中BitLocker加密磁盘无法解锁怎么办?
  15. 记录下我磕磕碰碰的三个月找工作经历,绝对干货
  16. 服务器被腾讯云助手告警通知有木马文件
  17. VS2017+VUE创建项目爬坑
  18. 本科毕业设计 linux,GitHub - xdlinux/xdba-thesis: 西电本科毕业设计论文LaTeX模板宏包...
  19. C语言实现数组的排序——冒泡排序
  20. 桌面虚拟化解决大学生就业难

热门文章

  1. Redis高并发场景下秒杀超卖解决
  2. keras实现lenet5
  3. Reliable Evaluation of Adversarial Robustness with an Ensemble of Diverse Parameter-free attack
  4. 阿里云注册及创建工作空间
  5. eigen向量计算_Eigen之矩阵与向量的乘积
  6. 榕树贷款JavaWeb 项目
  7. V19-WiFi抓log
  8. 我的计算机没有本地用户名,我的电脑没有本地连接怎么办
  9. 初学Java:为什么打印希腊字母时会有问号“乱入”
  10. 揭秘“宫廷医案的养生法”,《养生堂》御品膏方专场节目