当前位置: 首页 > article >正文

SurfaceFlinger代码笔记

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);
}


http://www.kler.cn/a/562168.html

相关文章:

  • C#初级教程(5)——解锁 C# 变量的更多奥秘:从基础到进阶的深度指南
  • springboot实现多文件上传
  • C++ day4 练习
  • 抖音视频如何下载保存去水印
  • 本地大模型编程实战(23)用智能体(Agent)实现基于SQL数据构建问答系统(2)
  • kubernetes中pod spec设置的limits request会转换为哪些参数进行限制
  • [杂学笔记]OSI七层模型作用、HTTP协议中的各种方法、HTTP的头部字段、TLS握手、指针与引用的使用场景、零拷贝技术
  • 形式化数学编程在AI医疗中的探索路径分析
  • 爬虫运行后如何保存数据?
  • 【redis】数据类型之hyperloglog
  • 利用Java爬虫获取VIP商品详情实战案例指南
  • 如何使用深度学习进行手写数字识别(MNIST)
  • 基于Prometheus与Grafana构建实时监控与告警体系,保障微服务稳定性!
  • python如何去除列表末尾的None
  • Nmap网络安全审计
  • 超多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
  • https和http有什么区别
  • kotlin 知识点 七 泛型的高级特性
  • 【gitlab】认识 持续集成与部署
  • Java 值传递