标签:Layer 服务 Window Surface SurfaceFlinger SharedBufferStack 缓冲区 Android
一、SurfaceFlinger是什么?
SurfaceFlinger接受缓冲区,对图形数据进行合成,然后发送到屏幕渲染。
WindowManager与SurfaceFlinger关系
WindowManager为SurfaceFlinger提供缓冲区和窗口元数据,SurfaceFlinger可使用这些信息将Surface合成到屏幕上。
二、SurfaceFlinger做了哪些事儿?
- 响应客户端事件,创建Layer,并与客户端Surface建立连接。
- 接收客户端数据及属性,修改Layer属性,如:大小、颜色、透明度等。
- 将创建的Layer内容刷新到屏幕上。
- 维持Layer序列,将Layer最终输出做出裁剪计算。
三、App与SurfaceFlinger通信
Surface和Layer(FrameBuffer)关系
在应用客户端创建一个Window,同时创建一个Surface,在SurfaceFlinger服务中会创建一个与之对应的Layer(FrameBuffer)。
应用与SurfaceFlinger通信
应用与SurfaceFlinger间是两个不同进程,不同进程间IPC通信几种方式:Socket、管道、共享内存。
在Android中,应用与SurfaceFlinger间IPC通信使用共享内存实现的,每个应用都会创建一个SharedClient,在SharedClient中有32个SharedBufferStack,每个SharedBufferStack对应应用中的一个Surface,正常一个Surface对应一个Window。
在SharedBufferStack中有N个缓冲区,在Android 4.1之前每个SharedBufferStack有2个缓冲区Buffer,在Android 4.1之后有3个缓冲区Buffer,这就是常说的二级缓冲和三级缓冲。
在应用中最多可以有多少个Window?
因为,一个Window对应一个Surface,一个Surface对应SharedClient中一个SharedBufferStack,在SharedClient中最多有32个SharedBufferStack,也就是在应用中最多有32个Window。
标签:Layer,服务,Window,Surface,SurfaceFlinger,SharedBufferStack,缓冲区,Android 来源: https://www.cnblogs.com/naray/p/15344164.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。