网站图片太多怎么办网建公司
drawLayers是做client合成,合成完以后的buffer会放在RenderSurface里
FrameBufferSurface里的buffer是通过setClientTarget给到HWC的(HWC应该给client合成的buffer留了一个slot)
Output.cpp这个文件非常关键,代表着具体一个Display的操作
drawLayers第三个参数是个
renderengine::ExternalTexture,是
dequeueRenderBuffer的时候从
mRenderSurface->dequeueBuffer中获取到的,drawLayers就是把最终的东西放到这个buffer里
具体代码都在Output.cpp里
而
setClientTarget就是被
FramebufferSurface::advanceFrame调用的
以下函数是重头戏:
void Output::present(const compositionengine::CompositionRefreshArgs& refreshArgs) {ATRACE_FORMAT("%s for %s", __func__, mNamePlusId.c_str());ALOGV(__FUNCTION__);updateColorProfile(refreshArgs);updateCompositionState(refreshArgs);planComposition();writeCompositionState(refreshArgs);setColorTransform(refreshArgs);beginFrame();GpuCompositionResult result;const bool predictCompositionStrategy = canPredictCompositionStrategy(refreshArgs);if (predictCompositionStrategy) {result = prepareFrameAsync();} else {prepareFrame();}devOptRepaintFlash(refreshArgs);finishFrame(std::move(result));postFramebuffer();renderCachedSets(refreshArgs);
}