Android 12(S) 图像显示系统 - 应用建立和SurfaceFlinger的沟通桥梁(三)

1 前言

上一篇文章中我们已经创建了一个Native示例应用,从使用者的角度了解了图形显示系统API的基本使用,从这篇文章开始我们将基于这个示例应用深入图形显示系统API的内部实现逻辑,分析运作流程。

本篇将聚焦应用和SurfaceFlinger的活动,即应用是如何与SurfaceFlinger这个服务建立连接并进行通信的。让我们开始吧!

注:本篇涉及的代码位置:

/frameworks/native/libs/gui/

/frameworks/native/libs/gui/include/gui/

/frameworks/native/libs/gui/include/private/gui/

/frameworks/native/services/surfaceflinger/

 


2 应用和SurfaceFlinger的通信

应用运行一开始便首先要去创建一个Native Surface,此时即开始了与SurfaceFlinger的互动,分步来看创建Surface的过程:

  • SurfaceFlinger系统服务的Binder RPC架构

在分析详细的代码前,我想先展示一下 SurfaceFlinger系统服务的Binder RPC架构,其中涉及哪些类?哪些接口?它们之间的关系如何?在宏观上去对这些对象的关系做了解,有助于我们理解具体的代码分析。

先看一张基本的类图:

SurfaceFlinger作为典型的Binder系统服务,遵循Binder服务设计的一般原则:

Interface接口:ISurfaceComposer 、ISurfaceComposerClient

Bp客户端:BpSurfaceComposer、BpSurfaceComposerClient

Bn服务端:BnSurfaceComposer、BnSurfaceComposerClient

服务实现:SurfaceFlinger、Client

具体Binder的原理在此就不展开讲了,相信你在网络上可以搜索到很多优秀的讲解文章。


这里请先留意两点:

  1. ComposerService中有成员mComposerService,它代表了SurfaceFlinger服务的代理客户端;
  2. SurfaceComposerClient中有成员mClient,它代表了SurfaceFlinger服务进程中的Client的代理客户端(这里应该是涉及所谓的匿名Binder的概念)

推荐两篇博文:https://blog.csdn.net/lewif/article/details/50696510

                        https://my.oschina.net/u/3897543/blog/4750360


 

  • 创建SurfaceComposerClient并建立与SurfaceFlinger的连接

.......

 

请关注公众号:Android元宇宙 ,在图形图形》专栏 继续阅读!

 

 

 


必读:

Android 12(S) 图像显示系统 - 开篇

 


 

 

posted on 2022-01-21 09:30  二的次方  阅读(10140)  评论(1编辑  收藏  举报