【surfaceflinger源码分析】RenderSurface与FramebufferSurface之间的关系

文章详细介绍了Android系统中SurfaceFlinger如何创建和管理FramebufferSurface与RenderSurface。通过BufferQueue,RenderSurface作为生产者获取合成的图形数据,而FramebufferSurface作为消费者负责消费这些数据,将图像送至屏幕显示。整个过程涉及EGL操作和硬件Composer(HWC)的协同工作。

刚刚想全面梳理下surfaceflinger中一个GraphicBuffer的完整旅程,发现流程实在是太长,而且涉及到EGL相关的操作比较复杂,不得不暂停前一篇博客,先启动梳理下RenderSurface与FramebufferSurface的关系以及其作用。

RenderSurface与FramebufferSurface的创建

创建FramebufferSurface

void SurfaceFlinger::processDisplayAdded(const wp<IBinder>& displayToken,
                                         const DisplayDeviceState& state) {
   
   
    .............................................;
    compositionengine::DisplayCreationArgsBuilder builder;
    if (const auto& physical = state.physical) {
   
   
        builder.setPhysical({
   
   physical->id, physical->type});
    }
    builder.setPixels(ui::Size(width, height));
    builder.setPixelFormat(pixelFormat);
    builder.setIsSecure(state.isSecure);
    builder.setLayerStackId(state.layerStack);
    builder.setPowerAdvisor(&mPowerAdvisor);
    builder.setUseHwcVirtualDisplays(mUseHwcVirtualDisplays || getHwComposer().isUsingVrComposer());
    builder.setName(state.displayName);
    //创建Display这个类, surfaceflinger\CompositionEngine\src\Display.cpp
    const auto compositionDisplay = getCompositionEngine().createDisplay(builder.build());

    sp<compositionengine::DisplaySurface> displaySurface;
    sp<IGraphicBufferProducer> producer;
    sp<IGraphicBufferProducer> bqProducer;
    sp<IGraphicBufferConsumer> bqConsumer;
    //创建一个bufferQueue,获取到bufferqueue的bqProducer和bqConsumer
    getFactory().createBufferQueue(&bqProducer, &bqConsumer, /*consumerIsSurfaceFlinger =*/false);

    std::optional<DisplayId> displayId = compositionDisplay->getId();
    if (state.isVirtual()) {
   
   
       ................'
    } else {
   
   
        ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值