zoukankan      html  css  js  c++  java
  • 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的过程_提交过程

  • 相关阅读:
    java基础
    Java开发环境搭建
    打开CMD的方式和常用的Dos命令
    电脑常用快捷键
    Markdown学习
    c# json object Dictionary互转
    dapper 跨表查询
    Dapper SimpleCRUD Demo
    c#中的常用ToString()方法总结
    android js 模拟键盘
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/9186310.html
Copyright © 2011-2022 走看看