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

相机Camera日志分析之二十七:高通相机Camx 基于预览1帧的process_capture_result二级日志分析详解

【关注我,后续持续新增专题博文,谢谢!!!】

上一篇我们讲了

        这一篇我们开始讲 相机Camera日志分析之二十七:高通相机Camx 基于预览1帧的process_capture_result二级日志分析详解

目录

一、背景

二、:process_capture_result二级日志如下

三、:process_capture_result二级日志分析详解

四、:process_capture_result二级日志关键字

五、:总结


一、背景

1:【效率决定成长空间】无论什么开发,分析日志是解决问题的法宝。且是最有效最常用的调试工具,特别是在Android或Linux领域下,log分析是开发必备技能,然而log分析效率参差不齐,你分析一份日志要一天,别人分析只需要一个小时,作何感想?别人一年的学习成果可能是你几年才能学会。

2:【巨量日志降低了开发效率】接触过Android日志,就清楚日志量非常大。几十个进程几百个线程同时并行打印日志。而Camera领域日志量极大,因为预览一般是每秒30帧的日志量,录屏一般是每秒60帧的日志量,少则几万行日志,多则几十万行日志,更多则多个日志总量几百万行日志。

3:【日志梯度分级来提效】开发追求效率,如何快速有效挖掘出问题,并如何解决问题变得尤为重要。此专题将以梯度分级日志来分析日志,让日志流程变得简单化,提高解决问题的效率。

4:【举一反三】当前以高通CamX架构为例讲解Camera日志,方式通用,其他领域模块均可效仿借鉴。

5:【开发思维决定成长高度】当前讲述的是Camera领域log分析梯度分级讲解,讲究的是一种分析技巧,分析思维,一种感悟。技术路线的提升空间,需要更多开发技巧和开发学习能力去提升。技术大拿分析问题,可以从日志快速定位问题并解决问题,有充分的时间去学习更多知识,成长速度极快。同一起跑线,学习能力,开发效率等等都决定了程序员的成长提升空间。记得我毕业三年,同学之间的差距无限拉大,一些人还在几千块薪水,你已经是他的四五倍了,人与人的差距就是短短几年就拉开了。

二、:process_capture_result二级日志如下

PS:搜索类似【Start proc】中括号就有颜色体现了。

这里添加了【 关键字,过滤的是核心简化的核心流程日志过程,更加直观调用整个流程。

08-29 22:59:42.126   696   837 E CamX    : [ERROR][CORE   ] camxnode.cpp:3675 【CSLFenceCallback()】【开始回调result】 NodeName:【【IFE】】 : Type 65536 Fence 18 signaled with success in node fence handler FOR 34
08-29 22:59:42.128   696   837 E CamX    : [ERROR][CORE   ] camxnode.cpp:3675 CSLFenceCallback() NodeName:【【IFE】】 : Type 65536 Fence 91 signaled with success in node fence handler FOR 34
08-29 22:59:42.129   696   837 E CamX    : [ERROR][CORE   ] camxnode.cpp:3675 CSLFenceCallback() NodeName:【【IFE】】 : Type 65536 Fence 35 signaled with success in node fence handler FOR 34
08-29 22:59:42.169   696  1356 E CamX    : [ERROR][HAL    ] camxsession.cpp:2372 ProcessResults() bruceCamxLog: 
08-29 22:59:42.171   696  1356 E CHIUSECASE: [ERROR  ] chxadvancedcamerausecase.cpp:5161 ProcessResult() bruceChiLog:     
08-29 22:59:42.178   696  1357 E CamX    : [ERROR][CORE   ] camxnode.cpp:3789 ProcessFenceCallback() NodeName:【【IFE】】, numUnsignaledFences 5, requestId 34
08-29 22:59:42.197   696  1357 E CamX    : [ERROR][CORE   ] camxnode.cpp:3789 ProcessFenceCallback() NodeName:【【IPE】】, numUnsignaledFences 0, requestId 33
08-29 22:59:42.210   696  1357 E CamX    : [ERROR][CORE   ] camxnode.cpp:3789 ProcessFenceCallback() NodeName:【【IFE】】, numUnsignaledFences 4, requestId 34
08-29 22:59:42.217   696  1356 D CHIUSECASE: [FULL   ] chxadvancedcamerausecase.cpp:6381 FindFeatureToProcessResult() ProcessResult SessionId 1 frameNum 32 feature type: 1
08-29 22:59:42.217   696  1356 D CHIUSECASE: [FULL   ] chxadvancedcamerausecase.cpp:6381 FindFeatureToProcessResult() ProcessResult SessionId 1 frameNum 32 feature type: 1
08-29 22:59:42.218   696  1356 E CHIUSECASE: [ERROR  ] chxfeaturezsl.cpp:454 ProcessResult() bruceChiLog:     
08-29 22:59:42.221   696  1356 I CHIUSECASE: [INFO   ] chxfeaturezsl.cpp:490 ProcessResult() Realtime frame 32. Metadata: 0x74a80ae9c0 NumBuffers: 2 Timestamp: 55277127634 Sent: 0
08-29 22:59:42.231   696  1357 E CamX    : [ERROR][CORE   ] camxnode.cpp:3789 ProcessFenceCallback() NodeName:【【IFE】】, numUnsignaledFences 3, requestId 34
08-29 22:59:42.233   696  1356 E CHIUSECASE: [ERROR  ] chxadvancedcamerausecase.cpp:3688 ProcessAndReturnFinishedResults() bruceChiLog:    【处理并返回完成所有结果】 
08-29 22:59:42.235   696  1356 E CHIUSECASE: [ERROR  ] chxusecase.cpp:765 ReturnFrameworkResult() bruceChiLog:    【返回Framework Result】 
08-29 22:59:42.236   696  1356 I CHIUSECASE: [INFO   ] chxusecase.cpp:773 ReturnFrameworkResult() chiOriginalOverrideFrameNum: 32 frame_number: 32 resultFrameIndexF: 32 FW: 32, Buffer Count: 1 RESULT: 0x74aa1116c0
08-29 22:59:42.237   696  1356 D CHIUSECASE: [FULL   ] chxusecase.cpp:791 ReturnFrameworkResult() m_numberOfPendingOutputBuffers = 1
08-29 22:59:42.238   696  1356 D CHIUSECASE: [FULL   ] chxusecase.cpp:798 ReturnFrameworkResult() pResult->num_output_buffers 0 pending buffers 1
08-29 22:59:42.242   696  1356 E CHIUSECASE: [ERROR  ] chxextensionmodule.cpp:2782 ReturnFrameworkResult() bruceChiLog:     
08-29 22:59:42.244   696  1356 E CamX    : [ERROR][HAL    ] camxhaldevice.cpp:231 ProcessCaptureResult() bruceCamxLog: 22222222222222222222222222222222222222222222
08-29 22:59:42.247   696  1356 E CamX    : [ERROR][HAL    ] camxhal3entry.cpp:202 process_capture_result() bruceCamxLog: 1111111111111111111111111111111111111111111111111

