目录
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 的耗时
内容如下:7
2.7 S6(App)
createSession 完成后,到下 setRepeatingRequests 的间隔
2.8 S7(Hal)
setRepeatingRequests 指令下来后,底层要准备好第一帧上抛
关键字: first full buffer
2.9 S8(App + Multimedia)
每个手机的绘画机制不一样,有待研究.