相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】
上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。
通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异,日积月累这样将能快速提升分析日志的能力。
这一篇我们开始讲: 相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
目录
一、背景
二、:Google Camera 高通Camx HAL3日志关键字
三、:openCamera打开相机日志关键字
四、:ConfigureStreams配流日志关键字
五、:Flush切换日志关键字
六、:feature2流程日志关键字
七、:request日志关键字
八、:result日志关键字
九、:拍照日志关键字
十、:Zoom日志关键字
十一、:录像日志关键字
一、背景
1:【效率决定成长空间】无论什么开发,分析日志是解决问题的法宝。且是最有效最常用的调试工具,特别是在Android或Linux领域下,log分析是开发必备技能,然而log分析效率参差不齐,你分析一份日志要一天,别人分析只需要一个小时,作何感想?别人一年的学习成果可能是你几年才能学会。
2:【巨量日志降低了开发效率】接触过Android日志,就清楚日志量非常大。几十个进程几百个线程同时并行打印日志。而Camera领域日志量极大,因为预览一般是每秒30帧的日志量,录屏一般是每秒60帧的日志量,少则几万行日志,多则几十万行日志,更多则多个日志总量几百万行日志。
3:【日志梯度分级来提效】开发追求效率,如何快速有效挖掘出问题,并如何解决问题变得尤为重要。此专题将以梯度分级日志来分析日志,让日志流程变得简单化,提高解决问题的效率。
4:【举一反三】当前以高通CamX架构为例讲解Camera日志,方式通用,其他领域模块均可效仿借鉴。
5:【开发思维决定成长高度】当前讲述的是Camera领域log分析梯度分级讲解,讲究的是一种分析技巧,分析思维,一种感悟。技术路线的提升空间,需要更多开发技巧和开发学习能力去提升。技术大拿分析问题,可以从日志快速定位问题并解决问题,有充分的时间去学习更多知识,成长速度极快。同一起跑线,学习能力,开发效率等等都决定了程序员的成长提升空间。记得我毕业三年,同学之间的差距无限拉大,一些人还在几千块薪水,你已经是他的四五倍了,人与人的差距就是短短几年就拉开了。
二、:Google Camera 高通Camx HAL3日志关键字
相机HAL3接口V1关键字:" HalOp: "
相机HAL3接口V2关键字:" camxhal3.cpp|HalOp: "
PS:关键字中的 "|" 用于区分关键字与关键字之间间隔,在notepad++中使用多个关键字搜索,也是使用"|" 来区分多个关键字,可以直接复制到notepad++去搜索多个关键字。
三、:openCamera打开相机日志关键字
打开相机V1关键字:
"CameraDevice::open|OPEN_CAMERA|CLOSE_CAMERA|closeCameraDevice|openCamera start|open camera3 device|onOpenLocked|session::close|Begin OPEN|End OPEN|Begin CLOSE|End CLOSE"
打开相机V2关键字:
"onCameraOpened|disconnect|camera.*close|close.*camera|camera.*open|open.*camera|open\(\) Open|close\(\) close|openCamera|closeCamera|session::open|onOpenLocked|probe"
打开相机V3关键字:
"action=ACTION_UP|, nameStr=|power key come|back button event|onbackkeypress|onhomekeypress|homebutton"
四、:ConfigureStreams配流日志关键字
配置流V1关键字:
"Number of streams|FINAL stream|Begin CONFIG|End CONFIG"
配置流V2关键字:
dumpSessionConfig|::configureStreams|onConfigure|chi_initialize_override_session
|stream size|convertStreamConfiguration"
配置流V3关键字:
"configureSession|Creating session|Initialize\(\) Session|CreateSession|CreateDescriptor\(\)|configure_streams|SelectFeatures|Clone usecase successfully|initialized successfully|created successfully"
配置流V4关键字:
"configuredSurfaceType|: CSLOpen\(|,isMultiCamera:|m_pChiFeatureGraphManager=|total resource used so far|classifyTargetstream|GetMatchingUsecase|GetXMLUsecaseByName|SelectFeatures|CreatePipeline|CreatePipelineDescriptor|CreateNodes|PipelineCreated|CreateRTSessions|PrepareStreamOn\(\)|setOperationMode|checkStream|evaluateConfiguration"
配置流V5关键字:
"evaluateCaptureConfiguration|createCaptureSession"
五、:Flush切换日志关键字
Flush切换V1关键字:
"beginFlush|endFlush|HAL3Flush"
Flush切换V2关键字:
"flush:|onFlushLocked|Flush\(\)|::flush"
六、:feature2流程日志关键字
feature2流程V1关键字:
"created with features|featureName =|SelectFeatureGraphforRequestFromTable|SearchFeatureGraphinTable|GetPrunedFeatureGraph|GetGraphDescriptorTables|SelectFeaturesForGraph|pSelectFGD FeatureName has:|GetFeatureGraphMapforConfig cloned getGraphName:|MergeFeatureGraphs pFeatureName Name : "
feature2流程V2关键字:
"GetAllFeatureGraphDescriptors|chifeature2wrapper.cpp|ALGO_FILTER |CreateFeatureInstance|DoFeatureCreate"
feature2流程V3关键字:
CreateSession|chimcxmflpolicy.cpp|chxtransitionmap.h|chimcxstaticpolicy.cpp|FillMCCResult|is discard!pruneRule|is saved.pruneRule|BuildInternalLinkPruneRule|BuildSinkLinkPruneRule|GetPruneRulesAndIdentifier|OnProcessRequest|: FeatureRequest State \[|PruneInternalGraphLinks|chxusecasemc.cpp:.*? ExecuteCaptureRequest\(\)|filterProcess|ALGO_FILTER|compare_entry_tags|PrepareFeatureData|DoStreamNegotiation|isFusion|BuildCameraIdSet"
七、:request日志关键字
request起始结束V1关键字:
"processCaptureRequest|process_capture_request\(\) frame_number|Saving buffer for CHI Frame|FRAME FPS|submitRequest.*requestNo|1st request"
request起始结束V2关键字:
"hardwareOps_request|Original framework framenumber|SAVING frame|NotifyNodeRequestIdDone|SetupRequestOutputPortFence\(\) CreatePrivateFence|for framework framenumber|begin to abortCaptures|SetFisrtFrame] isFirstFrame:"
request关键流程V3关键字:
"Finalized metadata result for Sequence ID|SetRequestToFeatureMapping|process_capture_request\(\)|ExecuteCaptureRequest\(\)|SelectFeatureToExecuteCaptureRequest\(\)|ExecuteProcessRequest\(\)|StreamOn\(\)|SubmitRequest\(\)|DispatchReadyNodes|ProcessRequestIdDone|CSLStreamOn|FinalizePipeline|SinkPortFenceSignaled|CbDispatchJob|ActivatePipeline|OnStreamOn|AddDeferredNode|ParseResultMetadata"
request关键流程V4关键字:
UpdateOrRemoveDependency|ThreadJobCallback|createOneRequest|submitOneRequest|magic num|finalize done!|status is now PipelineStatus::|Stream on Done =|FIRST_FRAME_CALLBACK|Session Request|ProcessRequest\(\) chiFrameNum:|GenerateRealtimeRequest\(\) frame:|request queue and launched job|DeferredWorkerCore|AddDependencyEntry|QueryVendorTagLocation|GetImageBuffer|AddImageReference|PopulateHALToChiStreamBuffer|GetOutputBufferFromRDIQueue|GetImageBufferInfo|OpenRequest|PopulateFrameworkRequestBuffer|OverrideProcessRequest|DeferredWorkerWrapper"
request帧number关键字:
"requestNumber|req_no|Frame:|Frame=|CHI Frame|resultFrameIndexChi|FrameNum|frame_number|frameNumber|frame id|frame number|SOF frame|first frame|AppRequest:|requestNo|RequestNo|requestFrame|frameNo:|ReqId:|RequestIdDone|RequestId|row name|Rxed Req Id|add req|dev req|request to|del_req_id|schedule_request|process_req|SOF Req|active request|move request|req_id|sched_req|slot_for_req|Request Id|add_req|Applied req|, req:|req:|Open req|sync_id:|resultID"
feature2 request关键字:
"requestState|FeatureRequest State|executing base request flow|set dependency on port|created for numrequests|state from|successful!!|sink links"
查看是否有出帧关键字:
"Notify SOF|SOF time stamp|__cam_isp_ctx_send_sof_timestamp|CSLMessageHandler|__cam_isp_ctx_sof_in_activated_state|start device success ctx"
八、:result日志关键字
result启动结束V1关键字:
"processCaptureResult|process_capture_result|onWarpStreamBaseCB|sof_cnt|Done Req|updateResult.*requestNo|ISPDeviceMgr.cpp|onRequestFinish|onCompleted|enqueResult|Returning framework result Frame|FRAME FPS|first frame"
result起始结束V2关键字:
"AidlCallback|onImgStreamBaseCB|FindFeatureToProcessResult|Pending result CHI frame|Processing Result|fence handler FOR|ProcessAndReturnFinishedResults\(\)|Inject result added|has returned all results"
result关键流程V3关键字:
"onCaptureCompleted|Fmt: * Width: |HandleMetadataResultReturn|convertCallbackParcelToHidl|InjectResult|ProcessResults|DispatchResults|ReturnFrameworkResult|ProcessFenceCallback|ProcessPartialMetadataDone|ProcessMetadataDone|ProcessResult|notify\(\)|OfflineSnapshotResult|OfflineFusionSnapshotResult"
result关键流程V4关键字:
"reporting I/O config|CSLFenceCallback|NotifyCSLMessage|GetResultFrameInfo|UpdateAppPartialResultMetadataFromDriver|NotifyAndReleaseFence|ReleaseBufferManagerCompositeImageReference|ReturnFrameworkMessage"
result帧number关键字:
"frameNo:|requestNo|SOF: idx|frame_timeout|Frame:|Frame=|frame_number|FrameNum|framenumber|resultFrame| Frame |frameID|frame number|chiframe|FrameIdx|result Frame|for Frame |ResultFrame|added request|snapshot frame|snapshot output frame|frameId:|first frame|first frame arr|first frame draw|frameIndex|SkipDrawFrame:"
feature2 result关键字:
"Release external|FeatureRequest State|All ports are done|moving URO to Complete|requests complete|result from request|processResultMetadataMessage|Resolving an input|BuffersRecieved:|OutputNotified |Release Ack For port|OutputNotified For port|Input Dependency|jobFrameNum "
九、:拍照日志关键字
拍照极简V1关键字:
"addImage, path|JpegArrived|completeCapture|onPictureSaved|Picture Save End| takePicture,|onShutterButtonClick|Hal_captureFail|LostPicture|capture, ID:|jpeg size|processJpeg|onCaptureShutter|picture count|request pictures|recording_cap_button|reprocessImage|isReadyToCapture|Respond Start, count|onCameraShutterButtonClick|checkReadyToCapture|burstCapture, pictureNum:|onImageAvailable|addCaptureImageToAPS|onCaptureStarted|countAddFrame|snapshot frame|newImage|TAKE YUV|onImageReceived|onPreviewCaptured|MediaProvider: Deleted|onCaptureFailed"
拍照流程V2关键字:
"ISPDeviceMgr.cpp|capture, unable to capture|pictureArrive, width:|capture intent:|hasSnapshot 1|onClickThumbnail|onFinishAddFrame|updateImage, path|updateStoragePlace, after sStoragePlace: off, sStorageOverrideState:|addframebuffer|Returning framework result Frame|.jpg|OCAM_MainShutterButton|mRequestNum|OCAM_Storage|updateImageForGallery|finishaddframe|picture save|ProcessedPictureSavingTask: writeData\(\)|saveImage|takeScreenshot|takePicture|ocam_ThumbnailUI|ocam_ThumbnailProcessor|onCameraPictureBuilt|connect call|CameraTest Shutter Respond Start|OneCameraImpl: burstCapture|timeStampMatched: true|blurlessProcess|pfProcess|image_path|savePicture|Camera View Picture End|Snapshot in|snapshot stream|snapshotstream|snapshot request|YUV SNAPSHOT|APSClient: addFrameBuff|onJpegReceived|showSuperTextResultView start|showSuperTextResultView, bitmapWidth|STELLA.cpp|clickShutterTime|processImages, processParameters:|procflag|process_time|needCaptureThumb| TAKE SNAPSHOT |MFSRFrameCount =|Got mc yuv buffer back|onTimeoutWaitingForProcessedPicture|OPPhotoSavingTask: writeData\(\) - File: /storage|onMediaSavingCompleted\(\) - Waiting for processed picture|Snapshot =|SaveSnapshot|jpeg stream"
拍照流程V3关键字:
"pictureResult|ProcessPicture|onCapture|Capture\(\)|onPreviewCapture.*?\(\)|onCapture.*?\(\)|-Picture-|CameraPreviewState|CaptureState|ShutterState|CaptureModeSwitchState|PhotoResolutionToSwitch|completePreparingCapturing|ExposureState|enqueueCapturedPostviewFrame"
拍照流程V3关键字:
"addImage,| timestamp:"
十、:Zoom日志关键字
Zoom V1关键字:
"onzoomchange,"
十一、:录像日志关键字
录像极简V1关键字:
"addImage, path|MediaWriter|onDIPStreamBaseCB|prepareIORequest|.mp4|startRecordstopRecord|settingVideo|startVideo|captureWhileVideo|videoFrameWidth|CaptureRate|VideoSurface|VideoRecording|videoSnapshot|onRecordStageChanged|image_uri|\.mp4|hasVideo 1"
录像流程V2关键字:
"modeName:|DeepThinker:|OCAM_Video|MediaScanner|OCAM_VideoBlurPresenter|AtlasVideo|OCAM_VideoSizePresenter|VideoBoost|OCAM_CommonVideoMode|OCAM_VideoRecorder|MPEG4Writer|CCodec :|Codec2Client|MediaRecorderJNI|OCAM_CameraMediaCodec|MediaCodec|OCAM_RecordProcessor|OCAM_GalleryPreCodeClient|CCodec|CCodecBuffers|CCodecConfig|OCAM_VideoFusionTexturePreview|OCAM_VideoWatermarkTexturePreview|OCAM_VideoSaver|OCAM_StickerMediator|setVideo|OCAM_VideoMode|videoSizeType|VideoCaptureControllerImpl|MediaRecorder|VideoMode|Recording|startVideo|createVideoSurface|setVideoSurfaceState|onVideoShutterButtonClick|afterStartingVideoRecord|mVideoFilename|fps range|start video"
【关注我,后续持续新增专题博文,谢谢!!!】
下一篇讲解: