[Android禅修之路] Android 图形系统开篇

2,901 阅读4分钟

[Android禅修之路] 图形系统开篇

一 概述

Android 的图形系统可以说是 Android 中最重要的系统之一, 它包含了 Android 系统的显示, 刷新等机制, 贯穿了 Android 的硬件层 和 native 层, 以及应用层。在我们探究 Android 的刷新机制,卡顿原因,显示原理等等方面时,图形系统都是必须了解的。

要想学习这样一个系统,必然不可能一蹴而就,所以本文,也将作为图形系统源码研究的大纲和目录。当然,虽说是大纲和目录,但是实际上也是边写边改,因为很多的观点随着学习的不断深入都会发生改变。

注:本系列所列的代码都基于 Android 10,大多数代码的第一行会标注当前代码所属的文件路径

1.1 学习方法

Android 的图形系统是一个非常复杂的系统,在探究 Android 图形系统的时候,经常会遇到一些机制(或者说是知识点),如果不了解这些机制,就会对系统中的一些代码似懂非懂。但是如果深入的研究这些机制,又容易陷入浩瀚的源码海洋中,迷失最初的目标。

基于上述原因,所以我决定在阅读源码的时候,按照以下几个步骤进行

  1. 先制定每一步想要学习的目标,针对制定的目标理清图形系统的主要流程。
  2. 了解制定目标的主要流程以及一些细节。但对于其中的涉及到其他较为复杂的机制的部分,先假设自己已经了解。
  3. 针对不同的机制点,单独研究,了解这些机制的工作原理。
  4. 将已经熟悉了的机制带入系统的工作流程,巩固之前的学习。

鉴于以上的学习步骤,对于系统源码的研究,必然不可能只是一遍而过,更多时候会是先学习A点而忽略B点,学习完A点之后再学习B点,最后学习完B点之后再把B带入A中再学一遍,这将会是以上螺旋上升的过程。

二 目录

2.1 SurfaceFlinger 工作原理

SurfaceFlinger的启动过程:SurfaceFlinger是 Android 系统中非常重要的一个服务,Android 系统会在启动系统服务的时候启动它。所以我们需要了解 SurfaceFlinger 是如何启动的,即它的启动过程

SurfaceFlinger合成总览:SurfaceFlinger 的合成流程非常长,所以对于 SurfaceFlinger 是如何开始合成的,在开始合成做了哪些事,然后在合成中做了哪些事,都需要一一了解,先从 SurfaceFlinger 合成前的消息处理开始说起吧

SurfaceFlinger 中的 BufferQueue:说道Android 图形的显示,那肯定有生产者和消费者模型,在 SurfaceFlinger 的合成过程中,就有着这样一个模型。本篇就来说说这个 BufferQueue 中的生产者和消费者是如何工作的。

SurfaceFlinger的工作原理:SurfaceFlinger 在启动之后,就会启动它的工作线程。我们需要了解 SurfaceFlinger 是如何工作的,它的工作流程和原理是什么。

2.2 SurfaceFlinger 中的机制解读

解读 Vsync 机制:Vsync 机制是 Android 系统刷新机制中非常重要的机制之一,它是由硬件产生的,最后传递到软件的。那么它是如何产生的,如何传递的。这其中的涉及到的硬件有哪些,软件又有哪些?

解读Vsync(一)

解读Vsync(二)

Android 系统的刷新涉及到多个进程,甚至还涉及到了CPU和GPU,那么这些图像数据是如何保存的,图像的数据比一般的数据大很多,是通过什么方式传递的呢?

多个进程同时使用这些图像数据的时候,又是如何同步的呢?

解读 Fence 同步机制:Android 图形系统中,同步就是通过 Fence 机制完成的。\

解读 GraphicBuffer 开篇

图像就是通过 GraphicBuffer 保存的,而如果想要了解 Android 系统是如何每秒传递这么多这么大的数据,那么 GraphicBuffer 的工作原理就是首先需要了解的。

解读 GraphicBuffer 之 Framework 层

解读 GraphicBuffer 之 HAL 层

解读 GraphicBuffer 之 Ion 驱动层

附录1

未完待续...