11.1 Android显示系统框架_framebuffer原理及改进
1. Android显示系统框架
Android Graphic UI with GPU Hardware Acceleration
https://community.nxp.com/docs/DOC-93612
a. 显示驱动framebuffer的原理及改进
只有一个FrameBuffer的缺点:
(1)如果App写入FB的速度慢,LCD图像变化慢
(2)如果App写FB速度不快不慢,LCD图像会闪烁
因此,在仅使用一个FB的基础上做出改进,使用多个FB来改进:
(1)DisplayController使用FB0
(2)APP写FB1
(3)DisplayController使用FB1
(4)APP写FB0
(5)重复以上步骤
最绘制图片方面:以前在linux中是对在FB中绘制整个空间的数据,如果需要绘制手机界面,步骤如下:状态栏、导航栏、背景、图标;每个界面都需要上述四个步骤
在Android中引入层的概念:状态栏和导航栏为一层、背景为一层、图片为一层,最后把绘制好的层合并,合并使用HardwareComposer
HWC称为硬件合并
驱动支持HWC:每一层对应一个驱动/dev/fbx,APP操作某一层,直接写对应的FrameBuffer,硬件会自动合并它们(比如我们的4412的fb0~fb4就是对应的LCD)
b. 多任务系统的显示: 必定有一个显示管理者
APP不能直接访问LCD驱动程序,有一个称为SurfaceFlinger(统一操作显示设备)的管理者,其功能:
(1)SurfaceFlinger给APP提供buffer,给APP存放界面(这样APP和SurfaceFlinger之间就不需要传输buffer了)
a、SurfaceFlinger通过gralloc模块(HAL)向ashmem(驱动层)申请内存
b、得到一个fd,用这个文件句柄描述申请的buffer
c、通过binder把fd传给APP
d、APP通过mmap(fd)之后直接访问buffer
(2)APP1/APP 2/APP3 把各自的界面发给SurfaceFlinger,它根据层次、大小进行合成显示;
a、根据各个界面的Z值(高度,相对XY坐标理解)决定前后顺序,Z值肯定是由WindowManagerService确定
b、把这些排序后的buffer传给HardwareComposer模块,如果硬件不支持该模块或者层数超过了模块的限制,用软件GL(graphicLibrary)处理
(3)当HardwareComposer不能处理(无硬件/超过硬件支持最大层数),使用GL来处理
android系统通过libEGL.so来加载硬件GL库或者软件GL库(引脚GL库可能是对GPU的访问),除了SurfaceFlinger可以通过libEGL.so来加载GL库之外,APP也可以libEGL.so库来使用GL库

11.1 Android显示系统框架_framebuffer原理及改进的更多相关文章
- 11.5 Android显示系统框架_Vsync机制_黄油计划_三个方法改进显示系统
5. Vsync机制5.1 黄油计划_三个方法改进显示系统vsync, triple buffering, vsync虚拟化 参考文档:林学森 <深入理解Android内核设计思想>第2版 ...
- 11.5 Android显示系统框架_Vsync机制_代码分析
5.5 surfaceflinger对vsync的处理buffer状态图画得不错:http://ju.outofmemory.cn/entry/146313 android设备可能连有多个显示器,AP ...
- 11.2 Android显示系统框架_android源码禁用hwc和GPU
2. 修改tiny4412_Android源码禁用hwc和gpu(厂家不会提供hwc和gpu的源代码,没有源代码就没法分析了,因此在这里禁用该功能并用软件库实现)最终源码: git clone htt ...
- 11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析
4.1 APP跟SurfaceFlinger之间的重要数据结构 一个应用程序有一个或者多个surface(一般只有一个),一个surface有一个或者多个buffer,这些buffer需要应用向sur ...
- 11.3 Android显示系统框架_最简单的surface测试程序
APP有一个surface(界面),其有多个buffer用来存放界面数据,这些buffer是向surfaceflinger申请的: 因此我们编写的surface测试程序步骤: (1)获得surface ...
- (转)android平台phonegap框架实现原理
(原文)http://blog.csdn.net/wuruixn/article/details/7405175 android平台phonegap框架实现原理 分类: Android2012-03- ...
- Android 显示系统:SurfaceFlinger详解
一.Android系统启动 Android设备从按下开机键到桌面显示画面,大致过程如下图流程: 开机显示桌面.从桌面点击 App 图标到 Activity显示在屏幕上的过程又是怎样的呢?下面介绍And ...
- Android动画学习(一)——Android动画系统框架简介
2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...
- Android的系统框架的深入认识
Android采用层次化系统架构,官方公布的标准架构如下图所示.Android由底层往上分为4个主要功能层,分别是linux内核层(Linux Kernel),系统运行时库层(Libraries和An ...
随机推荐
- CentOS 7.0yum安装MySQL
CentOS 7.0yum安装MySQL 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noar ...
- Cisco Works 2000 网络管理软件安装、配置全过程
下面是在windows 2000 server 下安装ciscoworks 2000的过程.(附件中是标准avi格式文件,由于上传附件大小限制,更多内容见Sina播客) 浏览全部原创视频请见: htt ...
- Regularized logistic regression
要解决的问题是,给出了具有2个特征的一堆训练数据集,从该数据的分布可以看出它们并不是非常线性可分的,因此很有必要用更高阶的特征来模拟.例如本程序中个就用到了特征值的6次方来求解. Data To be ...
- POj 2159 Dividing
Dividing Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 71453 Accepted: 18631 Descri ...
- Snapshot Standby
INTRODUCTION Snapshot standby database是ORACLE 11g的新特性.允许Physical standby短时间的使用read write模式. Snapshot ...
- myBatis通过逗号分隔字符串,foreach
前言 当数据库里存储的值是以逗号分隔格式存储的字符串时. 数据格式如下: id name ids 1 张三 a,b,c 2 李四 c,d,e 我们拿到的条件参数是:b,e 1.后台通 ...
- Python day4知识回顾
# -*- coding: utf_8 _*_# Author:Vi#字典是无序的 info = { 'student001':"DIO", 'student002':" ...
- Swift具体解释之三----------函数(你想知道的都在这里)
函数(你想知道的都在这里) 注:本文为作者自己总结.过于基础的就不再赘述 ,都是亲自測试的结果.如有错误或者遗漏的地方.欢迎指正.一起学习. 1. 函数的简单定义和调用 简单的无參函数就不再赘述 , ...
- 四、Docker+Tomcat
原文:四.Docker+Tomcat 一.下载Tomcat镜像 具体可以search 搜索tomcat 相关镜像 docker pull sonodar/jdk8-tomcat8 二.创建容器 doc ...
- 数据库SQL Server2012笔记(七)——java 程序操作sql server
1.crud(增删改查)介绍:create/retrieve/update/delete 2.JDBC介绍 1)JDBC(java database connectivity,java数据库连接) 2 ...