文章目录
1 摘要
以下抓取的trace图使用的机器均为红米note9
这里提到的切换主要是前摄<->后摄的切换
总的来说可以分成以下的内容: s是step的缩写。按照逻辑好区分.我们大部分人都会拆解成如下的几个相关阶段。括号是对应阶段所在分块层。
阶段 | 说明 |
---|---|
S0(App) | 从点击事件到调用 flush 的间隔 |
S1(Hal) | flush + disconnect 的总耗时,即关闭前一个摄像头的整个流程 |
S2(App) | disconnect 完成后,到下 open camera 指令的间隔 |
S3(Hal) | open camera 到 onOpened 回调的耗时 |
S4(App) | onOpened回调上来后,间隔多久才开始 createSession |
S5(Hal) | createSession 完成的时间,对应 endConfigure 的耗时 |
S6(App) | createSession 完成后,到下 setRepeatingRequests 的间隔; |
S7(Hal) | setRepeatingRequests 指令下来后,底层要多久才准备好第一帧上抛 |
S8(App + Multimedia) | 第一帧送给 App 后,多久后才真正第一次显示出数据帧 |
2 拆解
2.1 S0(App)
App管辖
S0:从点击事件到调用 flush
的间隔
搜索ptr:up,找到如下的内容:这是按下切换释放的操作.
按下和释放分别对应:
AppLaunch_dispatchPtr:Down
AppLaunch_dispatchPtr:Up
我们拆解S0的时候关注up的操作.从这个start开始记录.
搜索CameraHal::flush
S0的时间就是AppLaunch_dispatchPtr:Up的开始到CameraHal::flush的开始
2.2 S1(Hal)
Hal 管辖
closeStart->CloseDone的过程.
2.3 S2(App)
App管辖
disconnect 完成后,到下 open camera 指令的间隔
关键字:connectDevice
2.4 S3(Hal)
Hal管辖
open camera 到 onOpened
回调的耗时
关键字connectDevices
2.5 S4(App)
App管辖
onOpened回调上来后,间隔多久才开始
createSession
2.6 S5(Hal)
createSession
完成的时间,对应 endConfigure
的耗时
内容如下:
2.7 S6(App)
createSession
完成后,到下 setRepeatingRequests
的间隔
2.8 S7(Hal)
setRepeatingRequests
指令下来后,底层要准备好第一帧上抛
搜索关键字:first full buffer
2.9 S8(App + Multimedia)
每个手机的绘画机制不一样,有待研究.