SurfaceFlinger(2):整体绘制流程2(REFRESH)

62 篇文章 ¥15.90 ¥99.00

首先看一下总体函数

void SurfaceFlinger::handleMessageRefresh() {
    ATRACE_CALL();

    nsecs_t refreshStartTime = systemTime(SYSTEM_TIME_MONOTONIC);

    preComposition();
    rebuildLayerStacks();
    setUpHWComposer();
    doDebugFlashRegions();
    doComposition();
    postComposition(refreshStartTime);
}

我们详细的一一分析
第一个函数preComposition()

void SurfaceFlinger::preComposition()
{
    bool needExtraInvalidate = 
`SurfaceFlinger::createBufferQueueLayer()` 是 Android Framework 中 SurfaceFlinger 系统服务中的一个方法,用于创建一个使用 BufferQueue 的 Layer。其函数定义如下: ```c++ sp<Layer> SurfaceFlinger::createBufferQueueLayer(const String8& name, uint32_t w, uint32_t h, uint32_t flags, PixelFormat& format, uint32_t layerStack, const sp<IBinder>& parent, const sp<IGraphicBufferProducer>& bufferProducer, const sp<IGraphicBufferConsumer>& bufferConsumer, bool forceClientComposition, uint32_t metadataType) ``` 该函数的参数如下: - `name`:Layer 的名称。 - `w`:Layer 的宽度。 - `h`:Layer 的高度。 - `flags`:Layer 的标志位,如是否支持透明度等。 - `format`:Layer 的像素格式。 - `layerStack`:Layer 所在的层级。 - `parent`:Layer 的父节点。 - `bufferProducer`:Layer 使用的 BufferQueue 的生产者对象。 - `bufferConsumer`:Layer 使用的 BufferQueue 的消费者对象。 - `forceClientComposition`:是否强制使用客户端渲染。 - `metadataType`:Layer 的元数据类型。 该函数的作用是创建一个使用 BufferQueue 的 Layer,BufferQueue 是 Android 中用于处理图形缓冲区的类,它可以用于实现 Surface 的双缓冲机制,以及多个线程之间的数据交换等功能。在这个函数中,会创建一个 Layer 对象,并将其与指定的 BufferQueue 相关联,完成 Layer 的初始化工作。函数返回值为 `sp<Layer>` 类型的智能指针,指向创建的 Layer 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TangGeeA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值