Android 12(S) 图形显示系统 – BufferQueue的工作流程(十)

yizhihongxing

Android 12(S) 图形显示系统 - BufferQueue的工作流程(十)

BufferQueue是Android Framework层中的一个重要组件,负责管理图形缓存,将SurfaceFlinger和应用程序之间的共享缓存提供了一个通道,是实现多个图形应用程序切换和渲染的关键。本篇文章将介绍Android 12(S)中BufferQueue的工作流程。

BufferQueue概述

BufferQueue是SurfaceFligner和应用程序之间的通道。它提供了一个FIFO队列,应用程序可以将缓冲区入队,SurfaceFlinger可以取出缓冲区进行合成,然后将它们显示在显示屏上。BufferQueue接受三种类型的缓冲区:CPU read-write, GPU read-only, 和 CPU-write GPU-read。

BufferQueue中的两个重要概念

BufferSlot

BufferSlot表示BufferQueue中缓冲区的槽位。对于BufferQueue的每个槽位,都会分配一个缓冲区以及相应的状态信息。BufferSlot有三种状态,FREE,ACQUIRED和QUEUED。

  • FREE:表示缓冲区可用。
  • ACQUIRED:表示缓冲区正在被应用程序读写。
  • QUEUED:表示缓冲区已经入队,在等待SurfaceFlinger取出并渲染。

BufferState

BufferState描述了缓冲区的状态。每个BufferSlot都有一个BufferState对象表示它的缓冲区状态。BufferState有以下几种状态:

  • BUFFER_NEEDS_REALLOCATION:表示需要重新分配缓冲区。
  • BUFFER_NEEDS_REALLOCATION_ON_UPDATE:表示更新时需要重新分配缓冲区。
  • BUFFER_READY:表示缓冲区可被取出渲染。
  • BUFFER_IN_USE:表示缓冲区正在被应用程序读写。

BufferQueue的工作流程

  1. 应用程序创建Surface/GraphicBuffer对象,将GraphicBuffer对象与Surface对象绑定。GraphicBuffer对象包含缓冲区的大小、像素格式等信息。
  2. 应用程序使用Surface对象创建Canvas对象,进行绘图操作。应用程序将绘制得到的缓冲区通过unlockCanvasAndPost()方法提交给BufferQueue。
  3. BufferQueue将提交的缓冲区包装成BufferItem对象,并加入到BufferQueue的队列中。
  4. SurfaceFlinger从BufferQueue的队列中取出缓冲区进行合成,并将合成后的缓冲区发送给DisplayHardware进行显示。

BufferQueue中的同步机制

BufferQueue提供了一些同步机制,以确保多个线程在访问缓冲区时不会发生冲突。

  • 多个应用程序要访问同一个GraphicBuffer时,BufferQueue使用SurfaceTexture来提供同步访问。
  • 应用程序访问缓冲区时,BufferQueue使用Fence来保障访问的同步。
  • SurfaceFlinger访问缓冲区时,BufferQueue同样使用Fence来保障访问的同步。

总结

BufferQueue是Android Framework层中非常重要的一个组件,它实现了SurfaceFlinger和应用程序之间对图形缓存的共享。BufferQueue的两个重要概念BufferSlot和BufferState,描述了缓冲区的槽位和状态信息。BufferQueue的同步机制使用SurfaceTexture来提供同步访问,使用Fence来保障访问的同步。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android 12(S) 图形显示系统 – BufferQueue的工作流程(十) - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • 打印机脱机无法打印该打印机的图标变成灰色的解决方案

    我可以为您提供详细的“打印机脱机无法打印该打印机的图标变灰”的解决方案攻略。 解决方案 通常,打印机脱机的问题主要包括以下几个方面:1. 通信故障2. 打印机驱动程序问题3. 打印机硬件问题 解决上述问题包括以下步骤: 步骤1:检查打印机的连接状态 首先,检查打印机是否正常连接到计算机上并且已经打开。可以尝试重新连接打印机或更换 USB 线以解决此问题。 步…

    other 2023年6月26日
    00
  • vantdialog弹出框

    以下是“vant-dialog弹出框”的完整攻略: vant-dialog弹出框 vant-dialog是Vant组件库中的一个弹出框组件,可以用于在页面中弹出对话框,提示用户进行或展示信息。本攻略将详细讲解vant-dialog的使用方法,包括基本用法、API参数和示例说明等。 基本用法 vant-dialog的基本用法非常简单,只需要在Vue组件中引入v…

    other 2023年5月8日
    00
  • [Nginx]Nginx的一些概念

    Nginx的一些概念的完整攻略 本文将为您详细讲解Nginx的一些概念,包括反向代理、负载均衡、虚拟主机、示例说明等内容。 反向代理 反向代理是指代理服务器接收客户端请求,并将请求转发给后端服务器进行处理。在Nginx中,可以使用反向代理来实现负载均衡、缓存、安全等功能。 以下是一个反向代理的示例: http { upstream backend { ser…

    other 2023年5月6日
    00
  • Android自定义ViewGroup之CustomGridLayout(一)

    针对Android自定义ViewGroup之CustomGridLayout(一)这篇文章,我给出以下完整攻略: 1. 主要内容 介绍自定义ViewGroup的概念,以及与之相关的布局管理器(LayoutManager) 讲解如何继承ViewGroup并重写一些必要的方法 实现一个类似GridLayout的CustomGridLayout,支持动态添加子Vi…

    other 2023年6月25日
    00
  • 详细对比php中类继承和接口继承

    当我们编写面向对象的代码时,经常需要使用到类继承和接口继承。本文将详细对比PHP中类继承和接口继承,从继承的概念、语法、应用场景等多个方面进行讲解。 一、类继承 1. 概念 类继承是指子类继承父类的属性和方法,并且可以在子类中新增属性和方法,或者覆盖父类的方法。子类也可以继承父类的常量。 2. 语法 class 父类名 { // 父类的属性和方法 } cla…

    other 2023年6月27日
    00
  • Cookie的工作原理和应用详解

    Cookie的工作原理和应用详解 什么是Cookie Cookie,中文名称为“饼干”,指的是服务器存储在用户浏览器上的一小段文本信息。Cookie是HTTP协议用于保存状态信息的一种机制,主要是为了记录用户在站点内的一些个性化信息和操作历史,并通过该信息,向访问同一站点的其他页面提供服务。 Cookie如何工作 当Web浏览器访问一个页面时,页面中可能要求…

    other 2023年6月26日
    00
  • Redis在windows下安装与配置

    Redis在Windows下安装与配置 安装 下载Redis for Windows 在GitHub上可以找到 MicrosoftArchive/redis 仓库,这里提供了Windows下的Redis安装包。可以根据自己的需要下载最新或旧版本的安装程序。 安装Redis 打开下载好的Redis安装程序,选择安装路径,点”Install”,等待安装完成。 启…

    其他 2023年3月28日
    00
  • 图解JS原型和原型链实现原理

    图解JS原型和原型链实现原理 1. 什么是原型 原型是 JavaScript 中一种特殊的对象,对象具有指向其他对象的链接,这个链接被称为 prototype,也就是对象原型。 2. 原型链 原型链是多个对象通过 prototype 属性连接起来的链式结构,在 JavaScript 中,对象可以通过 proto 属性访问到它的原型,而原型本身也可以有自己的原…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部