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
android的hwc浅析【转】的更多相关文章
- Android源码浅析(六)——SecureCRT远程连接Linux,配置端点和字节码
Android源码浅析(六)--SecureCRT远程连接Linux,配置端点和字节码 需要编译源码的同学,一般都是win+虚拟机吧,但是再虚拟机里体验并不是很好,所有市面上有很多的软件能够做到在wi ...
- Android源码浅析(五)——关于定制系统,如何给你的Android应用系统签名
Android源码浅析(五)--关于定制系统,如何给你的Android应用系统签名 今天来点简单的我相信很多定制系统的同学都会有一些特定功能的需求,比如 修改系统时间 静默安装 执行某shell命令 ...
- Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...
- Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机
Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...
- Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境
Android源码浅析(二)--Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境 接着上篇,上片主要是介绍了一些安装工具的小知识点Andr ...
- Android源码浅析(一)——VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置
Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置 最近地方工作,就是接触源码的东西了,所以好东西还是要分享,系列开了这 ...
- Android 自定义 View 浅析
Android 自定义 View 浅析 概括 说到自定义 View ,就一定得说说 android 系统的UI绘制流程.再说这个流程之前,我们先看一下在每一个 activity 页面中我们的布局 ui ...
- Android应用框架浅析
http://blog.csdn.net/yanbober/article/category/3206943 Android应用层View绘制流程与源码分析 http://blog.csdn.ne ...
- Android Otto框架浅析
今天要介绍的是一个Android中使用得比較多的android 事件总线 EventBus模式的一个框架Otto. Otto 官网:http://square.github.io/otto/ 一.An ...
随机推荐
- springboot 多模块 -- 将 dao(mybatis) 拆分出去
前言: 以前我们在建项目的时候, 要么将所有的package建在一个项目里面, 在处理引用的时候, 真的很方便. 不用担心, 有些东西配置不到或者读取不到. 或者, 将package独立出去, 到一个 ...
- IDEA SQL dialect detection和Duplicated Code检测关闭
IDEA似乎做的太多,对于Mybatis文件中的SQL语法检查可能就没有太大的必要性,Duplicated Code检测其实非常好,但是我测试使用JDBC代码的时候一堆波浪线让我很不舒服 因此将这两个 ...
- WPF绑定的ListBox获取ListBoxItem及GoToState应用
现公司项目中需要制作一个扇形菜单,菜单项是用ListBox重写Style实现的,其数据是绑定的.菜单的每一项都有Normal,MouseOver和Selected三种状态,这三种状态当然可以通过鼠标移 ...
- Flutter踩坑日记:Tab导航栏保持子页面状态
最近应邀票圈小伙伴躺坑Flutter,项目初步雏形完结.以原来的工具链版本为基础做了Flutter版本,不过后面还是需要优化下项目接入Redux,以及扩展一些Native方法. 这里记录一下在开发过程 ...
- CRM项目图形交互界面设计
由于我们组在刚开始的时候 ,进度比较快的!老师本来是打算最后给我们用统一的学校已经封装好的界面给我们的!看着我们的现实都写完了!老师就提前把界面都给我们了!但是觉得界面一般,不怎么好看!我们就全部都是 ...
- 【LeetCode题解】24_两两交换链表中的节点(Swap-Nodes-in-Pairs)
目录 描述 解法一:迭代 思路 Java 实现 Python 实现 复杂度分析 解法二:递归(不满足空间复杂度要求) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解 ...
- 21.Module 的加载实现
Module 的加载实现 Module 的加载实现 上一章介绍了模块的语法,本章介绍如何在浏览器和 Node 之中加载 ES6 模块,以及实际开发中经常遇到的一些问题(比如循环加载). 浏览器加载 传 ...
- [转]Magento2命令行配置之性能测试生成数据
本文转自:https://blog.csdn.net/xz_src/article/details/72799539 性能测试数据概述 使用Magento性能工具包或其他工具进行性能测试,你必定产生大 ...
- 关于winform文本框怎么实现html的placeholder效果
winfrom默认是不支持这种操作的,此时需要重写控件操作,具体代码如下: public class TextBoxEx : TextBox { public String PlaceHolderSt ...
- css布局记录之双飞翼布局、圣杯布局
双飞翼布局和圣杯布局是比较常用的布局方式,都是为了实现一行三列,并且两侧列固定宽度,中间列宽度自适应的效果:直接上代码记录下: <!DOCTYPE html> <html lang= ...