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

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

下一篇讲解:

相关推荐
hahaha601618 小时前
色彩恒常性概述
人工智能·嵌入式硬件·数码相机·计算机视觉
hahaha601620 小时前
白平衡综述
数码相机
Latchh20 小时前
前端导出的JPEG红字发糊,质量要拉到100才清楚
前端·图像处理·人工智能·计算机视觉
lank_M1 天前
抠图换深色背景有白边?先分清直通和预乘alpha
图像处理·人工智能·计算机视觉·状态模式
素师良码1 天前
第5篇:显示驱动必备调试工具浅析
android
维克兜率天1 天前
【维克】配对交易的季节性:哪些品种适合长拿?
android·开发语言·笔记·python·算法·kotlin·量化
墨天梦1 天前
B06_XML控件布局与ViewBinding
android·kotlin
晚风叙码1 天前
MySQL 表的操作:从建表到删表,一篇讲清楚
android·mysql·oracle
事圆则缓1 天前
Android 性能优化常见工具与使用场景:从症状到证据的排查指南
android·性能优化
avi91111 天前
Unity 非后台,非自动构建,但统计报表 BuildReport ,构建自动化系统C#
android·webserver·ios打包·admin·c#后台·unity打包系统·unity自动构建