上一篇说到surfaceflinger绘制就没了,因为surfaceflinger的流程复杂了,有vscny信号,有messagequeue,等等,所以,主要是因为懒啦,所以先分析关于surfaceflinger的核心函数handleMessageRefresh
void SurfaceFlinger::handleMessageRefresh() {
ATRACE_CALL();
preComposition();
rebuildLayerStacks();
setUpHWComposer();
#ifdef QCOM_BSP
setUpTiledDr();
#endif
doDebugFlashRegions();
doComposition();
postComposition();
}
主要工作就是合成layer与显示
一个一个来仔细看- -
preComposition 判断是否有未完成的绘制
void SurfaceFlinger::preComposition()
{
bool needExtraInvalidate = false;
const LayerVector& layers(mDrawingState.layersSortedByZ);
const size_t count = layers.size();
// 调用每个layer的onPreComposition 判读是否有未完成的绘制。
for (size_t i=0 ; i<count ; i++) {
if (layers[i]->onPreComposition()) {
needExtraInvalidate = true;
}
}
//