Android核心绘制流程

6 阅读1分钟

vsync app

  1. 由vsync app触发,主要在doFrame里面的Input(点击屏幕)、animation(计算滑动位置)、traversal(绘制、布局)
  2. UI线程执行完成之后,会转交给RenderThread线程工作
  3. RenderThread向SF申请一个buffer(DequeueBuffer),把绘制的指令交给GPU处理,执行queueBuffer给SF送帧

vsync sf

  1. 由vsync sf触发,sf遍历图层列表,获取更新图层的buffer
  2. 通过binder通信,到HWC,HWC根据硬件能力来判断是Device还是client的方式
  3. sf执行合成之后,释放用于上一帧画面的buffer
  4. Client合成: GPU合成,其合成过程由OpenGL完成,完成之后,再递交给HWC
  5. Device合成:硬件合成,由硬件合成器完成
  6. SF询问HWC合成方式 -> client/Device ->申请DequeueBuffer->queueBuffer->SF将client合成的结果存在FrameBuffer中交给HWC完成剩下的Device合成

image.png

HWC

  1. HWC根据硬件能力给出有效的合成方式反馈给SF,并通过DRM与显卡进行交互
  2. HWC通过iotcl调用到kernel,通知crtc_commit线程完成剩下的工作
  3. crtc_commit线程执行complete_commit函数完成画面合成之后,并且保存在FrameBuffer里面供屏幕显示