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

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

上一篇我们讲了: 相机Camera日志分析之二十三:高通相机Camx 基于预览1帧的process_capture_request二级日志分析详解

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

目录

一、背景

二、:process_capture_request三级日志如下

三、:process_capture_request三级日志分析详解

四、:process_capture_request三级日志关键字

五、:总结


一、背景

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

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

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

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

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

二、:process_capture_request三级日志如下

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

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

(由于request日志量太大,就不贴二级日志,单独贴三级日志了)

复制代码
CamX    : [ERROR][SENSOR ] camxsensornode.cpp:3280 LoadSensorConfigCmds() 【Streamon configuration successful!】【sersor xml Streamon配置成功】
CamX    : [ERROR][SENSOR ] camxsensornode.cpp:3280 LoadSensorConfigCmds() 【Streamon configuration successful!】【sersor xml Streamon配置成功】
CamX    : [ERROR][CHI    ] camxchinodewrapper.cpp:2533 PrepareStreamOn() Node::ZSLPreviewRaw_ChiNodeWrapper0 Comp::com.qti.node.memcpy Prepare stream on
CHIUSECASE: [FULL   ] chxextensionmodule.cpp:2926 GetNumPCRsBeforeStreamOn() EarlyPCR: chiextensionModule 0
CamX    : [ERROR][HAL    ] camxchi.cpp:2342 ChiActivatePipeline() : 
CamX    : [ERROR][HAL    ] camxsession.cpp:1314 【StreamOn()】【传递到session去上电】 : 
CamX    : [ERROR][HAL    ] camxpipeline.cpp:500 StreamOn() : 
CamX    : [ERROR][CORE   ] camxpipeline.cpp:527 【StreamOn()】 【ZSLPreviewRaw_0】【传递到pipeline去上电】 【StreamingOn】 for pipeline: 0x74a97fe000
CamX    : [ERROR][CHI    ] camxchinodewrapper.cpp:2554 OnStreamOn() Node::ZSLPreviewRaw_ChiNodeWrapper0 Comp::com.qti.node.memcpy On stream on
CamX    : [ERROR][HAL    ] camxchi.cpp:2418 ChiSubmitPipelineRequest() : 
CamX    : [ERROR][HAL    ] camxnode.cpp:1442 SetupRequest() : 
CamX    : [ERROR][HAL    ] camxnode.cpp:1442 【SetupRequest()】【Request传递到node】 : 
CamX    : [ERROR][HAL    ] camxnode.cpp:1442 SetupRequest() : 
CamX    : [ERROR][HAL    ] camxnode.cpp:1442 SetupRequest() : 
CamX    : [ERROR][HAL    ] camxchi.cpp:2418 ChiSubmitPipelineRequest() : 
CamX    : [ERROR][HAL    ] camxnode.cpp:1442 SetupRequest() : 
CamX    : [ERROR][HAL    ] camxnode.cpp:1442 SetupRequest() : 
CamX    : [ERROR][HAL    ] camxnode.cpp:1442 SetupRequest() : 
CamX    : [ERROR][HAL    ] camxnode.cpp:1442 SetupRequest() : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 【DispatchReadyNodes()】 :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 【DeferredWorkerWrapper()】【该方法是m_hDeferredWorker线程的处理函数,主要用于处理需要下发request的Node,同时再次更新依赖项,最后会再次调用DispatchReadyNodes开始处理。】 : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 【DeferredWorkerWrapper()】【该方法是m_hDeferredWorker线程的处理函数,主要用于处理需要下发request的Node,同时再次更新依赖项,最后会再次调用DispatchReadyNodes开始处理。】 : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 DeferredWorkerWrapper() : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 DeferredWorkerWrapper() : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX    : [ERROR][CORE   ] camxdeferredrequestqueue.cpp:1083 DispatchReadyNodes() Post job for NodeName:【【AutoFocus:0】】, request 36
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 DeferredWorkerWrapper() : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX    : [ERROR][HAL    ] camxchi.cpp:2418 ChiSubmitPipelineRequest() : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 DeferredWorkerWrapper() : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 DeferredWorkerWrapper() : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 DeferredWorkerWrapper() : 
CamX    : [ERROR][HAL    ] camxdeferredrequestqueue.cpp:356 DeferredWorkerWrapper() :

三、:process_capture_request三级日志分析详解

CamX : [ERROR][SENSOR ] camxsensornode.cpp:3280 LoadSensorConfigCmds() 【Streamon configuration successful!】【sersor xml Streamon配置成功】
CamX : [ERROR][HAL ] camxsession.cpp:1314 【StreamOn()】【传递到session去上电】 :
CamX : [ERROR][CORE ] camxpipeline.cpp:527 【StreamOn()】 【ZSLPreviewRaw_0】【传递到pipeline去上电】 【StreamingOn】 for pipeline: 0x74a97fe000
CamX : [ERROR][HAL ] camxnode.cpp:1442 【SetupRequest()】【Request传递到node】 :
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 【DispatchReadyNodes()】 :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:356 【DeferredWorkerWrapper()】【该方法是m_hDeferredWorker线程的处理函数,主要用于处理需要下发request的Node,同时再次更新依赖项,最后会再次调用DispatchReadyNodes开始处理。】 :
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:356 【DeferredWorkerWrapper()】【该方法是m_hDeferredWorker线程的处理函数,主要用于处理需要下发request的Node,同时再次更新依赖项,最后会再次调用DispatchReadyNodes开始处理。】 :
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX : [ERROR][CORE ] camxdeferredrequestqueue.cpp:1083 DispatchReadyNodes() Post job for NodeName:【【AutoFocus:0】】, request 36
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:662 AddDeferredNode() : 【增加延期的node,mark当前camxnode和requestId绑定在一起】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
CamX : [ERROR][HAL ] camxdeferredrequestqueue.cpp:1010 DispatchReadyNodes() :【派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】

四、:process_capture_request三级日志关键字

IsPipelineActive|ChiActivatePipeline|StreamOn|SubmitPipeline|SetupRequest\(\)|AddDeferredNode|DispatchReadyNodes|PostJob|DeferredWorkerWrapper

五、:总结

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

  1. 激活pipeline后需要StreamOn
  2. 然后SetupRequest到node
  3. 在node里的处理主要由DRQ来管理,核心两个函数是:
    1. DispatchReadyNodes:派发准备node处理,每个请求都会访问所有节点,也可以忽略某些请求不需要的节点】
    2. 【DeferredWorkerWrapper:该方法是m_hDeferredWorker线程的处理函数,主要用于处理需要下发request的Node,同时再次更新依赖项,最后会再次调用DispatchReadyNodes开始处理。

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

下一篇讲解:

相关推荐
不懒不懒15 小时前
【基于 PyQt5 + PaddleOCR 的工业视觉型号检测系统开发】
数码相机
Gary Studio15 小时前
Android AIDL HAL工程结构示例
android
y = xⁿ16 小时前
MySQL八股知识合集
android·mysql·adb
imbackneverdie16 小时前
AI生成论文插图速度快不用手搓,但是怎么变成矢量图?
图像处理·人工智能·ai作画·aigc·科研绘图·ai工具·ai生图
andr_gale17 小时前
04_rc文件语法规则
android·framework·aosp
祖国的好青年18 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
黄林晴18 小时前
警惕!AGP 9.2 别只改版本号,R8 规则与构建链路全线收紧
android·gradle
小德乐乐18 小时前
AlphaFold3 预测蛋白结构 分子互作分析出图 代理计算 本地部署 可指导
图像处理·python
小米渣的逆袭18 小时前
Android ADB 完全使用指南
android·adb