概述

WindowManager 管理窗口,每个窗口在 SurfaceFlinger 中对应一个 layer。SurfaceFlinger 将需要合成的 layer 发送给 HWC。本文档中的 layer 是广义概念,对应多个数据结构。

本文档介绍 SurfaceFlinger 管理 layer 的方法,包括:

最后简要介绍新模式如何高效实现 layer 镜像。

Layer 数据结构

android::Layer

在新模式(LayerLifecycleManager)之前,该类负责 layer 的状态管理,包括父子关系、layer stack、graphic buffer 和属性。

新模式重构后,android::Layer 的作用大幅减少,主要负责 transaction 回调管理和性能监控。SurfaceFlinger 将 android::Layer 保存在 mLegacyLayers 中。

// These classes do not store any client state but help with managing transaction callbacks
// and stats.
std::unordered_map<uint32_t, sp<Layer>> mLegacyLayers GUARDED_BY(kMainThreadContext);

android::layer_state_t

Layer 状态结构体,包含 ID、buffer、坐标、layer stack、颜色、圆角和模糊等属性。

作为临时变量,它实现了序列化功能。客户端变更 layer 属性时,通过 transaction 向 SurfaceFlinger 发送新的 layer_state_t

android::surfaceflinger::frontend::RequestedLayerState

新模式引入的类,用于管理 layer 状态,由 LayerLifecycleManager 负责管理。

它继承 layer_state_t,扩展了 buffer(GPU 映射)、父子关系、镜像关系等属性。

android::surfaceflinger::frontend::LayerHierarchy