SurfaceFlinger 系统服务的 Binder RPC 架构
·
核心类和接口关系
架构层次说明
1. Binder 接口层
ISurfaceComposer: 主要的 Binder 接口,定义了所有 SurfaceFlinger 服务的 RPC 方法ISurfaceComposerClient: 客户端连接接口,用于创建和管理 Surface
2. Binder 服务层
BnSurfaceComposer: Binder 本地服务基类,处理onTransact()中的方法分发BnSurfaceComposerClient: 客户端连接的 Binder 本地服务基类
3. 服务实现层
SurfaceFlinger: 核心服务实现类,继承自BnSurfaceComposer,实现所有 SurfaceFlinger 的功能Client: 客户端连接实现类,继承自BnSurfaceComposerClient,为每个客户端创建连接
4. 客户端层
SurfaceComposerClient: 客户端封装类,提供便捷的 API 来访问 SurfaceFlinger 服务ComposerService: 服务获取工具类,用于获取 SurfaceFlinger 服务引用
主要接口分类
显示管理接口
getDisplayState()- 获取显示状态getDisplayStats()- 获取显示统计信息getDisplayModes()- 获取显示模式列表getActiveDisplayMode()- 获取当前显示模式getDynamicDisplayInfo()- 获取动态显示信息
事务和合成接口
setTransactionState()- 设置事务状态,用于批量更新 Layer 属性getSupportedFrameTimestamps()- 获取支持的时间戳类型getCompositionPreference()- 获取合成偏好设置
截屏接口
captureDisplay()- 截取整个屏幕captureLayers()- 截取指定 LayercaptureDisplayById()- 按显示ID截屏
色彩管理接口
setActiveColorMode()- 设置颜色模式getDisplayColorModes()- 获取支持的颜色模式getColorManagement()- 获取色彩管理信息getHdrCapabilities()- 获取 HDR 能力
性能和统计接口
clearAnimationFrameStats()- 清除动画帧统计getAnimationFrameStats()- 获取动画帧统计addRegionSamplingListener()- 添加区域采样监听器addFpsListener()- 添加帧率监听器
客户端连接接口
createSurface()- 创建 SurfacecreateConnection()- 创建客户端连接mirrorSurface()- 镜像 SurfacemirrorDisplay()- 镜像显示
数据流向
- 服务发布:
SurfaceFlinger作为服务发布到 ServiceManager - 服务获取: 客户端通过
ComposerService::getComposerService()获取ISurfaceComposer接口 - 连接建立: 调用
createConnection()建立客户端连接,返回ISurfaceComposerClient接口 - Surface 创建: 通过
ISurfaceComposerClient::createSurface()创建 Surface - 事务处理: 通过
setTransactionState()提交事务更新 Layer 属性
这个架构采用了典型的 Android Binder RPC 模式,通过接口定义、服务实现、客户端封装三个层次实现了高效的进程间通信。
更多推荐


所有评论(0)