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

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

下一篇讲解:

相关推荐
Harrison_zhu38 分钟前
在Android13上添加系统服务的好用例子
android
CV资深专家6 小时前
在 Android 框架中,接口的可见性规则
android
猿饵块8 小时前
相机--相机标定实操
数码相机
daifgFuture10 小时前
Android 3D球形水平圆形旋转,旋转动态更换图片
android·3d
二流小码农11 小时前
鸿蒙开发:loading动画的几种实现方式
android·ios·harmonyos
爱吃西红柿!12 小时前
fastadmin fildList 动态下拉框默认选中
android·前端·javascript
悠哉清闲12 小时前
工厂模式与多态结合
android·java
_李小白13 小时前
【OSG学习笔记】Day 15: 路径动画与相机漫游
笔记·数码相机·学习
大耳猫13 小时前
Android SharedFlow 详解
android·kotlin·sharedflow
火柴就是我14 小时前
升级 Android Studio 后报错 Error loading build artifacts from redirect.txt
android