mtk相机冷启动拆解
1 概述
冷启动大致可以分成以下几块内容:
S0 | (system) | 主要是 Activity 的创建耗时(从 Touch up,即 ptr:up 开始) |
ptr:up |
S1 | App | 从 Activity 创建成功,到下 open camera 的时间(对应 CameraService::connect ); Note:一般习惯把 S0 和 S1 算成一大阶段; |
|
S2 | HAL | open camera 到 onOpened (即 connect 调用完成)回调上去的时间; |
|
S3 | App |
onOpened 回调后,到 App 去 creatSession 的时间; |
|
S4 | HAL |
creatSession 的耗时(对应整个endConfigure); |
|
S5 | App |
creatSession 完成到 setRepeatingRequest 的时间; |
|
S6 | HAL |
setRepeatingRequest 后到底层抛出第一帧(cameraserver 会有一个 first full buffer 的记录)的时间; |
|
S7 | App+MultiMedia | 底层出第一帧后,到 App 真正第一次开始 draw 数据,数据送到 surfaceFlinger 显示出来(第二次 onMessageReceived 完成)的时间。 |
adb shell setprop service.adb.root 1
开发者模式关闭再打开
sched/freq/idle #这三个tag是cpu 信息,无论如何必须带上
gfx/view/input #测试列表滑动.桌面滑动.这种流畅性问题
gfx/view/imput/hwui #绘图问题
gfx/view/input/res/am/wm #测试app启动
gfx/view/input/dalvik/disk #GC或者IO导致卡顿
gfx/view/input/res/am/wm/power #亮屏,电量相关
python systrace.py gfx camera view input sched freq video disk dalvik res am wm -b 20480 -t 5 -o trace.html
S0:Touch Up → ActivityStart
S1:ActivityStart → open camera | start
S2:Open camera
S3:Open camera | end → Configure streams | start
S4:Configure streams
S5:Configure streams | end → SetRepeatingRequests
S6:SetRepeatingRequests → 1st frame out from hal
S7:1st frame out from hal → Display show 1st frame
2 S0+S1
system+app耗时
搜索关键字ptr:up
可以看到如下的内容:这是按下相机按钮并且抬起的操作
从 这里开始计时到connectDevice结束是S0+S1的时间.
S1的主要时间是activityStart到connectDevice
S0: AppLaunch_dispatchPtr:Up –> activityStart
S1: activityStart –> connectDevice
3 S2
hal耗时
搜索connectDevice
可以看到 connectDevice的持续时间.这就是S2的耗时
4 S3
app耗时
从下图可以看到是从connectDevice的结尾到 endConfigure的开始
5 S4
hal 耗时
endConfigure的持续时间
6 S5
app耗时
从endConfigure的结尾到setRepeatingRequest返回完成
7 S6
hal耗时
直接搜索first full buffer .有的apk会返回多个.一般都是以最后一个收尾为主.
这个一般都是和captureRequest返回在一起的.
耗时是从setRepeatingRequest 计算到first full buffer返回
8 S7
app和多媒体耗时,有待研究