三、:process_capture_result二级日志分析详解

E CamX    : [ERROR][CORE   ] camxnode.cpp:3675 【CSLFenceCallback()】【开始回调result,通知到Pipeline,此时Pipeline会判断当前Node的Output port 是否是Sink Port(输出到CHI),如果不是,则会更新依赖项到DRQ中,并且将不存在依赖项的Node移到m_readyNodes队列中3.,然后调用DispatchReadyNdoes继续进入到DRQ中流转,如果是Sink Port,则表示此Node是整个Pipeline的最末端。调用sinkPortFenceSignaled将数据给到Session中,最后通过调用Session中的NotifyResult将结果发送到CHI中。
】 NodeName:【【IFE】】 : Type 65536 Fence 18 signaled with success in node fence handler FOR 34
E CamX    : [ERROR][CORE   ] camxnode.cpp:3675 CSLFenceCallback() NodeName:【【IFE】】 : Type 65536 Fence 91 signaled with success in node fence handler FOR 34
E CamX    : [ERROR][CORE   ] camxnode.cpp:3675 CSLFenceCallback() NodeName:【【IFE】】 : Type 65536 Fence 35 signaled with success in node fence handler FOR 34
E CamX    : [ERROR][HAL    ] camxsession.cpp:2372 【ProcessResults()】 : 
E CHIUSECASE: [ERROR  ] chxadvancedcamerausecase.cpp:5161 【ProcessResult()】【将结果发送到具体的Feature中】 :     
E CamX    : [ERROR][CORE   ] camxnode.cpp:3789 【ProcessFenceCallback()】【3.通知pipeline,并且调用pipeline的NonSinkPortFenceSignaled方法,在该方法内部又会去调用DRQ的FenceSignaledCallback方法,而该方法又会调用UpdateDependency更新依赖,并将依赖项都满足的Node从m_deferredNodes取出加入到m_readyNodes,然后调用dispatchReadyNodes继续进行处理。】 NodeName:【【IFE】】, numUnsignaledFences 5, requestId 34
E CamX    : [ERROR][CORE   ] camxnode.cpp:3789 ProcessFenceCallback() NodeName:【【IPE】】, numUnsignaledFences 0, requestId 33
E CamX    : [ERROR][CORE   ] camxnode.cpp:3789 ProcessFenceCallback() NodeName:【【IFE】】, numUnsignaledFences 4, requestId 34
D CHIUSECASE: [FULL   ] chxadvancedcamerausecase.cpp:6381 【FindFeatureToProcessResult()】【查找feature去执行结果】 ProcessResult SessionId 1 frameNum 32 feature type: 1
D CHIUSECASE: [FULL   ] chxadvancedcamerausecase.cpp:6381 FindFeatureToProcessResult() ProcessResult SessionId 1 frameNum 32 feature type: 1
E CHIUSECASE: [ERROR  ] chxfeaturezsl.cpp:454 ProcessResult() :     
I CHIUSECASE: [INFO   ] chxfeaturezsl.cpp:490 ProcessResult() Realtime frame 32. Metadata: 0x74a80ae9c0 NumBuffers: 2 Timestamp: 55277127634 Sent: 0
E CamX    : [ERROR][CORE   ] camxnode.cpp:3789 ProcessFenceCallback() NodeName:【【IFE】】, numUnsignaledFences 3, requestId 34
E CHIUSECASE: [ERROR  ] chxadvancedcamerausecase.cpp:3688 【ProcessAndReturnFinishedResults()】 :    【处理并返回完成所有结果】 
E CHIUSECASE: [ERROR  ] chxusecase.cpp:765 【ReturnFrameworkResult()】 :    【返回Framework Result】 
I CHIUSECASE: [INFO   ] chxusecase.cpp:773 ReturnFrameworkResult() chiOriginalOverrideFrameNum: 32 frame_number: 32 resultFrameIndexF: 32 FW: 32, Buffer Count: 1 RESULT: 0x74aa1116c0
D CHIUSECASE: [FULL   ] chxusecase.cpp:791 ReturnFrameworkResult() m_numberOfPendingOutputBuffers = 1
D CHIUSECASE: [FULL   ] chxusecase.cpp:798 ReturnFrameworkResult() pResult->num_output_buffers 0 pending buffers 1
E CHIUSECASE: [ERROR  ] chxextensionmodule.cpp:2782 ReturnFrameworkResult() :     
E CamX    : [ERROR][HAL    ] camxhaldevice.cpp:231 【ProcessCaptureResult()】 : 22222222222222222222222222222222222222222222
E CamX    : [ERROR][HAL    ] camxhal3entry.cpp:202 【process_capture_result()】【返回到Google Camera HAL3接口了】

