android应用中申请的Surface在SurfaceFlinger服务中都有对应有图层Layer与之对应。将这些图层合并且输出到显示外设是SurfaceFlinger的工作重点。本文来分析下合成的过程。合成工作在接收到VSync消息(MessageQueue::REFRESH)后开始。
void SurfaceFlinger::onMessageReceived(int32_t what) {
ATRACE_CALL();
switch (what) {
......
case MessageQueue::REFRESH: {
handleMessageRefresh();
break;
}
}
}
- 调用消息处理函数handleMessageRefresh来进行显示刷新工作,图像合成与输出的核心就在这个处理函数里
void SurfaceFlinger::handleMessageRefresh() {
ATRACE_CALL();
......
preComposition();
rebuildLayerStacks();
setUpHWComposer();
doDebugFlashRegions();
doComposition();
postComposition();
......
previousExpectedPresent = mPrimaryDispSync.computeNextRefresh(0);
}
- preComposition、rebuildLayerStacks、setUpHWComposer图层合成准备工作 <
SurfaceFlinger服务在Android系统中负责图层的合成与显示。当接收到VSync消息后,通过handleMessageRefresh处理函数启动合成过程。此过程中,预合成、重建图层堆栈和设置硬件合成器等步骤为合成做准备。核心的doComposition函数执行图层的合并,并通过doDisplayComposition和postFramebuffer完成显示。图层的compositionType决定硬件或软件合成方式,最终通过交换缓冲区提交结果。
最低0.47元/天 解锁文章
922

被折叠的 条评论
为什么被折叠?



