TOPIC 01 / 08 · FRAMEWORK → HAL → KERNEL

Android Graphics

从 SurfaceFlinger、HWC 与 Gralloc 追踪一帧如何合成、分配并送入显示控制器。

01 应用与 UI
02 SurfaceFlinger
03 Composer HAL
04 DRM/KMS

核心组件

  • Skia
  • ANGLE
  • BufferQueue
  • SurfaceFlinger
  • HWC3
  • Gralloc

关键接口

  • ANativeWindow
  • AHardwareBuffer
  • Composer3 AIDL
  • DRM Atomic

一帧的数据流

  1. 应用提交 Buffer
  2. BufferQueue 交接
  3. SurfaceFlinger 决策
  4. HWC 合成
  5. KMS 扫描输出

调试入口

  • dumpsys SurfaceFlinger
  • dumpsys display
  • perfetto gfx
  • drm_state

阅读方法

先确认问题发生在哪一层,再沿接口检查所有权、缓冲区格式、同步与时序。动态条目只在证据和相关性达到公开阈值后出现。

RELATED SIGNALS

关联动态

79SCORE
一手来源Skia发布android / gpu-drivers

Roll ANGLE from 272d37f4cc0c to 91d2d125ec00 (9 revisions)

摘要待补:https://chromium.googlesource.com/angle/angle.git/+log/272d37f4cc0c..91d2d125ec00 2026-08-03 wangra@google.com Vulkan: Map only remaining buffer size in getIndexRange 2026-08-03 wangra@google.com Optimize robust init check during GenerateMipmap 2026-08-03 geofflang@chromium.org GL: Use PixelPack/Unpack structs in ContextStateGL 2026-08-03 syoussefi@chromium.org Vulkan: Remove TextureVk::getImageViews() 2026-08-03 ted.lin0000@gmail.com Tests: Fix dEQP build and runtime for Wayland-only configs 2026-08-03 angle-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 9b3fec1aec6c to af17ae0ac3a5 (8 revisions) 2026-08-03 yanwen.xu@samsung.com OpenCL: add additional validation to GetProgramInfo 2026-08-03 angle-autoroll@skia-public.iam.gserviceaccount.com Roll VK-GL-CTS from 3b7cbad78e93 to 34b25839e80b (23 revisions) 2026-08-03 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Chromium from cbb915d67c46 to 9ac349c94b98 (845 revisions) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/angle-skia-autoroll Please CC alexisdavidc@google.com,jmadill@google.com on the revert to ensure that a human is

查看原文 →
71SCORE
一手来源ANGLE修复android / vulkan-opengl

Translator: Fix index-checks vs comma

摘要待补:In `expression[index]`, when checking if certain limitations apply to the `expression` and `index`, skip all comma operator left-hand sides in `expression` before checking the qualifier. If for example `gl_SomeBuiltIn[index]` has a restriction, so does `(x, gl_SomeBuiltIn)[index]`. Bug: chromium:540019091 Change-Id: Ib01937521eba275220f7e157686606cda53331f2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/8178173 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>

查看原文 →
79SCORE
一手来源Skia发布android / gpu-drivers

Roll vulkan-deps from af17ae0ac3a5 to fd9ab9744d0b (9 revisions)

摘要待补:https://chromium.googlesource.com/vulkan-deps.git/+log/af17ae0ac3a5..fd9ab9744d0b Also rolling transitive DEPS: https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/a9cdf5bdd25d516294b5c25502b67e6116ed7eb5..d993bcfafa3c6dd9c0ba0560ae1456a62fd78e07 https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries/+log/ca91449653e1a29b4b3c1876d7f6e1dcda08cfdd..bf60ee138ced6a8cf9bc3d3f05e32c6a99c2e778 If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/vulkan-deps-skia-autoroll Please CC alexisdavidc@google.com,skiabot@google.com on the revert to ensure that a human is aware of the problem. To file a bug in skia: https://bugs.chromium.org/p/skia/issues/entry To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Release-ANGLE;skia/skia.primary:Test-Win11-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All

查看原文 →
72SCORE
一手来源Skia驱动android / gpu-drivers

[text] Introduce PackedGPUGlyphID to add more metadata to SkPackedGlyphID

摘要待补:Both Ganesh and Graphite share a lot of common structure to their glyph handling code, so the changes outlined below are applied pretty similarly to both codebases. 1. Adds a new shared type PackedGPUGlyphID that wraps SkPackedGlyphID and packs into the free bits the rest of the information that atlas-backed glyphs require, which is the mask format, the amount of padding, and whether or not the data is a coverage or distance value. 2. Pulls back the presence of MaskFormat from the GlyphVector concepts and functions as it's now handled internally by each backend's GlyphData classes and embedded into the packed GPU IDs that they make. 3. Each backend's TextStrike implementation stores PackedGPUGlyphIDs as the keys to GlyphEntries instead of SkPackedGlyphIDs. This ensures that an atlas will only have a cache hit if all of the mask/padding/data-type properties are consistent with what was in the atlas and what is requested by the subrun being drawn. 4. Each backend's GlyphData implementation takes in these additional properties in its constructor (propagating to initBackendData() calls). It then resolves the mask format and padding with the configuration of the backend's atlas mana

查看原文 →
71SCORE
一手来源Skia功能android / gpu-drivers

Update viewer help flags

摘要待补:I noticed the flags (e.g. dawn) for --backend's help message were out of date. The intent was to update this dynamically based on what was compiled in, but this bitrotted. I updated this to match the logic for get_backend_type Change-Id: Ic6d3565b8f644ca87f4fb742b78d264d1a0c8079 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1313016 Commit-Queue: Kaylee Lubick <kjlubick@google.com> Auto-Submit: Kaylee Lubick <kjlubick@google.com> Commit-Queue: Alexis Cruz-Ayala <alexisdavidc@google.com> Reviewed-by: Alexis Cruz-Ayala <alexisdavidc@google.com>

查看原文 →
78SCORE
一手来源ANGLE修复android / vulkan-opengl

Vulkan: Map only remaining buffer size in getIndexRange

摘要待补:Correct the mapped buffer range length in getIndexRange to only map the remaining buffer size. This prevents staging buffer copies from reading past the end of the suballocation. Test: angle_end2end_tests --gtest_filter="*DrawAtOffsetWithClientSideVertexData*" Bug: b/536598187 Change-Id: I6e1bb638562fc165a013478c16da639c1cfd5071 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/8178489 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Ran Wang <wangra@google.com>

查看原文 →
83SCORE
一手来源ANGLE性能android / vulkan-opengl

Optimize robust init check during GenerateMipmap

摘要待补:Add an enum class EnsureInitializedLevels to optionally skip robust initialization for texture levels above the base level during glGenerateMipmap since they will be overwritten. Test: angle_end2end_tests --gtest_filter="MipmapRobustInitTestES3.GenerateMipmapRobustInitOptimization*" Bug: b/532617619 Change-Id: I5bc60b0df7e72839f61a4f8a65c3d2e64825b67f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/8177726 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Ran Wang <wangra@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

查看原文 →
71SCORE
一手来源ANGLE修复android / vulkan-opengl

GL: Use PixelPack/Unpack structs in ContextStateGL

摘要待补:Instead of enumerating the members, store them in the frontend structs. This matches the single dirty bit which represents all of them together. Bug: angleproject:532176406 Change-Id: Ibe8dfbe458e229a8965af3ed11e08771e3801e86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/8141004 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>

查看原文 →