四、:process_capture_result二级日志关键字

process_capture_result|CSLFenceCallback|NodeThreadJobFamilyCb|ProcessFenceCallback|SinkPortFenceSignaled|InjectResult|DispatchResults|ProcessResult|ProcessAndReturnFinishedResults|ReturnFrameworkResult|ReturnFrameworkResult|processCaptureResult

五、:总结

当前日志为process_capture_result的核心过程,涉及过程:

  1. KMD处理完request后,会回调,最终调用到Camx的CSLFenceCallback回调函数。开始回调result,通知到Pipeline,此时Pipeline会判断当前Node的Output port 是否是Sink Port(输出到CHI),如果不是,则会更新依赖项到DRQ中,并且将不存在依赖项的Node移到m_readyNodes队列中3.,然后调用DispatchReadyNdoes继续进入到DRQ中流转,如果是Sink Port,则表示此Node是整个Pipeline的最末端。调用sinkPortFenceSignaled将数据给到Session中,最后通过调用Session中的NotifyResult将结果发送到CHI中。
  2. 回调执行到ProcessFenceCallback
  3. FindFeatureToProcessResult查找feature去执行结果
  4. ProcessAndReturnFinishedResults处理并返回完成所有结果
  5. ReturnFrameworkResult返回Framework Result
  6. process_capture_result返回到Google Camera HAL3接口了

【关注我,后续持续新增专题博文,谢谢!!!】

下一篇讲解:

http://www.xdnf.cn/news/12334.html

相关文章:

  • AOP实现Restful接口操作日志入表方案
  • 事件监听 ——CAD C#二次开发
  • ES6——数组扩展之Set数组
  • 接口限频算法:漏桶算法、令牌桶算法、滑动窗口算法
  • 小黑一层层削苹果皮式大模型应用探索:langchain中智能体思考和执行工具的demo
  • 深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
  • 鸿蒙开发——如何修改模拟器的显示图标/标题
  • 车牌识别技术解决方案
  • day46打卡
  • 如何防止服务器被用于僵尸网络(Botnet)攻击 ?
  • 进一步探究synchronized
  • 408第一季 - 数据结构 - 线性表II
  • Redis哨兵模式
  • 获1.3亿美元融资,NewLimit利用机器学习指导表观遗传程序设计,延长人类健康寿命研究已有初级成果
  • 自建 dnslog 回显平台:渗透测试场景下的隐蔽回显利器
  • Webpack的基本使用 - babel
  • leetcode78. 子集
  • vue项目引入tailwindcss
  • 实战设计模式之模板方法模式
  • SpringBoot 自动化部署实战:CI/CD 整合方案与避坑指南
  • 数据库正常,但后端收不到数据原因及解决
  • 基于sqlite的任务锁(支持多进程/多线程)
  • RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
  • BugKu Web渗透之需要管理员
  • vue+elementui 网站首页顶部菜单上下布局
  • Linux共享内存原理及系统调用分析
  • N8N概述
  • vscode vue debug
  • solidity中sar和>>的区别
  • C++.OpenGL (1/64) 创建窗口(Hello Window)