11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析
4.1 APP跟SurfaceFlinger之间的重要数据结构
一个应用程序有一个或者多个surface(一般只有一个),一个surface有一个或者多个buffer,这些buffer需要应用向surfaceflinger申请;
在surfaceflinger中用client表示每一个应用程序,client中用layer结构来表示应用程序的surfaceControl
layer中含有mProducer生产者和mSurfaceFlingerCinsumer消费者,生产者和消费者有同一个mCore(BufferQueueCore),它有一个BufferSlot [64] mSlots数组,数组的每一项表示一个buffer(数组每一项是个结构体,里面有一项mGraphicBuffer,用其来表示buffer),从数组可以看到每个应用程序最多有64个buffer
以上所涉及的都是SurfaceFlinger中所涉及的数据结构,下面分析APP中涉及的应用结构:
sp<SurfaceComposerClient> client用来表示和SurfaceFlinger的连接,其内部有一些mClient用来指向SurfaceFlinger中对应的client
sp<SurfaceControl> surfaceControl 用来管理应用程序的surface,通过surfaceControl->getSurface()获得surface,surfaceControl 通过client得到
Surface里有一个数组BufferSlot mSlots[64],这个数组和SurfaceFlinger中BufferSlot [64] mSlots一样对应,两者指向的应该是同一块内存区域
具体各个数据结构流程如下:
4.2 APP创建SurfaceFlinger客户端(client)的过程
4.3 APP申请创建Surface的过程
4.4 APP申请(lock)Buffer的过程_框架
获得surface中的buffer过程:
(1)向生产者申请:(后面的步骤是在SurfaceFlinger中进行)查看自己的mslots中有无空余项,若无,向Gralloc HAL申请,实质是通过Ashmem驱动申请,并返回fd给APP(通过binder返回)
(2)应用程序获得fd,mmap获得地址,这些信息会放到mslots中
上面说的步骤是在APP中进行
4.5 APP申请(lock)Buffer的过程_分配buffer
4.6 APP申请(lock)Buffer的过程_获得buffer信息
4.7 APP提交(unlockAndPost)Buffer的过程_框架
4.8 APP提交(unlockAndPost)Buffer的过程_消费者创建过程
4.9 APP提交(unlockAndPost)Buffer的过程_提交过程
11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析的更多相关文章
- 11.1 Android显示系统框架_framebuffer原理及改进
1. Android显示系统框架Android Graphic UI with GPU Hardware Accelerationhttps://community.nxp.com/docs/DOC- ...
- 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.3 Android显示系统框架_最简单的surface测试程序
APP有一个surface(界面),其有多个buffer用来存放界面数据,这些buffer是向surfaceflinger申请的: 因此我们编写的surface测试程序步骤: (1)获得surface ...
- Android 显示系统:OpenGL简介和Gralloc代码分析
一.OpenGL ES与EGL Android的GUI系统是基于OpenGL/EGL来实现的. 由于OpenGL是通用函数库,在不同平台系统上需要被“本土化”——把它与具体平台的窗口系统建立起关联,F ...
- RT Thread的SPI设备驱动框架的使用以及内部机制分析
注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...
- Android 显示系统:SurfaceFlinger详解
一.Android系统启动 Android设备从按下开机键到桌面显示画面,大致过程如下图流程: 开机显示桌面.从桌面点击 App 图标到 Activity显示在屏幕上的过程又是怎样的呢?下面介绍And ...
- Android动画学习(一)——Android动画系统框架简介
2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...
随机推荐
- win10 WmiPrvSE.exe WMI Provider 占用CPU过高的问题
重启 Windows Management Instrumentation 服务 重启 WMI service. + ,输入: "services.msc" ,按 . 在 服务 ...
- cogs 50. [NOIP2002] 选数
50. [NOIP2002] 选数 ★ 输入文件:choose.in 输出文件:choose.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述]: 已知 n 个整数 ...
- amaze ui各个模块简单说明
amaze ui各个模块简单说明 导航添加依据 http://amazeui.org/css/ 下面内容属学习笔记,如有理解偏差和错误请留言相告,感谢!* =(官网这块写的很详细) 一.基本样式 1 ...
- spark network-common
概述 Spark底层使用netty作为节点间通信的桥梁.其实现在common/network-common包中.common/network-common包主要是对netty进行了一层封装,主要是定义 ...
- 经典的横线中间文字css布局---flex布局
html: <div class="title"> <div class="line"></div> <div cla ...
- LuoguP2764 最小路径覆盖问题(最大流)
题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开 ...
- HTML中行内元素与块级元素有哪些及区别
二.行内元素与块级元素有什么不同? 块级元素和行内元素的区别是,块级元素会占一行显示,而行内元素可以在一行并排显示. 通过样式控制,它们可以相互转换. 1.尺寸-块级元素和行内元素之间的一个重要的不同 ...
- 项目EasyUi和JS中遇到的问题总汇
近期因为项目用到EasyUi,曾经仅仅是听过,可是没有详细用过.仅仅能一边学一边做.如今将做的过程中遇到的一些难点总结例如以下,以备后用: EsayUi使用: Json格式:key:value,key ...
- C++ static 静态成员变量 和 静态成员函数
静态(static) 成员 变量 1• 静态成员变量的初始化须要在类外完毕. 2• 静态成员不属于详细的某个对象,而属于整个类: 3• 全部对象共享本类中的静态成员: 4• 静态成员最好直接通 ...
- gullo.me 的 natvps
gullo.me 的 natvps 1. 在下面的地址中输入内网 IP,查看许可的网络资源 https://hosting.gullo.me/plugin/support_manager/knowle ...