Android创建Surface过程源码分析
在上一篇文章Android SurfaceFlinger服务代理对象获取过程源码分析中介绍了应用程序获取SurfaceFlinger中的各种远程Binder代理对象,SurfaceFlinger为每个应用程序创建Client对象来处理应用程序的Binder请求,同时返回Client的Binder代理对象给应用程序,这样应用程序就可以通过该Binder代理对象来请求SurfaceFlinger创建Surface了,本文在前面章节的基础上 分析Surface的创建过程。
由于ISurfaceComposerClient也是基于Binder通信框架的,因此BpSurfaceComposerClient向服务端的Client请求创建Surface的过程分为客户端进程和服务端进程。
客户端进程:
frameworks\native\libs\gui\ISurfaceComposerClient.cpp
这里就是为当前创建的Layer构造并初始化SurfaceTexture对象,该SurfaceTexture对象用来管理BufferQueue。回到SurfaceFlinger的创建 普通Surface函数createNormalSurface,构造完Layer对象后,还需根据图像大小,格式来设置Layer对象中的buffer
完成Layer对象的创建及设置后,调用当前创建的Layer对象的getSurface()函数来创建一个BSurface对象,getSurface()函数实现在Layer的父类LayerBaseClient中