早期Android版本window都是gpu合成,但是内存和gpu紧张会产生系统卡顿,所以新版本把简单layer(overlay类型)直接用屏幕合成,以下Android12 合成过程
阶段1:App请求vsync
App的RenderThread调queuebuffer把graphicbuffer加入BufferQueue,SurfaceFlinger调acquirebuffer获取到buffer后,会向hwc请求OnVsync回调(注册vsync回调),代码细节:
queuebuffer-->consumer.onFrameAvailable-->SF.signalLayerUpdate-->MQ.invalidate(唤醒wait方法挂起EventThread线程,等待OnVsync回调执行MQ.Handler.dispatchInvalidate )
阶段2:onVsync回调SurfaceFlinger开始合成layer
onVsync |
SurfaceFlinger::onMessageInvalid |