SurfaceFinger layer创建过程

SurfaceFinger layer创建过程


引言

本篇博客重点分析app创建Surface时候,SurfaceFlinger是如何构建对应的Layer的主要工作有那些!

这里参考的Android源码是Android 13 aosp!




app端创建Surface

其核心流程可以分为如下接部分:

  • app使用w,h,format等参数,调用SurfaceComposerClient::createSurface

  • createSurface调用SurfaceComposerClient::createSurfaceChecked;createSurfaceChecked调用mClient->createSurface;mClient是surfaceflinger client的代理;mClient的初始化还没介绍,后面单独写一篇介绍。

  • mClient->createSurface会调用到android12\frameworks\native\services\surfaceflinger\Client.cpp 中Client::createSurface

  • Client::createSurface调用mFlinger->createLayer

核心逻辑代码如下:

surfaceComposerClient->createSurface(String8("SurfaceTestDemo"), resolution.getWidth(),
                  resolution.getHeight(), PIXEL_FORMAT_RGBA_8888,
                  ISurfaceComposerClient::eFXSurfaceBufferState,
                  /*parent*/ nullptr);
                  
sp<SurfaceControl> SurfaceComposerClient::createSurface(const String8& name, uint32_t w, uint32_t h,
                                      PixelFormat format, uint32_t flags,
                                      const sp<IBinder>& parentHandle,
                                      LayerMetadata metadata,
                                      uint32_t* outTransformHint) {
   
    sp<SurfaceControl> s;
    createSurfaceChecked(name, w, h, format, &s, flags, parentHandle, std::move(metadata),
                         outTransformHint);
    return s;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值