Android Graphics Overview

Android Graphics

Android Stack

Android Stack

Android Graphics Stack

block-beta
  columns 3
  block:group1:3
    %% columns auto (default)   
    A["WindowManager"]
    B["SurfaceFlinger"]
    C["..."]
  end
  block:group2:3
    a["Gralloc"]
    b["HWComposer"]
    c["..."]
  end
  block:group3:3
    a1["GPU"]
    b1["DC"]
    c1["..."]
  end
  %% **蓝
  style group1 fill:#55AEF7
  %% **橙
  style group2 fill:#F87529
  %% **绿
  style group3 fill:#25A768

SurfaceFlinger (/f'lɪngər/:抛投器)

HAL

Gralloc

硬件合成器

硬件合成器是 Android 系统中负责屏幕显示的硬件抽象层 (HAL) 组件之一。它负责将图形渲染的内容(比如应用程序界面,视频等)合成到帧缓冲里,以便高效地利用 DPU 硬件加速 overlay 合成,减少 GPU 合成的负担,从而整体上提供更流畅的图形渲染显示。

hwcomposer 组件通常是由各个设备厂商根据自己的硬件特性实现的,有开源的,也有闭源的。在 AOSP 中有一个通用的基础的 hwcomposer 实现,主要用于那些不需要特别硬件加速或优化的设备,类似 xserver 中的 modesetting.

mindmap
  root(HAL hwcomposer)
    libhardware/hwcomposer demo
    drm-hwcomposer
      Arm drm-hwcomposer
    Qualcomm hwcomposer
    Samsung hwcomposer
    Huawei hwcomposer

HWComposer

尽量让 GPU 少做合成的工作,让 DPU (Display Processor Unit) 多做合成的工作,因为合成涉及的操作主要有

  • 格式转换
  • 旋转缩放
  • 像素拷贝

如果这些都占用 GPU 去做,太浪费 GPU 了。

composition-with-hwcomposer

drm-hwcomposer

一个基于 KMS 的 HWComposer 实现。

ARM drm-hwcomposer

给 Mali DP 量身定制的 drm-hwcomposer.

Android Sync Framework

Android Sync Framework 实现的是显式同步 (Explicit Synchronization), 所谓显式同步,指的是用户态可见,与隐式同步 (Implicit Synchronization) 相对,隐式同步用户态应用程序是不感知的。虽然隐式同步完全由驱动和内核控制,无需应用程序干预(这对应用开发者来说可能更简单些,但有时简单的方案可能不是最高效的),但显式同步比隐式同步更能发挥硬件的并行性,这应该也是 Android 实现的是显式同步的主要原因。

  • sync_timeline
    • control ordering
  • sync_pt (point)
    • represent a fence
  • sync_fence (like sync file in Linux kernel)
    • for fd passing across userspace processes like SurfaceFlinger and 3D applications

References