当前位置:网站首页>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);
...
}具体使用

边栏推荐
- Makefile
- 剑指offer第22题-链表中倒数第K个节点
- pikachu Over permission 越权
- 如何设计 DAO 的 PoW 评判标准 并平衡不可能三角
- Quickly build a website with static files
- 什么是memoization,它有什么用?
- Analysys Analysis: The transaction scale of China's online retail B2C market in Q2 2022 will reach 2,344.47 billion yuan
- [N1CTF 2018]eating_cms
- 投资性大于游戏性 NFT游戏到底是不是门好生意
- 21天打卡挑战学习MySQL—Day第一周 第一篇
猜你喜欢

【bug】汇总Elipse项目中代码中文乱码解决方法!

113. 授人以渔 - 如何自行查询任意 SAP UI5 控件属性的文档和技术实现细节

亿流量大考(2):开发一套高容错分布式系统

Bytebase数据库 Schema 变更管理工具

Boss: There are too many systems in the company, can you realize account interoperability?

Teach a Man How to Fish - How to Query the Properties of Any SAP UI5 Control by Yourself Documentation and Technical Implementation Details Demo

中国企业构建边缘计算解决方案的最佳实践

Network basic learning series four (network layer, data link layer and some other important protocols or technologies)
![[b01lers2020]Life on Mars](/img/d0/d5c9b7224542c8843ce29adc7ef713.png)
[b01lers2020]Life on Mars

encapsulation, package, access modifier, static variable
随机推荐
为什么我们需要回调
Testng监听器
Research status of target detection at home and abroad
for loop exercises
21天打卡挑战学习MySQL——《Window下安装MySql》第一周 第三篇
PowerMockup 4.3.4::::Crack
First domestic open source framework 】 【 general cloud computing framework, any program can be made into cloud computing.
互联网用户账号信息管理规定今起施行:必须严打账号买卖灰产
log4j-slf4j-impl cannot be present with log4j-to-slf4j
mysql如何将表结构导出到excel
HCIP BGP实验报告
工作小计 QT打包
JPA Native Query(本地查询)及查询结果转换
CAS:153162-70-0_N-BOC-6-Biotinamidohexylamine
静态文件快速建站
utils timer
关于IDO预售系统开发技术讲解丨浅谈IDO预售合约系统开发原理分析
目标检测的国内外研究现状
Click the icon in Canvas App to generate PDF and save it to Dataverse
【bug】汇总Elipse项目中代码中文乱码解决方法!