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

相机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接口了

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

下一篇讲解:

相关文章:

  • AI系统提示词:V0
  • PDF转Markdown/JSON软件MinerU最新1.3.12版整合包下载
  • Chrome安装代理插件ZeroOmega(保姆级别)
  • [大A量化专栏] VMware (mac本地跑QMT)
  • Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
  • 详细介绍uni-app中Composition API和Options API的使用方法
  • 第8篇:数据库中间件的分布式事务解决方案与实践
  • 【芯片设计- RTL 数字逻辑设计入门 4.2 -- 组合逻辑赋值 + 时序逻辑状态保持】
  • Python基础语法全解:从入门到精通的简明指南
  • [Python学习日记-90] 并发编程之多线程 —— 线程理论
  • B站画质补完计划(4):SDR2HDR 让观感如临其境 Part.1
  • IBM官网新闻爬虫代码示例
  • vscode vue debug
  • 机器人编程界面
  • 动态规划 熟悉30题 ---上
  • MyBatis 核心标签使用场景及用法详解
  • <2>-MySQL库的操作
  • 【网络安全】Qt免杀样本分析
  • 国产PC系统
  • 网站案例实战,片段
  • 企业网站建设排名推荐/电商平台运营
  • wordpress菜单子页面/seo门户网价格是多少钱
  • 减肥药可以做网站吗/百度推广登录平台app
  • 如何建设一个彩票网站/软件培训机构有哪些?哪个比较好
  • 网站建设费计什么科目/国际新闻大事
  • 做网站使用什么软件的/最新地址