Choreographer
作用:
- 负责接收和处理 App 的各种更新消息和回调,等到 Vsync 到来的时候统一处理。比如集中处理 Input(主要是 Input 事件的处理) 、Animation(动画相关)、Traversal(包括 measure、layout、draw 等操作) ,判断卡顿掉帧情况,记录 CallBack 耗时等
- 负责请求和接收 Vsync 信号。接收 Vsync 事件回调(通过 FrameDisplayEventReceiver.onVsync );请求 Vsync(FrameDisplayEventReceiver.scheduleVsync)
重要方法:
- onVSync:Choreographer 的内部类 FrameDisplayEventReceiver.onVsync 负责接收 Vsync 回调,通知 UIThread 进行数据处理。
- doFrame:处理绘制的逻辑核心
- 计算掉帧逻辑
- 记录帧绘制信息
- 当收到 Vsync 信号时,执行使用者通过 postCallback 设置的五种类型的回调
- CALLBACK_INPUT : 处理输入事件处理有关
- CALLBACK_ANIMATION : 处理 Animation 的处理有关
- CALLBACK_INSETS_ANIMATION : 处理 Insets Animation 的相关回调
- CALLBACK_TRAVERSAL : 处理和 UI 等控件绘制有关
- CALLBACK_COMMIT : 处理 Commit 相关回调,主要是是用于执行组件 Application/Activity/Service 的 onTrimMemory,在 ApplicationThread 的 scheduleTrimMemory 方法中向 Choreographer 插入的;另外这个 Callback 也提供了一个监测一帧耗时的时机
SurfaceFlinger
- 状态栏和导航栏由系统进程渲染,而应用层由应用渲染,两者之间不进行协调。(默认主屏幕应用有一个单独的壁纸层)。
- SurfaceFlinger 最主要的功能是接受来自多个来源的数据缓冲区,对它们进行合成,然后发送到显示设备。
- SurfaceFlinger 必须始终显示内容,因此它会保留一个缓冲区。如果在某个层上没有提交缓冲区,则该层会被忽略。
- SurfaceFlinger 在收集可见层的所有缓冲区之后,便会询问 Hardware Composer 应如何进行合成。
HWComposer(Hardware Composer HAL)
- 由显示设备硬件原始设备制造商 (OEM) 完成,用于通过可用硬件来合成缓冲区
- SurfaceFlinger 向 HWC 提供一个完整的层列表
- 运行 Android 4.4 或更高版本的设备通常支持 4 个叠加平面。尝试合成的层数多于叠加层数会导致系统对其中一些层使用 GLES 合成,这意味着应用使用的层数会对能耗和性能产生重大影响。