当前位置:网站首页>AOSP CameraLatencyHistogram的原理与使用
AOSP CameraLatencyHistogram的原理与使用
2022-08-03 22:39:00 【InfoQ】

CameraLatencyHistogram是什么
源码解析
头文件定义

- mBinSizeMs 记录的是当前记录表的标准时间,比如预设一次request的标准时长为40ms
- mBinCount 记录的是直方图的等级划分数量,通常默认是10个等级
- mBins 记录的是直方图各个等级的数量
- mTotalCount 记录的是直方图的统计数量总数
类初始化

增加一个数据/清空所有数据

dump/log以及内部处理函数formatHistogramText

- 先dump数据的行头,标识dump时的记录数据量;
- 然后将直方图数据构造成字符串;
- 将直方图数据写入到对应的fd文件中。

- 先打印耗时的时间段,如33ms/66ms/99ms,最大值打印为inf (max ms)
- 然后打印每一个段数据占总数据量的百分比
100.0*mBins[i]/mTotalCount
- 最后打印一个%号。
使用该工具的位置
mDequeueBufferLatency:dequeue buffer的时延,5ms
///frameworks/av/services/camera/libcameraservice/device3/Camera3OutputStream.h
//dequebuffer默认耗时5ms,进行记录
static const int32_t kDequeueLatencyBinSize = 5; // in ms C
ameraLatencyHistogram mDequeueBufferLatency;
status_t Camera3OutputStream::getBuffersLocked(std::vector<OutstandingBuffer>* outBuffers) {
...
nsecs_t dequeueStart = systemTime(SYSTEM_TIME_MONOTONIC);
res = consumer->dequeueBuffers(&buffers);
nsecs_t dequeueEnd = systemTime(SYSTEM_TIME_MONOTONIC);
mDequeueBufferLatency.add(dequeueStart, dequeueEnd);
...
}
mBufferLimitLatency:buffer signal时延,33ms
///frameworks/av/services/camera/libcameraservice/device3/Camera3Stream.h
// Latency histogram of the wait time for handout buffer count to drop below
// max_buffers.
static const int32_t kBufferLimitLatencyBinSize = 33; //in ms
CameraLatencyHistogram mBufferLimitLatency;
status_t Camera3Stream::getBuffer(camera_stream_buffer *buffer, nsecs_t waitBufferTimeout, const std::vector<size_t>& surface_ids) {
...
nsecs_t waitStart = systemTime(SYSTEM_TIME_MONOTONIC);
if (waitBufferTimeout < kWaitForBufferDuration) {
waitBufferTimeout = kWaitForBufferDuration;
}
res = mOutputBufferReturnedSignal.waitRelative(mLock, waitBufferTimeout);
nsecs_t waitEnd = systemTime(SYSTEM_TIME_MONOTONIC);
mBufferLimitLatency.add(waitStart, waitEnd);
...
}
mRequestLatency:request执行的时延,40ms
///frameworks/av/services/camera/libcameraservice/device3/Camera3Device.h
//记录request的时延,默认一帧request时长40ms
static const int32_t kRequestLatencyBinSize = 40; // in ms
CameraLatencyHistogram mRequestLatency;
bool Camera3Device::RequestThread::threadLoop() {
...
bool submitRequestSuccess = false;
nsecs_t tRequestStart = systemTime(SYSTEM_TIME_MONOTONIC);
submitRequestSuccess = sendRequestsBatch();
nsecs_t tRequestEnd = systemTime(SYSTEM_TIME_MONOTONIC);
mRequestLatency.add(tRequestStart, tRequestEnd);
...
}
具体使用

边栏推荐
- 直播预告 | 构建业务智联,快速拥抱财务数字化转型
- 优化查询(工作中)
- Bytebase database schema change management tool
- Makefile
- 伴随着元宇宙、web3.0等概念的兴起,数字人、数字场景等诸多数字化的形态开始出现
- 嵌入式系统:时钟
- 如何设计 DAO 的 PoW 评判标准 并平衡不可能三角
- 113. Teach a Man how to fish - How to query the documentation and technical implementation details of any SAP UI5 control property by yourself
- LabVIEW code generation error 61056
- win10系统下yolov5-V6.1版本的tensorrt部署细节教程及bug修改
猜你喜欢
2022-08-03 Oracle executes slow SQL-Q17 comparison
override learning (parent and child)
Cisco ike2 IPSec configuration
一些思考:腾讯股价为何持续都低
封装、包、访问权限修饰符、static变量
noip preliminary round
node连接mysql数据库报错:Client does not support authentication protocol requested by server
七夕快乐!
【MySQL进阶】数据库与表的创建和管理
[MySQL Advanced] Creation and Management of Databases and Tables
随机推荐
win10系统下yolov5-V6.1版本的tensorrt部署细节教程及bug修改
Canvas App中点击图标生成PDF并保存到Dataverse中
FinClip最易用的智能电视小程序
Codeup brushing notes - simple simulation
关于IDO预售系统开发技术讲解丨浅谈IDO预售合约系统开发原理分析
21天打卡挑战学习MySQL——《MySQL工具的使用》第一周 第二篇
for loop exercises
嵌入式系统:概述
HDU 5655 CA Loves Stick
RPA power business automation super order!
Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D 论文笔记
决策树、GBDT、XGBOOST树的可视化
目标检测技术研究现状及发展趋势
UVa 1025 - A Spy in the Metro (White Book)
一些思考:腾讯股价为何持续都低
七夕快乐!
log4j-slf4j-impl cannot be present with log4j-to-slf4j
用于流动质押和收益生成的 Web3 基础设施
node连接mysql数据库报错:Client does not support authentication protocol requested by server
九种方式,教你读取 resources 目录下的文件路径