相机定屏问题分析四:【cameraserver 最大request buffer超标】后置视频模式预览定屏闪退至桌面
【关注我,后续持续新增专题博文,谢谢!!!】
上一篇我们讲了:相机定屏问题分析三:【配流ConfigStream失败】外屏打开相机视频照片人像来回切换后,相机页面卡死,点击没反应9055522
这一篇我们开始讲: 相机定屏问题分析四:【cameraserver 最大request buffer超标】后置视频模式预览定屏闪退至桌面9208793
目录
一、背景
二、:原因分析
2.1:首先查看最直接的闪退原因
2.2 :分析request 246状态
2.3 :分析request 246未执行完成原因
2.4 :分析buffer error原因
2.5 :解决思路
2.6 :分析request buffer最大值来源
2.7 :解决方案
一、背景
【操作步骤】【Operation steps】相机—视频模式后置预览。开启水印 照片模式拍 切视频模式录制视频 查看成像 下拉点进WiFi界面连接WiFi 再切回相机照片模式拍照,录制视频
【实际结果】【Actual results】低概率相机定屏闪退至桌面
【期望结果】【Expected results】不会定屏闪退至桌面
二、:原因分析
2.1:首先查看最直接的闪退原因
request 236在flush过程中被终止,且是性能差delay导致:
05-17 16:35:18.767668 30415 30415 I [ 6586.495729]CAM_WARN: CAM-UTIL: cam_common_util_thread_switch_delay_detect: 158 CDM workq schedule delay detected 6586:565033 cur 6586:572244 diff 7: threshold 5
05-17 16:35:19.842762 30421 30421 I [ 6587.570823]CAM_WARN: CAM-UTIL: cam_common_util_thread_switch_delay_detect: 158 CDM workq schedule delay detected 6587:597735 cur 6587:647348 diff 49: threshold 5
05-17 16:35:21.102488 30421 30421 I [ 6588.830549]CAM_WARN: CAM-UTIL: cam_common_util_thread_switch_delay_detect: 158 CDM workq schedule delay detected 6588:897158 cur 6588:907071 diff 9: threshold 505-17 16:35:22.123838 30422 30422 I [ 6589.851899]CAM_WARN: CAM-ICP: cam_icp_mgr_handle_frame_process: 2196 ctx_id 0 req 246 dev 3 has been aborted[flushed]
2.2 :分析request 246状态
果然RequestId: 246超时未完成进入dump:
05-17 16:35:22.250 22496 8602 E CamX : [ALWAYS_ON ] camxsession.cpp:6475 HandleSystemEventCb() Triggering System Event: Session:0xb400007a6a40d000, Node:Unknown(-1), Instance:-1, Pipeline:Unknown(-1) DumpOnly:1
05-17 16:35:22.250 22496 8602 E CamX : [ALWAYS_ON ] camxsession.cpp:6484 HandleSystemEventCb() ErrorCode:259, ErrorString: CamxResultExtCoreFlushResultTimedOut, ErrorDescription: Description: CamxResultExt Core Flush Result TimedOut forceSigAbort=0 threadCallStacksDumped = 0frameworkFrameNum=259
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8826 DumpDebugInfo() +----------------------------------------------------------+
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8827 DumpDebugInfo() + CALLING SESSION DUMP 0xb400007a6a40d000 +
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8828 DumpDebugInfo() + numPipelines: 1
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8829 DumpDebugInfo() + livePendingRequests: 1
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8830 DumpDebugInfo() + maxLivePendingRequests: 21
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8831 DumpDebugInfo() + requestQueueDepth: 23
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8841 DumpDebugInfo() + Pipeline[0] Flush Status: 1
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8844 DumpDebugInfo() + usecaseNumBatchedFrames: 1
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxsession.cpp:8873 DumpDebugInfo() WARNING: Lock failed with status: 18. but continuing session dump
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxpipeline.cpp:6507 DumpDebugInfo() +----------------------------------------------------------+
05-17 16:35:22.250 22496 8602 I CamX : [ DUMP][CORE ] camxpipeline.cpp:6508 DumpDebugInfo() + PIPELINE DEBUG INFO +
05-17 16:35:22.251 22496 8602 I CamX : [ DUMP][CORE ] camxpipeline.cpp:6514 DumpDebugInfo() + Pipeline Name: VideoEIS3PreviewEIS2Offline_0_cam_0, Pipeline ID: 0, 0xb400007aa02ad000, CurrentRequestId: 246 cameraid=0
05-17 16:35:22.251 22496 8602 I CamX : [ INFO][CORE ] camxpipeline.cpp:7408 LogPendingNodes() + Session 0xb400007a6a40d000 - Pipeline VideoEIS3PreviewEIS2Offline_0_cam_0 Pending Nodes
2.3 :分析request 246未执行完成原因
buffer错误导致246帧未执行完:
05-17 16:35:22.202 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:6909 InjectResult() Session 0xb400007a6a40d000 [VideoEIS3PreviewEIS2Offline] Reporting a buffer error during flush to the framework for streamIndex 1 SeqId: 245 <-> ReqId: 246
05-17 16:35:22.203 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:5133 ProcessResultBuffers() Result buffer for sequence ID 245 framenumber 245 in error state
05-17 16:35:22.203 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:5140 ProcessResultBuffers() Result buffer: 0xb400007a6d75a0c0, error:1, valid:0, buffer:0xb400007a6a431bd0, pStream:0xb400007ac97ec180
05-17 16:35:22.203 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:5149 ProcessResultBuffers() Message: 0xb400007a72a8a0a8, messageType: 1, messageUnion: 0x7ab6de5330, errorMessageCode: 4, frameworkFrameNum: 245, pErrorStream: 0xb400007ac97ec180
05-17 16:35:22.203 22496 22542 I CamX : [ INFO][HAL ] camxhaldevice.cpp:831 Notify() type 00000001, frame_number 337, error_code 00000004【buffer错误】, error_stream 0xb400007a89961228
05-17 16:35:22.202 22496 22545 I CamX : [ INFO][CORE ] camxsession.cpp:7201 AdvanceMinExpectedResult() Session 0xb400007a6a40d000: pHolder 0xb400007a6d75a000 Can't advance because of buffer[1] for sequence Id: 245, Pipeline Index: 0
05-17 16:35:22.202 22496 22545 I CamX : [ INFO][CORE ] camxsession.cpp:7316 AdvanceMinExpectedResult() Session 0xb400007a6a40d000: Results processed, current queue state: minResultIdExpected = 246, maxResultIdExpected= 246, minSequenceIdExpected: 245, maxSequenceIdExpected: 245, and numResultsPending: 1 m_livePendingRequests: 1
05-17 16:35:22.202 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:6909 InjectResult() Session 0xb400007a6a40d000 [VideoEIS3PreviewEIS2Offline] Reporting a buffer error during flush to the framework for streamIndex 1 SeqId: 245 <-> ReqId: 246
05-17 16:35:22.203 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:5133 ProcessResultBuffers() Result buffer for sequence ID 245 framenumber 245 in error state
05-17 16:35:22.203 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:5140 ProcessResultBuffers() Result buffer: 0xb400007a6d75a0c0, error:1, valid:0, buffer:0xb400007a6a431bd0, pStream:0xb400007ac97ec180
05-17 16:35:22.203 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:5149 ProcessResultBuffers() Message: 0xb400007a72a8a0a8, messageType: 1, messageUnion: 0x7ab6de5330, errorMessageCode: 4, frameworkFrameNum: 245, pErrorStream: 0xb400007ac97ec180
05-17 16:35:22.203 22496 22542 I CamX : [ INFO][HAL ] camxhaldevice.cpp:831 Notify() type 00000001, frame_number 337, error_code 00000004【buffer错误】, error_stream 0xb400007a8996122805-17 16:35:22.202 22496 22542 I CamX : [ INFO][CORE ] camxsession.cpp:6909 InjectResult() Session 0xb400007a6a40d000 [VideoEIS3PreviewEIS2Offline] Reporting a buffer error during flush to the framework for streamIndex 1 SeqId: 245 <-> ReqId: 246
05-17 16:35:22.209 22933 22933 D OCAM_GalleryHelper: startGallery, thumbnail rect : Rect(108, 1989 - 252, 2133) target rect :Rect(0, 246 - 1080, 2166), Bitmap width:540, height:960,thumbnail.getUri():content://************/231,requestGalleryTransitionType: 0, gallery support early start is true
05-17 16:35:22.251 22496 8602 I CamX : [ DUMP][CORE ] camxpipeline.cpp:6514 DumpDebugInfo() + Pipeline Name: VideoEIS3PreviewEIS2Offline_0_cam_0, Pipeline ID: 0, 0xb400007aa02ad000, CurrentRequestId: 246 cameraid=0
05-17 16:35:22.251 22496 8602 I CamX : [ INFO][CORE ] camxpipeline.cpp:7412 LogPendingNodes() | Requests Range - lastInOrderCompletedRequestId: 246 currentRequest : 246
05-17 16:35:22.251 22496 8602 I CamX : [ INFO][CORE ] camxpipeline.cpp:7412 LogPendingNodes() | Requests Range - lastInOrderCompletedRequestId: 246 currentRequest : 246
05-17 16:35:22.251 22496 8602 I CamX : [ DUMP][CORE ] camxpipeline.cpp:6566 DumpDebugInfo() | Requests Range - lastInOrderMetaCompletedRequestId: 246 currentRequest : 246
05-17 16:35:22.251 22496 8602 I CamX : [ DUMP][CORE ] camxpipeline.cpp:6566 DumpDebugInfo() | Requests Range - lastInOrderMetaCompletedRequestId: 246 currentRequest : 246
05-17 16:35:22.251 22496 8602 I CamX : [ DUMP][CORE ] camxmetadatapool.cpp:1697 DumpMetadataSlotDebugInfo() Slot Index = 16 IsValid = 1 Associated ReqId = 246 Metabuffer = 0xb400007b0862a460
05-17 16:35:22.251 22496 8602 I CamX : [ DUMP][CORE ] camxmetadatapool.cpp:1697 DumpMetadataSlotDebugInfo() Slot Index = 16 IsValid = 1 Associated ReqId = 246 Metabuffer = 0xb400007b0862a380
05-17 16:35:22.251 22496 8602 I CamX : [ DUMP][CORE ] camxnode.cpp:7819 DumpDebugInfo() + Request: 246 Unsuccessful. metaComplete: 1, reqComplete: 1, numUnsigFences: 0, numUnprocFences: 0, status: SUCCESS , currTime 16:35:22:250 statusTransitionTime: 16:35:22:169
05-17 16:35:22.297 22933 22933 D OCAM_GalleryHelper: startTransitionAnimation, thumbnail rect : Rect(108, 1989 - 252, 2133) target rect :Rect(0, 246 - 1080, 2166)
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][HAL ] camxsession.cpp:9242 ProcessMetabufferPendingQueue() Pending Queue pipeline VideoEIS3PreviewEIS2Offline_0_cam_0 request 246 old = 246 last 246 delay 0 sequence 245 old 245 new 245
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][HAL ] camxsession.cpp:9242 ProcessMetabufferPendingQueue() Pending Queue pipeline VideoEIS3PreviewEIS2Offline_0_cam_0 request 246 old = 246 last 246 delay 0 sequence 245 old 245 new 245
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][HAL ] camxsession.cpp:9242 ProcessMetabufferPendingQueue() Pending Queue pipeline VideoEIS3PreviewEIS2Offline_0_cam_0 request 246 old = 246 last 246 delay 0 sequence 245 old 245 new 245
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][CORE ] camxnode.cpp:13427 ClearDependencies() Clearing dependencies for Node: VideoEIS3PreviewEIS2Offline_com.qti.node.gme0_cam0 with lastCompletedRequestId 246 and m_tRequestId 1
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][CORE ] camxnode.cpp:13427 ClearDependencies() Clearing dependencies for Node: VideoEIS3PreviewEIS2Offline_com.qti.node.eisv210_cam0 with lastCompletedRequestId 246 and m_tRequestId 1
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][CORE ] camxnode.cpp:13427 ClearDependencies() Clearing dependencies for Node: VideoEIS3PreviewEIS2Offline_com.qti.node.eisv311_cam0 with lastCompletedRequestId 246 and m_tRequestId 1
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][CORE ] camxnode.cpp:13427 ClearDependencies() Clearing dependencies for Node: VideoEIS3PreviewEIS2Offline_com.qti.node.dewarp13_cam0 with lastCompletedRequestId 246 and m_tRequestId 1
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][CORE ] camxnode.cpp:13427 ClearDependencies() Clearing dependencies for Node: VideoEIS3PreviewEIS2Offline_com.qti.node.dewarp14_cam0 with lastCompletedRequestId 246 and m_tRequestId 1
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][CORE ] camxnode.cpp:13427 ClearDependencies() Clearing dependencies for Node: VideoEIS3PreviewEIS2Offline_com.qti.node.swhme4_cam0 with lastCompletedRequestId 246 and m_tRequestId 1
05-17 16:35:22.855 22496 8602 I CamX : [ INFO][CORE ] camxnode.cpp:13427 ClearDependencies() Clearing dependencies for Node: VideoEIS3PreviewEIS2Offline_IPE2_cam0 with lastCompletedRequestId 246 and m_tRequestId 1
05-17 16:35:22.855 22496 8602 I CamX : [CORE_CFG][CORE ] camxpipeline.h:2371 SaveFlushInfo() Pipeline:VideoEIS3PreviewEIS2Offline Saving lastFlushRequestId: 246 flushType: 0
2.4 :分析buffer error原因
request too much buffers表示请求buffer数超标了最大值21。
05-17 16:35:19.700 22933 8627 I APS_INTERFACE: [INFO][ ALGO_WATERMARK ] APSWaterMarkNode.cpp: 422 watermarkProcess() watermark process framerId:245, result:0
05-17 16:35:19.734 22933 8627 I watermarkProcess() watermark process framerId:246, result:005-17 16:35:21.295 22495 22533 E Camera3-OutputStream: getBufferLockedCommon: Stream 3: Can't dequeue next output buffer: Function not implemented (-38)
05-17 16:35:21.295 22495 22533 E AidlCamera3-OutputUtils: requestStreamBuffers: Can't get output buffer for stream 3: Function not implemented (-38)
05-17 16:35:21.308 22495 22531 E Camera3-OutputStream: getBufferLockedCommon: Stream 3: Can't dequeue next output buffer: Function not implemented (-38)
05-17 16:35:21.308 22495 22531 E AidlCamera3-OutputUtils: requestStreamBuffers: Can't get output buffer for stream 3: Function not implemented (-38)
05-17 16:35:21.320 22495 22532 E AidlCamera3-OutputUtils: requestStreamBuffers: request too much buffers for stream 3: at HAL: 3 + requesting: 19 > max: 21
2.5 :解决思路
由于压力测试才出现,性能极差时request buffer最大值无法满足需要,我们将max: 21增加即可解决此问题。
2.6 :分析request buffer最大值来源
分析思路参考:内存泄漏系列专题分析之十七: Camera HAL3 camera3_stream_t max_buffers和Camera3Stream maxNumBuffers最大buffer数控制FWK原理
2.7 :解决方案
增加最大值的解决方案参考:
内存泄漏系列专题分析之十八: requestStreamBuffers: request too much buffers for stream 3: 请求内存buffer数超标解决方案
【关注我,后续持续新增专题博文,谢谢!!!】
下一篇讲解: