SurfaceFlinger合成五部曲
void SurfaceFlinger::handleMessageRefresh(){
//合成之前的与处理,检查是否有新的图层变化,如果有,执行请求下一次VSync信号
preComposition();
//若Layer的位置/先后顺序/可见性发生变化,重新计算Layer的目标合成区域和先后顺序
rebuildLayerStacks();
//调用hwc的prepare方法询问每个图层是否支持硬件合成
setUpHWComposer();
//当打开开发者选项中的“显示Surface刷新”时,额外为产生变化的图层绘制闪烁动画
doDebugFlashRegions();
//如果不支持硬件合成,在该方法中会调用GPU合成,接着提交buffer
doComposition();
//调Layer的onPostComposition方法,主要用于调试,可以忽略
postComposition(refreshStartTime);
}
APP绘制工作和SF合成工作已经全部完成,我们来画张图总结一下本章节内容
image.png