Android图形显示系统
Android图形显示系统是Android比较重要的一个子系统,和很多其他子系统的关联紧密。 Android图形系统比较复杂,这里我们从整体上理一遍,细节留待后期再去深入。Android图形系统主要包括以下几个方面:
- - 渲染(也就是绘制内容)
- - 合成(把多个绘制的结果并和)
- - 送显(把合并的结果用设备显示出去)
当应用程序在图形缓冲区中绘制好View层次结构后,这个图形缓冲区会被交给SurfaceFlinger服务,而SurfaceFlinger服务再使用OpenGL图形库API来将这个图形缓冲区渲染到硬件帧缓冲区中。
显示系统划分为上下两层:
- 上层为应用级别的显示,解决如何绘制图层的问题,主要为java代码。
- 底层为系统级别的显示,解决如何将绘制好的图层送显的问题,主要为C/C++代码。
图中的SurfaceFlinger是Android系统中的一个重要服务,它的主要作用是将多个来源的图形显示数据合成,然后发送到显示设备。比如打开应用,常见的有三层显示,顶部的statusbar底部或者侧面的导航栏以及应用的界面,每个层是单独更新和渲染,这些界面都是有surfaceflinger合成一个framebuffer刷新到display硬件中显示。在显示过程中使用到了bufferqueue,surfaceflinger作为consumer方,比如windwomanager管理的surface作为生产方通过GPU产生的页面,交由surfaceflinger进行合成。
SurfaceFlinger主要有两个功能:
- 接收并处理来自GPU RenderThread 图层数据
- 合成显示数据发送到display设备