• 11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析


    4.1 APP跟SurfaceFlinger之间的重要数据结构

    一个应用程序有一个或者多个surface(一般只有一个),一个surface有一个或者多个buffer,这些buffer需要应用向surfaceflinger申请;

    在surfaceflinger中用client表示每一个应用程序,client中用layer结构来表示应用程序的surfaceControl

    layer中含有mProducer生产者和mSurfaceFlingerCinsumer消费者,生产者和消费者有同一个mCore(BufferQueueCore),它有一个BufferSlot [64]  mSlots数组,数组的每一项表示一个buffer(数组每一项是个结构体,里面有一项mGraphicBuffer,用其来表示buffer),从数组可以看到每个应用程序最多有64个buffer

    以上所涉及的都是SurfaceFlinger中所涉及的数据结构,下面分析APP中涉及的应用结构:

    sp<SurfaceComposerClient> client用来表示和SurfaceFlinger的连接,其内部有一些mClient用来指向SurfaceFlinger中对应的client

    sp<SurfaceControl> surfaceControl 用来管理应用程序的surface,通过surfaceControl->getSurface()获得surface,surfaceControl 通过client得到

    Surface里有一个数组BufferSlot mSlots[64],这个数组和SurfaceFlinger中BufferSlot [64]  mSlots一样对应,两者指向的应该是同一块内存区域

    具体各个数据结构流程如下:


    4.2 APP创建SurfaceFlinger客户端(client)的过程


    4.3 APP申请创建Surface的过程


    4.4 APP申请(lock)Buffer的过程_框架

    获得surface中的buffer过程:

    (1)向生产者申请:(后面的步骤是在SurfaceFlinger中进行)查看自己的mslots中有无空余项,若无,向Gralloc HAL申请,实质是通过Ashmem驱动申请,并返回fd给APP(通过binder返回)

    (2)应用程序获得fd,mmap获得地址,这些信息会放到mslots中

    上面说的步骤是在APP中进行


    4.5 APP申请(lock)Buffer的过程_分配buffer


    4.6 APP申请(lock)Buffer的过程_获得buffer信息

    4.7 APP提交(unlockAndPost)Buffer的过程_框架


    4.8 APP提交(unlockAndPost)Buffer的过程_消费者创建过程
    4.9 APP提交(unlockAndPost)Buffer的过程_提交过程

  • 相关阅读:
    字符串replaceAll()方法报错:java.util.regex.PatternSyntaxException:Unclosed group near index...
    eclipse导入Tomcat8源码
    [白话解析] 深入浅出朴素贝叶斯模型原理及应用
    [白话解析] 深入浅出一致性Hash原理
    [白话解析] 深入浅出贝叶斯定理
    [白话解析] 深入浅出边缘计算
    [梁山好汉说IT] 用实例来深入理解容器概念
    [梁山好汉说IT] 梁山好汉和抢劫银行
    [梁山好汉说IT] 梁山好汉和秒杀系统
    [梁山好汉说IT] 区块链在梁山的应用
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/9186310.html
Copyright © 2020-2023  润新知