【Camera 性能笔记】五、启动、切换、拍照性能分析

启动性能:

从camera app和java framework角度分析:
app  点击app icon    开始调用 opencamera
    trace:deliverinputevent中有两个点 down和up, opencamera
    opencamera:opencameraforuid、connectdevice
底层  开始调用 opencamera    opencamera结束
    trace:整个opencamera耗时
app   opencamera结束   开启调用 createcapturesession
    trace:opencamera  createcapturesession
底层 开启调用 createcapturesession   调用createcapturesession结束
    trace:整个endconfigure耗时
    createcapturesession:waituntilidle(创建session时希望 处理request的状态处于idle)、beginconfig、createstream、endconfig
app 调用createcapturesession结束  调用setrepeatrequest
    trace:createcapturesession  setrepeatrequest
底层 调用setrepeatrequest   收到第一帧
    trace:setrepeatrequest   first full buffer


从camera server角度分析:
app  点击app icon    开始调用 connectdevice
    trace:deliverinputevent中有两个点 down和up, connectdevice
hal  开始调用 connectdevice     connectdevice结束
    trace:整个connectdevice耗时
app  connectdevice结束  开启调用endconfigure
    trace:connectdevice  endconfigure
hal 开启调用endconfigure   调用endconfigure结束
    trace:整个endconfigure耗时
app 调用endconfigure结束   调用submitrequestlist
    trace:endconfigure  submitrequestlist
hal 调用submitrequestlist   cameraserver收到第一帧
    trace:submitrequestlist   first full buffer
    

手机启动时provider会将hal 的 characteristics信息进行保存,一旦camera server调用则provider直接提供

1.app调用camera server的 getcharacteristics 流程
    shouldrejectsystemcameraconnection(是否为系统camera,如果没有申请系统camera权限则拒绝,getcharacteristics为空)
    cameramanager的getcharacteristics、getcharacteristics::checkpermission
2.app调用open camera,camera server的 connectdevice 流程
    connect permission
    handleevictionslocked
    initializeimpl、cameradeviceclient::initializeimpl、camera2clientbase::initializeimpl、camera3device的initializeimpl、camerahal::opensession
3.app调用createCaptureSession,camera server的 createDefaultRequest 流程
    调用camera3device的createDefaultRequest、camerahal:constructDefaultRequestSettings
    
4.camera server的 createstream 流程(几路流就有几个createstream)
    cameradeviceclient::createstream
    调用createsurfacefromgbp(query width height format)(java surface通过gbp转成底层的surface)
    调用camera3device的createstream、new camera3outputstream
5.camera server的 endconfigure 流程
    cameradeviceclient::endconfigure
    调用camera3device的configurestreams
    camera3stream::startconfiguration
    camerahal::configurestreams

6.camera server的 submitrequestlist 流程
    submitrequestlist会将request放在一个线程中跑:c3Dev-0-reqQueu的threadLoop
    在request没来之前 threadLoop会一直等 waitfirNextRequestBatch,等到之后调用prepareHalRequests、sendRequestsBatch
    camerahal::processBacthCaptureRequest
    
7.camera server的  processCaptureResult 流程
    调用camera3device的processCaptureResult
    Camera3OutputUtils::returnAndRemovePendingOutputBuffers
    Camera3OutputUtils::returnOutputBuffers
      Camera3Stream::returnBuffer
        Camera3OutputStream::returnBufferLocked
          Camera3IOStreamBase::returnAnyBufferLocked
            Camera3OutputStream::returnBufferCheckedLocked
              Camera3OutputStream::queueBufferToConsumer


// 启动
S0
app    AppLaunch_dispatchPtr:Up -> activityStart

S1
app    activityStart->openCameraDeviceUserAsync.connectDevice    
activityStart->cameraserver:connectDevice

S2
HAL    openCameraDeviceUserAsync.connectDevice ->CameraStartupPerformance.onCameraOpened    
cameraserver:connectDevice->cameraserver:createDefaultRequest

S3
app    "CameraStartupPerformance.onCameraOpened->    CameraStartupPerformance.createCaptureSession"    
cameraserver:createDefaultRequest-> cameraserver:createStream

S4
HAL    "CameraStartupPerformance.createCaptureSession->    CameraStartupPerformance.onCameraCaptureSessionConfigured"    
cameraserver:createstream-> cameraserver:endConfigure的结束点

S5
app    "CameraStartupPerformance.onCameraCaptureSessionConfigured->    CameraStartupPerformance.setRepeatingRequest"    
cameraserver:endConfigure的结束点-> cameraserver:submitRequestList

S6
hal    CameraStartupPerformance.setRepeatingRequest-> onFirstFrameAvailable    
cameraserver:submitRequestList-> cameraserver:frame capture结束点

S7
app    S7 : onFirstFrameAvailable起点--- SurfaceView Buffer柱起点为终
+ SurfaceView Buffer柱起点 --- Trace presentFence fence X --- waiting for presentFence X    
cameraserver:frame capture结束段 -> sf:presentFence对应帧

// 关键字:

sensor power up:cslacquiredevice
sensor init settings  applysensorinitsettings
stream on
startpreview2firstframe

切换性能:

app  点击switch icon    开始调用 disconnect
    trace:deliverinputevent中有两个点 down和up, disconnect
hal  开始调用 disconnect     disconnect结束
    trace:整个disconnect耗时
app  disconnect结束  开启调用connectdevice
    trace:disconnect  connectdevice
hal  开始调用 connectdevice     connectdevice结束
    trace:整个connectdevice耗时
app  connectdevice结束  开启调用endconfigure
    trace:connectdevice  endconfigure
hal 开启调用endconfigure   调用endconfigure结束
    trace:整个endconfigure耗时
app 调用endconfigure结束   调用submitrequestlist
    trace:endconfigure  submitrequestlist
hal 调用submitrequestlist   cameraserver收到第一帧
    trace:submitrequestlist   first full buffer

native framework close camera的流程:

java fwk调用close -> native fwk disconnect

CameraService::cacheDump :
    会将上一次使用相机的信息保存在dumpsys中
    关键字:active camera clients、from previous open session
CameraDeviceClient::detachDevice:
    cameraHal::flush
    waituntilDrained
    cameraHal::close
    release stream buffer
CameraService::BasicClient::disconnect
    finishCameraOps

拍照性能:

shot2thumbnail   点击shutter button -> thumbnail完成更新

shot2view   点击shutter button -> thumbnail完成更新 -> 点击thumbnail进gallery 图像清晰显示完成

shot2shot    点击shutter button ->  下一次点击shutter button

shot2thumbnail:

app 点击shutter button    app送拍照capturerequest给底层
    trace:deliverinputevent中有两个点 down和up, submitrequestlist
hal app送拍照capturerequest给底层  app收到jpeg buffer (onImageAvaliable)
    trace:submitrequestlist     imageReader

// cameraserver 中 有still capture,为hal拍照时间,  cookie 值为该帧的requestNum


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cam_Rxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值