当前位置: 首页 > news >正文

android display 笔记(十三)surfcaeflinger的DEQUEUED、QUEUED

  1. BufferQueue 的核心作用
    BufferQueue 是 生产者-消费者模型 的核心组件,协调应用(生产者)和 SurfaceFlinger(消费者)之间的图形缓冲区(GraphicBuffer)传递。

生产者:应用(如 Camera、游戏)通过 dequeueBuffer 获取缓冲区并填充内容。

消费者:SurfaceFlinger 通过 acquireBuffer 获取已填充的缓冲区并合成显示。

FREE :缓冲区空闲,可被生产者获取 初始化或 releaseBuffer 后 缓冲区池中的待分配状态

DEQUEUED :缓冲区被生产者获取,正在填充数据(如 GPU 渲染或 Camera 写入) dequeueBuffer() 应用调用 Canvas.lock() 或 OpenGL 渲染前

QUEUED :生产者已填充数据并提交给 BufferQueue,等待消费者(SurfaceFlinger)处理 queueBuffer() 应用完成帧渲染后提交

ACQUIRED :消费者(SurfaceFlinger)已获取缓冲区,准备合成或显示 acquireBuffer() SurfaceFlinger 正在合成该帧

队列阻塞(QUEUED 积压)
现象:
SurfaceFlinger 未及时消费 QUEUED 缓冲区,导致应用渲染阻塞。

原因:

VSync 信号丢失或合成耗时过长。

消费者未及时调用 releaseBuffer。

解决:

adb shell dumpsys SurfaceFlinger --latency  # 检查帧提交延迟

相关文章:

  • android中dp和px的关系
  • 高阶函数/柯里化/纯函数
  • 常用图像滤波及色彩调节操作(Opencv)
  • 改进神经风格迁移
  • 巧用递归算法:破解编程难题的“秘密武器”
  • MySQL 5.7.30 Linux 二进制安装包详解及安装指南
  • 容器初始化Spring Boot项目原理,即web项目(war)包涉及相关类对比详解
  • Mac 下载 PicGo 的踩坑指南
  • 聊聊Spring AI的Multimodality
  • 汇编获取二进制
  • 穿梭在数字王国:Python进制转换奇遇记
  • JMeter的关联
  • 日常记录-设置新增pve的ct容器
  • 基于HTML + jQuery + Bootstrap 4实现(Web)地铁票价信息生成系统
  • Java中parallelStream并行流使用指南
  • PostgreSQL有类似oracle的move表吗
  • 哈希表系列一>存在重复元素II 存在重复元素I
  • Honeyview:快速浏览各类图像
  • 宝塔Mysql远程连接记录
  • 电感详解:定义、作用、分类与使用要点
  • asp动态网站开发案例教程 pdf/指数基金有哪些
  • 网页设计做一个网站/南宁seo网络推广
  • 手机销售网站怎么做/重庆百度推广排名
  • 大厂做网站shijuewang/发布平台有哪些
  • 网站打不开原因检测/爱情链接
  • 网上怎么做网站赚钱/一级消防工程师考试