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动画,之前完全没接触过这部分,直接给懵了,当然其 ...
随机推荐
- Top 22 Free Responsive HTML5 Admin & Dashboard Templates 2018
Top 22 Free Responsive HTML5 Admin & Dashboard Templates 2018 May 18, 2018 Alex Ivanovs Website ...
- 从设计到实现,一步步教你实现Android-Universal-ImageLoader-辅助类
通过前面几篇博文.我们分析了 AUI 的缓存.工具类.显示与载入这几个方面的代码.今天呢,我们继续研究 AUI 的源代码,学习当中的核心辅助工具类. 希望大家能在里面学到东西哈. Download 要 ...
- IOS 以随意点为圆心 旋转UIView
环绕底边中点旋转 UIView本身是支持旋转的,能够用UIView.transform属性实现旋转. The origin of the transform i ...
- 解决切换场景时NGUI图集资源未释放的问题
使用unity3d编辑器,在切换场景的时候.NGUI的图集没有释放造成内存不足游戏闪退的问题. 默认情况下,unity3d切换场景之后会释放不用的内存,即内部会调用Resources.UnloadUn ...
- android图像处理系列之五-- 给图片添加边框(中)
前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...
- javascript中易犯的错误有哪些
javascript中易犯的错误有哪些 一.总结 一句话总结: 比如循环中函数的使用 函数中this的指向谁(函数中this的使用) 变量的作用域 1.this.timer = setTimeout( ...
- 31.Intellij idea 的maven项目如何通过maven自动下载jar包
转自:https://blog.csdn.net/u012851114/article/details/81872981 maven项目自动加载jar包 所需工具如下: Intellij IDEA 1 ...
- CSS3的属性选择器
CSS3中新增了许多选择器,今天零度给大家说说CSS3的属性选择器. 与CSS2相比,CSS3新增了3种属性选择器:[attr^=value].[attr$=value].[attr*=value]: ...
- 83.const与类
const常量对象,无法改变数据,只能引用尾部带const方法 类的成员如果是const,可以默认初始化,也可以构造的初始化,不可在构造函数内部初始化 类中的const成员,无法直接修改,可以间接修改 ...
- POJ 1989 贪心
题意: 思路: 从前到后扫一遍 如果k个数都出现过了 ans++ 从当前接着判断 最后答案就是ans+1 //By SiriusRen #include <cstdio> using na ...