核心类和接口关系

«interface»

ISurfaceComposer

+setTransactionState()

+getDisplayState()

+getDisplayStats()

+clearAnimationFrameStats()

+getAnimationFrameStats()

+captureDisplay()

+captureLayers()

+authenticateSurface()

+getSupportedFrameTimestamps()

+getDisplayModes()

+getActiveDisplayMode()

+setPowerMode()

+setActiveColorMode()

+getDisplayColorModes()

+getHdrCapabilities()

+enableVsyncInjections()

+injectVsync()

+getLayerDebugInfo()

+getCompositionPreference()

+getColorManagement()

+getDisplayedContentSamplingAttributes()

+setDisplayContentSamplingEnabled()

+getDisplayedContentSample()

+getProtectedContentSupport()

+isWideColorDisplay()

+getDisplayNativePrimaries()

+getPhysicalDisplayIds()

+addRegionSamplingListener()

+removeRegionSamplingListener()

+setDesiredDisplayModeSpecs()

+getDesiredDisplayModeSpecs()

+getDisplayBrightnessSupport()

+setDisplayBrightness()

+captureDisplayById()

+notifyPowerBoost()

+setGlobalShadowSettings()

+getAutoLowLatencyModeSupport()

+setAutoLowLatencyMode()

+getGameContentTypeSupport()

+setGameContentType()

+setFrameRate()

+acquireFrameRateFlexibilityToken()

+setFrameTimelineInfo()

+addTransactionTraceListener()

+getGpuContextPriority()

+getMaxAcquiredBufferCount()

+getDynamicDisplayInfo()

+addFpsListener()

+removeFpsListener()

+overrideHdrTypes()

+addHdrLayerInfoListener()

+removeHdrLayerInfoListener()

+onPullAtom()

+addTunnelModeEnabledListener()

+removeTunnelModeEnabledListener()

+addWindowInfosListener()

+removeWindowInfosListener()

+getPrimaryPhysicalDisplayId()

+getDisplayDecorationSupport()

+getBootDisplayModeSupport()

+setBootDisplayMode()

+clearBootDisplayMode()

+setOverrideFrameRate()

«Binder本地服务»

BnSurfaceComposer

+onTransact()

«核心服务实现»

SurfaceFlinger

-mFlinger

+createConnection()

+setTransactionState()

+getDisplayState()

+getDisplayStats()

+clearAnimationFrameStats()

+getAnimationFrameStats()

+captureDisplay()

+captureLayers()

+authenticateSurface()

+getSupportedFrameTimestamps()

+getDisplayModes()

+getActiveDisplayMode()

+setPowerMode()

+setActiveColorMode()

+getDisplayColorModes()

+getHdrCapabilities()

+enableVsyncInjections()

+injectVsync()

+getLayerDebugInfo()

+getCompositionPreference()

+getColorManagement()

+getDisplayedContentSamplingAttributes()

+setDisplayContentSamplingEnabled()

+getDisplayedContentSample()

+getProtectedContentSupport()

+isWideColorDisplay()

+getDisplayNativePrimaries()

+getPhysicalDisplayIds()

+addRegionSamplingListener()

+removeRegionSamplingListener()

+setDesiredDisplayModeSpecs()

+getDesiredDisplayModeSpecs()

+getDisplayBrightnessSupport()

+setDisplayBrightness()

+captureDisplayById()

+notifyPowerBoost()

+setGlobalShadowSettings()

+getAutoLowLatencyModeSupport()

+setAutoLowLatencyMode()

+getGameContentTypeSupport()

+setGameContentType()

+setFrameRate()

+acquireFrameRateFlexibilityToken()

+setFrameTimelineInfo()

+addTransactionTraceListener()

+getGpuContextPriority()

+getMaxAcquiredBufferCount()

+getDynamicDisplayInfo()

+addFpsListener()

+removeFpsListener()

+overrideHdrTypes()

+addHdrLayerInfoListener()

+removeHdrLayerInfoListener()

+onPullAtom()

+addTunnelModeEnabledListener()

+removeTunnelModeEnabledListener()

+addWindowInfosListener()

+removeWindowInfosListener()

+getPrimaryPhysicalDisplayId()

+getDisplayDecorationSupport()

+getBootDisplayModeSupport()

+setBootDisplayMode()

+clearBootDisplayMode()

+setOverrideFrameRate()

«interface»

ISurfaceComposerClient

+createSurface()

+clearLayerFrameStats()

+getLayerFrameStats()

+mirrorSurface()

+mirrorDisplay()

«Binder本地服务»

BnSurfaceComposerClient

+onTransact()

«客户端连接服务»

Client

-mFlinger

-mLock

+createSurface()

+clearLayerFrameStats()

+getLayerFrameStats()

+mirrorSurface()

+mirrorDisplay()

«客户端封装»

SurfaceComposerClient

-mClient

+initCheck()

+connection()

+dispose()

+linkToComposerDeath()

«服务获取工具»

ComposerService

+getComposerService()

+checkService()

架构层次说明

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() - 截取指定 Layer
  • captureDisplayById() - 按显示ID截屏
色彩管理接口
  • setActiveColorMode() - 设置颜色模式
  • getDisplayColorModes() - 获取支持的颜色模式
  • getColorManagement() - 获取色彩管理信息
  • getHdrCapabilities() - 获取 HDR 能力
性能和统计接口
  • clearAnimationFrameStats() - 清除动画帧统计
  • getAnimationFrameStats() - 获取动画帧统计
  • addRegionSamplingListener() - 添加区域采样监听器
  • addFpsListener() - 添加帧率监听器
客户端连接接口
  • createSurface() - 创建 Surface
  • createConnection() - 创建客户端连接
  • mirrorSurface() - 镜像 Surface
  • mirrorDisplay() - 镜像显示

数据流向

  1. 服务发布: SurfaceFlinger 作为服务发布到 ServiceManager
  2. 服务获取: 客户端通过 ComposerService::getComposerService() 获取 ISurfaceComposer 接口
  3. 连接建立: 调用 createConnection() 建立客户端连接,返回 ISurfaceComposerClient 接口
  4. Surface 创建: 通过 ISurfaceComposerClient::createSurface() 创建 Surface
  5. 事务处理: 通过 setTransactionState() 提交事务更新 Layer 属性

这个架构采用了典型的 Android Binder RPC 模式,通过接口定义、服务实现、客户端封装三个层次实现了高效的进程间通信。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