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原理及改进的更多相关文章

  1. 11.5 Android显示系统框架_Vsync机制_黄油计划_三个方法改进显示系统

    5. Vsync机制5.1 黄油计划_三个方法改进显示系统vsync, triple buffering, vsync虚拟化 参考文档:林学森 <深入理解Android内核设计思想>第2版 ...

  2. 11.5 Android显示系统框架_Vsync机制_代码分析

    5.5 surfaceflinger对vsync的处理buffer状态图画得不错:http://ju.outofmemory.cn/entry/146313 android设备可能连有多个显示器,AP ...

  3. 11.2 Android显示系统框架_android源码禁用hwc和GPU

    2. 修改tiny4412_Android源码禁用hwc和gpu(厂家不会提供hwc和gpu的源代码,没有源代码就没法分析了,因此在这里禁用该功能并用软件库实现)最终源码: git clone htt ...

  4. 11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析

    4.1 APP跟SurfaceFlinger之间的重要数据结构 一个应用程序有一个或者多个surface(一般只有一个),一个surface有一个或者多个buffer,这些buffer需要应用向sur ...

  5. 11.3 Android显示系统框架_最简单的surface测试程序

    APP有一个surface(界面),其有多个buffer用来存放界面数据,这些buffer是向surfaceflinger申请的: 因此我们编写的surface测试程序步骤: (1)获得surface ...

  6. (转)android平台phonegap框架实现原理

    (原文)http://blog.csdn.net/wuruixn/article/details/7405175 android平台phonegap框架实现原理 分类: Android2012-03- ...

  7. Android 显示系统:SurfaceFlinger详解

    一.Android系统启动 Android设备从按下开机键到桌面显示画面,大致过程如下图流程: 开机显示桌面.从桌面点击 App 图标到 Activity显示在屏幕上的过程又是怎样的呢?下面介绍And ...

  8. Android动画学习(一)——Android动画系统框架简介

    2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...

  9. Android的系统框架的深入认识

    Android采用层次化系统架构,官方公布的标准架构如下图所示.Android由底层往上分为4个主要功能层,分别是linux内核层(Linux Kernel),系统运行时库层(Libraries和An ...

随机推荐

  1. unity 获取物体尺寸

     unity3d中获得物体的size 以size的x方向为例 1:gameObject.renderer.bounds.size.x;//这个值的结果真实反应出有MeshRenderer这个组件的 ...

  2. 面向对象(OO)基础

    面向对象,英文Object-Oriented,简称OO),另外相关的还有:面向对象分析(Object-Oriented Analysis,OOA) 面向对象设计(Object-Oriented Des ...

  3. ElasticSearch vs Lucene多维度分析对比

    ElasticSearch vs Lucene的关系,简单一句话就是,成品与半成品的关系. (1)Lucene专注于搜索底层的建设,而ElasticSearch专注于企业应用.   (2)Luncen ...

  4. Gym 100952 A. Who is the winner?

    A. Who is the winner? time limit per test 1 second memory limit per test 64 megabytes input standard ...

  5. POJ 2079 Triangle 旋转卡壳求最大三角形

    求点集中面积最大的三角形...显然这个三角形在凸包上... 但是旋转卡壳一般都是一个点卡另一个点...这种要求三角形的情况就要枚举底边的两个点 卡另一个点了... 随着底边点的递增, 最大点显然是在以 ...

  6. exit---退出目前的shell

    exit命令   exit命令同于退出shell,并返回给定值.在shell脚本中可以终止当前脚本执行.执行exit可使shell以指定的状态值退出.若不设置状态值参数,则shell以预设值退出.状态 ...

  7. Python datetime time 等时间 日期 之间的计算和相互转化

    from datetime import datetime, date, timedelta, timezone from time import time, ctime, localtime, st ...

  8. C# WPF开源控件库MaterialDesign介绍

    介绍 1.由于前端时间萌发开发一个基础架构得WPF框架得想法, 然后考虑到一些界面层元素统一, 然后就无意间在GitHub上发现一个开源WPF UI, 于是下载下来了感觉不错. 官网地址:http:/ ...

  9. CSS3:元素的边框、背景和大小

    边框 和边框相关的属性例如以下. border-width 用于设置边框的宽度,可选择包含: 1)<长度值>:将边框宽度设为以CSS度量单位(如em.px.cm)表达的长度值. 2)< ...

  10. POJ 题目1145/UVA题目112 Tree Summing(二叉树遍历)

    Tree Summing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8132   Accepted: 1949 Desc ...