Android Camera性能分析 - 第26讲 DequeueBuffer Latency

news2024/11/13 16:48:49

本讲是Android Camera性能分析专题的第26讲 ​,我们介绍DequeueBuffer Latency,包括如下内容:

  1. DequeueBuffer Latency是什么
  2. DequeueBuffer Latency配置
  3. DequeeuBuffer Latency实战

视频在线观看:

  • 极客笔记:
    极客笔记在线课程

加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815
– Wechat: 极客笔记圈

DequeueBuffer Latency是什么

DequeueBuffer Latency 用于衡量/记录从BufferQueue里面获取Buffer的耗时。

影响:

  • 如果该耗时太长,会拉低CaptureRequest的帧率,具体体现在送给HAL的CaptureRequest速度变慢。

每一个Camera3OutputStream都会统计DequeueBuffer Latency。

  • 这里的Output/Input Stream是相对HAL而言,HAL输出的流是Output Stream,输入给HAL的流是Input Stream

DequeueBuffer:

  • 通过GraphicBufferProducer从BufferQueue里面获取一张未使用的Buffer

DequeueBuffer Latency配置

DequeueBuffer Latency直方图配置

  • 分成10份(默认值),间隔为5ms

  • static const int32_t kDequeueLatencyBinSize = 5; // in ms

添加Sample的时机

  • 在每个CaptureRequest的prepareHalRequests中会调用getBuffer,进而触发到对BufferQueue的DequeueBuffer操作。

  • Camera3OutputStream会对每次dequeueBuffer操作耗时做记录,然后作为一个Sample添加到CameraLatencyHistogram。

DequeeuBuffer Latency实战

  • 代码讲解

    nsecs_t dequeueStart = systemTime(SYSTEM_TIME_MONOTONIC);
    
    size_t batchSize = mBatchSize.load();
    if (batchSize == 1) {
      sp anw = consumer;
      res = anw->dequeueBuffer(anw.get(), anb, fenceFd);
    } else {
      std::unique_lock batchLock(mBatchLock);
      res = OK;
      if (mBatchedBuffers.size() == 0) {
          if (remainingBuffers == 0) {
              ALOGE("%s: cannot get buffer while all buffers are handed out", __FUNCTION__);
              return INVALID_OPERATION;
          }
          if (batchSize > remainingBuffers) {
              batchSize = remainingBuffers;
          }
          batchLock.unlock();
          // Refill batched buffers
          std::vector batchedBuffers;
          batchedBuffers.resize(batchSize);
          res = consumer->dequeueBuffers(&batchedBuffers);
          batchLock.lock();
          if (res != OK) {
              ALOGE("%s: batch dequeueBuffers call failed! %s (%d)",
                      __FUNCTION__, strerror(-res), res);
          } else {
              mBatchedBuffers = std::move(batchedBuffers);
          }
      }
    
      if (res == OK) {
          // Dispatch batch buffers
          *anb = mBatchedBuffers.back().buffer;
          *fenceFd = mBatchedBuffers.back().fenceFd;
          mBatchedBuffers.pop_back();
      }
    }
    
    nsecs_t dequeueEnd = systemTime(SYSTEM_TIME_MONOTONIC);
    mDequeueBufferLatency.add(dequeueStart, dequeueEnd);
  • 实战演示,请参阅视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript正则表达式:正则表达式中的特殊字符

正则表达式的组成 一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单和特殊字符的组合,比如 /ab*c/ 。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ 、$ 、 等。 特殊字符非…

logos_HSST简要说明

HSST分为PCS和PMA, TX PCS:8b/10b编码 RX PCS TX PMA RX PMA 含1个HSST,有4个全双工收发LANE。 LINE和PLL的关系 PLL0可以为4个LANE提供时钟,PLL1只能为LANE2&3提供时钟。 PLL VCO 的转出频率范围为 2.125GHz~3.1875GHz。PLL…

【关于Linux中----文件接口、描述符、重定向、系统调用和缓冲区】

文章目录一、C文件接口中的那些事儿二、接口介绍三、文件描述符fd四、重定向五、缓冲区一、C文件接口中的那些事儿 众所周知,Linux是用C语言写成的,那在这篇文章的开头,自然要先对C语言中的文件操作进行一个概括! 写文件&#x…

20221203英语学习

