Android 图形系统之一:概览

Android 图形系统是一套完整的架构,用于管理从应用绘制到显示屏幕的整个流程。它涉及多个层次和组件,从应用程序到硬件,确保每一帧都能准确、高效地呈现到用户的设备屏幕上。

1. Android 图形系统的架构

Android 图形系统的架构可以分为以下几层:

1.1 应用层

  • 主要功能:负责生成绘制内容(UI)。
  • 核心组件View 和 ViewGroup :应用 UI 的基础构件。Canvas :绘制 2D 图形的接口。SurfaceView/TextureView:支持自定义绘制和高性能显示。

1.2 框架层

  • 主要功能:桥接应用层和底层图形系统。
  • 核心组件ViewRootImpl :管理 View 的绘制、布局以及输入事件的分发。SurfaceControl :控制 Surface(窗口或图层)的创建、属性设置等。Choreographer:协调绘制和显示的同步,处理 VSync 信号。

1.3 原生层

  • 主要功能:管理图形缓冲区和帧合成。
  • 核心组件SurfaceFlinger :Android 的窗口合成器,负责将多个应用的窗口内容合成到屏幕。BufferQueue :生产者和消费者模型,负责在应用和 SurfaceFlinger 之间传递帧。Gralloc:图形内存分配器,为图形缓冲区分配共享内存。

1.4 硬件抽象层 (HAL)

  • 主要功能:为系统提供统一的硬件接口。
  • 核心组件Hardware Composer (HWC) :负责与显示硬件交互,优化图层合成(如直接使用硬件 Overlays)。OpenGL ES/Vulkan:提供 GPU 加速的渲染接口。

图片源于Linux Graphic Stack相關的名詞

1.5 硬件层

  • 主要功能:包括 GPU 和显示控制器。
  • 核心组件GPU:负责执行 OpenGL ES 或 Vulkan 命令,处理复杂图形计算。
  • 显示控制器:直接控制显示设备,如屏幕刷新。

2. 图形系统的关键流程

2.1 渲染和绘制流程

以下是从应用代码到屏幕内容呈现的完整流程:

  1. 应用绘制
  • 应用通过 View 或 Canvas 发起绘制。
  • 绘制内容被写入 Surface(帧缓冲区)。
  1. 帧提交
  • 应用通过 Surface 提交绘制的帧,写入 BufferQueue 的生产端。
  1. SurfaceFlinger 合成
  • 从 BufferQueue 的消费端获取缓冲区。
  • 通过 GPU 或 HWC 合成所有窗口的图层。
  • 最终合成的帧被提交给显示设备。
  1. 屏幕显示
  • 显示控制器接收最终帧,并根据 VSync 刷新显示屏幕。

2.2 VSync 信号和帧同步

  • VSync 信号:由显示控制器产生,用于驱动屏幕刷新。
  • 帧同步流程:VSync 信号触发 Choreographer。应用通过 doFrame 回调完成 UI 渲染。SurfaceFlinger 在下一次 VSync 周期前完成合成。

3. Android 图形系统的核心组件

3.1 SurfaceFlinger

  • 职责:管理窗口的图层合成和屏幕内容显示。
  • 工作方式:使用 GPU 或 HWC 完成图层的合成。确保屏幕内容按正确顺序和属性(透明度、旋转等)呈现。

3.2 Hardware Composer (HWC)

  • 职责:直接与显示硬件交互,优化合成。
  • 功能:将部分图层直接传递给硬件 Overlay,避免 GPU 合成。

3.3 BufferQueue

  • 职责:在应用和 SurfaceFlinger 之间传递缓冲区。
  • 模型生产者 :应用写入图像帧。消费者:SurfaceFlinger 获取并合成图像帧。

4. Android 图形性能调优

4.1 性能指标

  • FPS(帧率):反映屏幕的流畅度。
  • Frame Time(帧时间):每帧所需时间,理想值为 16.67ms(60Hz 屏幕)。
  • Jank(卡顿):掉帧导致的用户体验不佳。

4.2 性能瓶颈

  • CPU 过载:应用逻辑过于复杂。
  • GPU 瓶颈:复杂绘制导致 GPU 渲染延迟。
  • 缓冲区问题:BufferQueue 过满或过慢导致帧延迟。

4.3 调试工具

  1. Systrace
  • 分析应用和系统的图形性能。
  • 定位掉帧和绘制延迟问题。
  1. GPU Profiler
  • 查看 GPU 的性能使用情况。
  • 分析渲染效率。
  1. Perfetto
  • 深入分析系统级性能,包括 SurfaceFlinger 和 HWC 的行为。

5. 图形系统的未来趋势

  1. 高刷新率支持:适配 120Hz 或更高刷新率设备。
  2. Vulkan 加速:更多应用使用 Vulkan 进行高性能渲染。
  3. 多窗口和多显示支持:优化多任务和外接显示器的用户体验。
  4. 节能优化:利用硬件 Overlay 和 Display Panel 自适应刷新率降低功耗。

图示:Android 图形架构

图片源于Android进阶宝典 -- Android系统图像绘制原理大全解

如果对某一模块感兴趣,可以进一步深入讲解实现细节或调试方法!

相关推荐
thehunters2 分钟前
win10 ubuntu 使用Android ndk 问题:clang-14: Exec format error
android·linux·ubuntu
yuanbenshidiaos4 小时前
MYSQL--------MYSQL中的运算符
android·mysql·adb
Nayuta5 小时前
查看任意应用的 Skia 绘制指令 - 安卓渲染调试工具大全
android
思忖小下7 小时前
深入Android架构(从线程到AIDL)_16 应用Android的UI框架03
android·ui框架
一本正经光头强7 小时前
掌控ctf-2月赛
android·ide·android studio
zhangphil7 小时前
Android Glide判断当前运行环境是否为主线程的工具方法,Kotlin
android·kotlin·glide
Conmi·白小丑9 小时前
Conmi的正确答案——Cordova使用“src-cordova/config.xml”编辑“Android平台”的“uses-permission”
android·xml
小wanga10 小时前
【C++】特殊类设计
android·c++
龙之叶11 小时前
Android13实时刷新频率的实现代码
android·java·ui
偶是老李头14 小时前
Android - NDK:编译可执行程序在android设备上运行
android·ndk编译可执行程序·android ndk编译·android编译可执行程序