高通Camx 相機(jī)冷啟動(dòng)trace 分解

和你一起終身學(xué)習(xí),這里是程序員Android
經(jīng)典好文推薦,通過閱讀本文,您將收獲以下知識點(diǎn):
一、Camx trace 調(diào)試開關(guān)設(shè)置
二、Camx 調(diào)試開關(guān)設(shè)置懶人腳本
三、Camera 冷啟動(dòng)階段分解分析
一、Camx trace 調(diào)試開關(guān)設(shè)置
1.設(shè)置 camxoverridesettings trace開關(guān)
adb root
adb remount
adb shell "echo traceGroupsEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
adb shell "echo traceErrorEnable=TRUE >> /vendor/etc/camera/camxoverridesettings.txt"
adb shell "echo traceOutputEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
adb reboot
2. 重啟后設(shè)置開啟camx trace 開關(guān)
因?yàn)?camxoverridesettings 只有重啟之后可以生效,所以重啟完成后需要開啟trace 開關(guān),既可以開始抓取Camera的 Systrace。
adb shell "echo 1 > d/tracing/events/camera/enable"
二、Camx 調(diào)試開關(guān)設(shè)置懶人腳本
下面腳本主要用來設(shè)置Camx debug trace 開關(guān)的,內(nèi)容如下:
#bin/bash
# setting camxoverridesettings prop
funSetCamxoverridesettings(){
adb shell "echo traceGroupsEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
adb shell "echo traceErrorEnable=TRUE >> /vendor/etc/camera/camxoverridesettings.txt"
adb shell "echo traceOutputEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
}
# setting CameraTrace prop
funEnableCameraTrace(){
adb shell "echo 1 > d/tracing/events/camera/enable"
}
# cat setting result
funCatCameraProp(){
echo "--------------------------------------------"
echo "please check Camera trace prop is set sucess"
echo "--------------------------------------------"
echo "camxoverridesettings prop :*****************"
adb shell cat /vendor/etc/camera/camxoverridesettings.txt
echo "tracing prop :******************************"
adb shell cat d/tracing/events/camera/enable
}
# it's only used in debug version
funRemountDevice(){
adb root
adb remount
if [ $? -eq 0 ]; then
echo "remount success"
funSetCamxoverridesettings
adb shell cat /vendor/etc/camera/camxoverridesettings.txt
for((i=0;$i<=10;i++))
do
sleep 1
echo "waring !!! the phone will reboot after $i s"
done
adb reboot
for((i=0;$i<=50;i++))
do
sleep 1
echo "waiting phone is reboot after $i s "
done
adb root
adb remount
funEnableCameraTrace
funCatCameraProp
else
echo "remount failed,please remount the devices"
fi
}
# main
funRemountDevice
echo "input any num exit "
read num
查看Camera 相關(guān)進(jìn)程
測試后查看下Camera 相關(guān)進(jìn)程,有助于后續(xù)Systrace 有選擇的分析查看。
C:\Users\ProgramAndroid>adb shell ps | findstr camera
cameraserver 810 1 4396356 124740 0 0 S android.hardware.camera.provider@2.4-service_64
cameraserver 807 1 37792 3240 0 0 S vendor.oneplus.hardware.camera@1.0-service
cameraserver 1418 1 69628 11096 0 0 S cameraserver
system 6519 683 5221532 33168 0 0 S com.oneplus.camera.service
u0_a130 9163 683 6052676 46388 0 0 S com.oneplus.camera.pictureprocessing
system 10641 683 5594508 84672 0 0 S com.wingtech.cameraCalibration
u0_a138 12467 683 7046152 135544 0 0 S com.oneplus.camera
三、Camera 冷啟動(dòng)階段分解分析
1. 從 TouchUp 到 ActivityStart 耗時(shí)
從Touch UP 到 ActivityStart 階段,系統(tǒng)創(chuàng)建App進(jìn)程耗時(shí):

1.PostFork 耗時(shí)需要排查 Zygote.java 代碼
Zygote.java frameworks\base\core\java\com\android\internal\os
2.ZygoteInit 耗時(shí)需要排查ZygoteInit.java 代碼
ZygoteInit.java frameworks\base\core\java\com\android\internal\os
3.ActivityThreadMain耗時(shí)需要排查ActivityThread.java代碼
ActivityThread.java frameworks\base\core\java\android\app
4.bindApplication 耗時(shí)需要排查ActivityThread.java代碼,同上
2. 從 ActivityStart 到 App 層 OpenCamera 耗時(shí)
1. App 開始執(zhí)行 MainActivity 一系列 onCreate,onStart,onResume,openCamera等操作

2.Framework層 cameraserver 開始響應(yīng)App getCameraCharacteristics 、connectDevice 等操作。

camera Server 在此期間的行為
1.activityStart 耗時(shí)需要排查 LaunchActivityItem.java 代碼
2.ResumeActivityItem耗時(shí)需要排查 ResumeActivityItem.java 代碼
3.Choreographer#doFrame 耗時(shí)需要排查 Choreographer.java 代碼
LaunchActivityItem.java frameworks\base\core\java\android\app\servertransaction
ResumeActivityItem.java frameworks\base\core\java\android\app\servertransaction
Choreographer.java frameworks\base\core\java\android\view
3.HAL 層 OpenCamera耗時(shí)
HAL 層開始響應(yīng) APP OpenCamera的操作,并返回 open狀態(tài) 給APP。

Camera HAL OpenCamera 耗時(shí)
1.camera_module->open 耗時(shí)需要排查hal 層 CameraModule.cpp open 方法中的耗時(shí)
CameraModule.cpp hardware\interface\camera\common\1.0\default
4.APP 層 OpenCameraDone 到ConfigureStreams

5.HAL 層 ConfigureStreams 耗時(shí)

6. APP 層 ConfigureStreams Done 到 SetRepeatingRequests

7.SetRepeatingRequests 到 第一幀HAL3ProcessCaptureResult

8.HAL3ProcessCaptureResult 到第一幀Preview

9.Camera APP冷啟動(dòng)總耗時(shí)

友情推薦:
至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺得很優(yōu)秀,歡迎點(diǎn)擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請聯(lián)系小編刪除,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!
點(diǎn)個(gè)在看,方便您使用時(shí)快速查找!