今日新词: lecturer n.讲演者, 讲课者, 讲授者, (尤指英国大学的)讲师 hypothetical adj.假设的, 假定的 rather adv.相当; 宁可, 宁愿; (常用于or后) 更确切些 ring n.戒指, 指环, 环状物; 圆圈; 敲钟, 按铃; 铃声, 钟声 yes adv.(回答…

1.2 Hadoop简介-hadoop-最全最完整的保姆级的java大数据学习资料

文章目录1.2 Hadoop简介1.2.1 什么是Hadoop1.2.2 Hadoop的起源1.2.3 Hadoop的特点1.2.4 Hadoop的发行版本1.2.5 Apache Hadoop版本更迭1.2.6 第六节 Hadoop的优缺点1.2 Hadoop简介 1.2.1 什么是Hadoop ​ Hadoop 是一个适合大数据的分布式存储和计算平台 ​ 如前所述&#x…

html5期末大作业:基于HTML+CSS技术实现——传统手工艺术雕刻网站(3页)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

深度强化学习的组合优化[1] 综述阅读笔记

文章目录前言零、组合优化问题基础1. 定义(1)定义(2)常见问题2. 方法(1)精确方法(2)近似方法(3)深度学习方法3. 文章架构一、概述1. 神经网络(1&a…

【图文教程】若依前后端分离版本-菜单怎么设置

在使用若依前后端分离版本作为基础架构的时候,需要新建菜单怎么操作?本文凯哥将详细讲解怎么添加。 1:登录若依系统后,[系统管理]>>[菜单] 先新建一个一级菜单。可以模仿【系统管理】菜单来创建: 系统菜单&am…

226.翻转二叉树

226.翻转二叉树 题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入:root [2,1,3] 输出:[2,3,…

神器必会!特别好使的编辑器Source Insight

已剪辑自: https://mp.weixin.qq.com/s/nA9VJeMjC4gDpDSI8r-2FA “Source Insight(以下简称SI)是世界上最好的编辑器”,说这句话不知道会不会出门被打呢?-_- 中国古话说得好,“文无第一,武无第二”&#x…

都2202年了,不会有人还不会发布npm包吧

背景 介绍了axios的二次封装用于支持常规请求及自定义请求,并对同一时间内的相同请求做拦截处理(如果您没有阅读过这篇文章,建议您花费3分钟大致了解)。恰逢最近准备写一个跨框架组件库(工作量很大,前端三…

浏览器存储(webStorage)常用API以及简单使用

前言 最近正值世纪杯期间,不知道大家心目中的球队成绩如何,在此期间我学了浏览器存储(webStorage)以及API,下面就分享给大家 浏览器存储(webStorage) 存储内容不是Vue团队打造的,原本的js中就有,所以可以不适用脚手架编译&…

UGUI性能优化学习笔记(番外)一些零星的优化点

一、Overdraw 1.1 什么是Overdraw overdraw也就是过度绘制,是指在每个渲染周期内,屏幕上每个像素最理想只渲染一次,但是由于UI元素的重叠会导致像素会被渲染多次,每次渲染从CPU阶段到GPU阶段会消耗大量资源,如果这种…

[附源码]计算机毕业设计JAVA学习资源共享与在线学习系统

[附源码]计算机毕业设计JAVA学习资源共享与在线学习系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: S…

Spring统一异常处理捕获不到CompletableFuture异步编排中的异常的问题

Spring统一异常处理捕获不到CompletableFuture异步编排中的异常的问题Spring统一异常处理捕获不到CompletableFuture异步编排中的异常的问题Spring统一异常处理简单例子多线程无法捕获场合正常场合(不使用异步编排)代码ServiceImExcpHandlerController结…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校车辆租赁管理系统23qhn

要开始我们毕业设计的第一步的关键就是选好我们的课题,有的同学开始选题的时候想着按照传统的课题延续下去,在设计题目时,不要过于笼统广泛,选择题目其实并不难,要多从自身的角度出发,要结合你们当前所处的…

【java】网络编程

文章目录网络编程概述基本概念IP地址概念InetAddress端口与协议概念UDP通信编程UDP发送数据UDP接受数据UDP通信程序练习TCP通信编程TCP发送数据TCP接收数据TCP通信程序练习网络编程概述 基本概念 IP地址概念 终端检查: InetAddress package heima.网络编程;impor…

nginx配置文件 location语法

1:nginx官方文档给出location语法如下: location [|~|~*|^~] uri { ....... }2:路径匹配 开头表示精确匹配。如 A 中只匹配根目录结尾的请求,后面不能带任何字符串;^~ 开头表示uri以某个常规字符串开头,不是…

字符串中第二大的数字(遍历)

力扣链接:力扣 给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。 混合字符串 由小写英文字母和数字组成。 示例 1: 输入:s "dfa12321afd" 输出&…

Keras生成式学习(五)

生成式深度学习 生成式学习即创造学习,深度学习开始创造 一、使用LSTM 生成文本 给定前面的标记(token,通常是单词或字符),能够对下一个标记的概率进行建模的任何网络都叫作语言模型(language model&…