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

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日

相关文章

  • Java多线程并发之ReentrantLock

    Java多线程并发之ReentrantLock 概述 在java中,多线程并发编程是非常重要的一部分,而ReentrantLock是一种替代Synchronized关键词的工具,可以用于线程同步,实现线程安全和资源竞争控制。 相对于Synchronized关键词,ReentrantLock在性能上更加优越,更加灵活,具有更强的扩展性和可重入性。 本文将对Re…

    other 2023年6月27日
    00
  • Win10 v2004版生命周期官宣:主流支持在2021年12月14日结束

    Win10 v2004版生命周期官宣:主流支持在2021年12月14日结束是什么? 这表示微软将在2021年12月14日结束对Windows 10 v2004版的主流支持。这意味着微软将停止为Windows 10 v2004版发布新的功能更新,并只发布关键的安全更新。 什么是主流支持和延长支持? Windows 10的生命周期分为两个阶段:主流支持和延长支持…

    other 2023年6月27日
    00
  • Adobe CS5(Photoshop CS5/Flash CS5)真正官方简体中文完全版 官方下载地址

    Adobe CS5(Photoshop CS5/Flash CS5)真正官方简体中文完全版 官方下载地址攻略 简介 Adobe CS5是Adobe公司推出的一套集成了多个专业设计和开发工具的软件套装,其中包括Photoshop CS5和Flash CS5。本攻略将详细介绍如何获取Adobe CS5的真正官方简体中文完全版,并提供官方下载地址。 步骤 步骤一:…

    other 2023年8月4日
    00
  • 制作win2003自动安装盘-集成补丁/Raid及硬件驱动五(用Ultraiso封装操作系统)

    制作Win2003自动安装盘是一项非常实用的技能。下面是制作Win2003自动安装盘-集成补丁/Raid及硬件驱动五(用Ultraiso封装操作系统)的完整攻略: 1. 准备工具和资料 一张 Win2003 安装光盘 UltraISO 软件 集成补丁、RAID 及硬件驱动程序 一个 U 盘或者可以刻录光盘的空白 CD/DVD 2. 将 Win2003 安装光…

    other 2023年6月25日
    00
  • apkmirror官网入口

    APKMirror 可能是最好的 Android APK 下载网站。 该网站由创建Android新闻网站 Android Police 的团队拥有和运营,安全性和稳定性得以保障。 从安全的角度来看,APKMirror 有一些强大的策略: 工作人员在发布前验证上传到网站的所有 APK; 该网站将新版本应用程序的加密签名与以前的版本进行匹配(以确保真正的开发人员…

    2023年4月16日
    00
  • SpringBoot跨域问题的五种解决方式

    当使用SpringBoot开发Web应用时,跨域问题是很常见的。本文将介绍五种常见的解决方式: 1. 使用@CrossOrigin注解 在Controller层的方法上添加@CrossOrigin注解,表示允许跨域请求。例如: @RestController public class MyController { @GetMapping("/hel…

    other 2023年6月26日
    00
  • paypal提现到派安盈无法绑定firstcenturybank账号怎么办

    如果您在PayPal上提现到派安盈账户时无法绑定First Century Bank账号,可以按照以下攻略进行操作: 确认账户信息 先,您需要确认您的派安盈账户信息是否正确。请检查您的账户名、账户号码、银行名称等信息是否正确。如果信息不正确,您需要联系派安盈客服进行修改。 联系First Century Bank客服 如果您的派安盈账户信息正确但仍然无法绑定…

    other 2023年5月9日
    00
  • 深入解析Java中的内部类

    深入解析Java中的内部类 什么是内部类 内部类(Inner class)是Java中一种独特的类形式,它定义在其他类的内部。与传统的类不同,内部类可以访问包含它的类的私有成员和方法,也可以用来实现封装、组织和扩展性等特性。 内部类可以划分为以下几种类型: 成员内部类(Member Inner class) 局部内部类(Local Inner class) …

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