Skip to content
Maozy's Blog
Go back

[Android底层] CPU & GPU

Updated:

Table of contents

Open Table of contents

一、CPU 与 GPU 的关系是什么?

在渲染链路中,CPU 与 GPU 的关系可以类比为“包工头”与“泥瓦匠”:

1.1 CPU(包工头 / 大脑)

1.2 GPU(泥瓦匠 / 画师)

二、核心纠错:图纸(DisplayList)与画布(GraphicBuffer)

在 Android 的底层架构中,存在两种完全不同的“载体”:

图纸(DisplayList):

画布(GraphicBuffer / Back Buffer):

三、真实工作流:包工头、画师与画板

用一个形象的比喻来还原整个过程:

1.CPU(包工头)生成施工图(DisplayList)

2.转交施工图(UI 线程同步给 RenderThread)

3.申请空画布(Dequeue Buffer)

4.GPU(画师)开始工作

5.提交画布(Queue Buffer)

四、案例分析:为什么 GPU 慢了,CPU 会“没有空 Buffer 可拿”?

在双缓冲机制下,系统只有两块画布(A 和 B):

如果用户操作触发了新一帧:

  1. CPU 主线程飞速生成新的“图纸(DisplayList)”,交给 RenderThread
  2. RenderThread 申请第三块空画布时,BufferQueue 会拒绝(因为只有两块画布,A 在屏幕手里,B 在 GPU 手里没画完)
  3. 这会导致底层触发 dequeueBuffer 阻塞,RenderThread 被卡死,无法接收新图纸
  4. 最终,CPU 主线程也会在 syncFrameState 步骤被强行卡死

五、结论 & 三缓冲机制的意义


Share this post on:

Previous Post
[Jetpack Compose] remember
Next Post
[Golang] gorm关联查询