相机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开始处理。

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

下一篇讲解:

相关推荐
zepcjsj08016 小时前
简单实现支付密码的页面及输入效果
android
小阳睡不醒7 小时前
小白成长之路-部署Zabbix7(二)
android·运维
mmoyula8 小时前
【RK3568 PWM 子系统(SG90)驱动开发详解】
android·linux·驱动开发
你过来啊你11 小时前
Android用户鉴权实现方案深度分析
android·鉴权
go546315846511 小时前
基于深度学习的食管癌右喉返神经旁淋巴结预测系统研究
图像处理·人工智能·深度学习·神经网络·算法
格林威12 小时前
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现沙滩小人检测识别(C#代码UI界面版)
人工智能·深度学习·数码相机·yolo·计算机视觉
Microvision维视智造13 小时前
从“人工眼”到‘智能眼’:EZ-Vision视觉系统如何重构生产线视觉检测精度?
图像处理·人工智能·重构·视觉检测
kerli13 小时前
Android 嵌套滑动设计思想
android·客户端
恣艺14 小时前
LeetCode 854:相似度为 K 的字符串
android·算法·leetcode
阿华的代码王国15 小时前
【Android】相对布局应用-登录界面
android·xml·java