Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 13 章:渲染管线专题

Android 渲染没有一条适用于所有场景的固定流水线。分析前,先确认内容由谁生产(Producer)、写入哪些 buffer 或 GPU 资源、交给哪个消费者;若目标是显示,再核对 layer(合成图层)的组织方式,以及合成发生在应用内部、SurfaceFlinger 的 GPU 路径、HWC 硬件路径还是 XR runtime。框架名、控件名或一段很长的 trace slice(追踪时间区间),都不能代替实际对象和调用路径。

⚠️ 边界修正:Surface 是生产者使用图像 buffer 的入口,不能理解为某一块固定 buffer;SurfaceControl 也能通过 buffer transaction 直接交付 HardwareBuffer。纯计算可以不使用 Surface,XR 输出则需核对 runtime 的责任,不能把本章各路径统一画成一条 BufferQueue 显示链。参见 Surface API、buffer transaction API,以及 13.6、13.13 和 13.14。

先按消费者划分渲染与计算路径

图:先确认生产者、资源和消费位置,再判断进入哪条输出路径。 这是消费拓扑概览,省略 BLAST 等中间环节;XR runtime 的内部合成与显示需单独取证。

内容索引

阅读建议

PiP、Freeform 与多窗口场景还需结合 2.14 多窗口、PiP 与桌面模式渲染管线,核对窗口几何、Surface 同步与显示模式。

按问题选择第十三章阅读入口

图:按 UI 框架、Surface / API、媒体、网页或 XR 选择专项。 这是阅读分组,各格不表示执行先后;具体承载和消费者仍按目标对象确认。

统一取证入口

任一性能问题都可以借用 13.1 的统一分析方法:先固定目标对象与版本,再找 Producer、提交点、读写及复用依赖,最后按实际消费者追踪结果。显示路径核对 buffer、transaction、layer、SurfaceFlinger / HWC 与 present;纯计算核对命令完成和实际需要的结果访问;XR 则继续向 runtime 侧取证。BufferQueue 和 fence(操作完成或资源可用的同步信号)只在该路径确实存在时纳入。

关联事件时,先核对 frame / buffer / layer 等标识及其作用域,再校准跨数据源的时钟;FrameTimeline 的使用须以目标 Surface 的实际覆盖为准。CPU API 返回、GPU 完成、显示反馈和用户可见结果是不同终点;物理显示的 present fence 也不能代替整屏扫描完成或光学响应测量。参见 时钟同步、HWC2 present fence 契约;独立 Surface 的取证见 13.1,XR 的额外终点见 13.13。

以对象、依赖与终点组织取证

图:把对象身份、提交依赖、消费者和时间基准联系起来。 箭头表示取证步骤,非固定执行流水线;API 返回、GPU 完成与光学响应分别判断。