1. camx trace 基本log开关
camx trace log
adb wait-for-device
adb root
adb remount
::log tag CSL HAL Sensor CHI
adb shell setprop persist.vendor.camera.logInfoMask 0x40482
adb shell setprop persist.vendor.camera.logVerboseMask 0x40482
::trace tag
adb shell setprop persist.vendor.camera.traceGroupsEnable 0x40482
::aps trace
adb shell setprop persist.oplus.aps.trace true
::ux trace 9999
adb shell "echo 1 > proc/oplus_scheduler/sched_assist/debug_enabled"
:: camera app trace *2872*324*66#
pause
手机抓取并pull trace
adb wait-for-device
adb root
adb remount
adb pull /data/local/traces/ .
pause
2. Camx log
- /vendor/etc/camera/camxoverridesettings.txt
设置完需要重启后才可以生效 - adb shell setprop <key> <value>
Name | Default Value | Setprop |
---|---|---|
logVerboseMask | Verbose log mask.Default: 0 | persist.vendor.camera.logVerboseMask |
logEntryExitMask | Entry/exit log mask.Default: 0 | persist.vendor.camera.logEntryExitMask |
logInfoMask | Log mask information.Default: 0xFFFFFFFF | persist.vendor.camera.logInfoMask |
logWarningMask | Warning log mask.Default: 0xFFFFFFFF | persist.vendor.camera.logWarningMask |
systemLogEnable | Enables the system log.Default: TRUE | persist.vendor.camera.systemLogEnable |
Camx UMD Log Group 举例如下:
typedef UINT32 CamxLogGroup;
static const CamxLogGroup CamxLogGroupNone = (1 << 0); /0x1 //< Generic group
static const CamxLogGroup CamxLogGroupSensor = (1 << 1); /0x2 //< Sensor
static const CamxLogGroup CamxLogGroupIFace = (1 << 2); /0x4 //< IFace
static const CamxLogGroup CamxLogGroupISP = (1 << 3); /0x8 //< ISP
static const CamxLogGroup CamxLogGroupPProc = (1 << 4); /0x10 //< Post Processor
static const CamxLogGroup CamxLogGroupImgLib = (1 << 5); /0x20 //< Image Lib
static const CamxLogGroup CamxLogGroupCPP = (1 << 6); /0x40 //< CPP
static const CamxLogGroup CamxLogGroupHAL = (1 << 7); /0x80 //< HAL
static const CamxLogGroup CamxLogGroupJPEG = (1 << 8); /0x100 //< JPEG
static const CamxLogGroup CamxLogGroupStats = (1 << 9); /0x200 //< Stats
static const CamxLogGroup CamxLogGroupCSL = (1 << 10); /0x400 //< CSL
static const CamxLogGroup CamxLogGroupApp = (1 << 11); /0x800 //< Application
static const CamxLogGroup CamxLogGroupUtils = (1 << 12); /0x1000 //< Utilities
static const CamxLogGroup CamxLogGroupSync = (1 << 13); /0x2000 //< Sync
static const CamxLogGroup CamxLogGroupMemSpy = (1 << 14); /0x4000 //< MemSpy
static const CamxLogGroup CamxLogGroupAssert = (1 << 15); /0x8000 //< Asserts
static const CamxLogGroup CamxLogGroupCore = (1 << 16); /0x10000 //< Core
static const CamxLogGroup CamxLogGroupHWL = (1 << 17); /0x20000 //< HWL
static const CamxLogGroup CamxLogGroupChi = (1 << 18); /0x40000 //< CHI
static const CamxLogGroup CamxLogGroupDRQ = (1 << 19); /0x80000 //< DRQ
static const CamxLogGroup CamxLogGroupFD = (1 << 20); /0x100000 //< FD
static const CamxLogGroup CamxLogGroupIQMod = (1 << 21); /0x200000 //< IQ module
static const CamxLogGroup CamxLogGroupLRME = (1 << 22); /0x400000 //< LRME
static const CamxLogGroup CamxLogGroupNCS = (1 << 23); /0x800000 //< NCS
static const CamxLogGroup CamxLogGroupMeta = (1 << 24); /0x1000000 //< Metadata
static const CamxLogGroup CamxLogGroupAEC = (1 << 25); /0x2000000 //< AEC
static const CamxLogGroup CamxLogGroupAWB = (1 << 26); /0x4000000 //< AWB
static const CamxLogGroup CamxLogGroupAF = (1 << 27); /0x8000000 //< AF
如果打开不同group 的log,那么修改对应的值即可。
比如:
单独打开 CSL HAL Sensor CHI 三组Info Log Mask
CHI CSL HAL Sensor
0 0 0 4 0 4 8 2 =0x40482
0000 0000 0000 0100 0000 0100 1000 0010
logInfoMask=0x00040482
logWarningMask=0x40482
此时log mask 可以使用上面两种,注意,前面的0可以省略,后面的0不可以省略。
比如:
打开所有的 Verbose Log Mask
0xFFFFFFFF 打开所有的log
logVerboseMask=0xFFFFFFFF
3. kill Camera HAL Camera FWK 脚本
adb wait-for-device
adb root
adb remount
adb shell ps | findstr camera
for /f "delims=" %%i in ('adb shell pidof android.hardware.camera.provider@2.4-service_64') do (set CameraHalProcess=%%i)
adb shell kill %CameraHalProcess%
for /f "delims=" %%i in ('adb shell pidof cameraserver') do (set CameraServerProcess=%%i)
adb shell kill %CameraServerProcess%
adb shell ps | findstr camera
pause
5. Offline log开关
设置log开关
// Camx log
adb shell "echo overrideLogLevels=0xFF > /vendor/etc/camera/camxoverridesettings.txt"
adb shell "echo logVerboseMask=0x100>> /vendor/etc/camera/camxoverridesettings.txt"
adb shell "echo logInfoMask=0x10198>> /vendor/etc/camera/camxoverridesettings.txt"
// 允许adb 获取camx chi log
adb shell echo “systemLogEnable=TRUE >> /vendor/etc/camera/camxoverridesettings.txt”
//离线log
adb shell " echo enableAsciiLogging=1 >> /vendor/etc/camera/camxoverridesettings.txt "
// 删除之前保存的log
adb shell rm /data/vendor/camera/*.txt
pull && merge log
// 导出log
adb pull /data/vendor/camera .
//merge log
python merge_text_logs.py -o merge_locat.txt -d “path_of_the_log”
python merge_text_logs.py 脚本目录:
chi-cdk\tools\binary_log\merge_text_logs.py
6. Disable All log
//logD logcat
adb shell stop logd
adb shell stop logcat
//camx
logVerboseMask=0x00000
logInfoMask=0x00000
logEntryExitMask=0x00000
//trace
traceGroupsEnable=0x00000
//camx chi adb log
systemLogEnable=FALSE
adb shell "echo 0x0> /sys/module/cam_debug_util/parameters/debug_mdl"
7. odex 抽取
- odex 抽取目的:
通过命令在后台抽取 apk 内部压缩的odex 方法。
类似windows 的解压缩包,避免解压过程影响app调用。
主要是为了避免测试机刚刷机后odex在后台抽取,而对比机已使用很久,odex 已后台完成 ,排除测试机、对比机后台差异带来的影响,测试机,对比机可以都执行这个命令。
- odex trace查看:
trace 中可以查看Jit thread pool 是否在不停的占用CPU 资源进行后台odex抽取。
::odex 抽取
adb shell cmd package bg-dexopt-job
::查看app 抽取后是否是speed 模式
adb shell dumpsys package com.oplus.camera|adb shell grep "reason="
- 确认 app speedmode
C:\Users\>adb shell dumpsys package com.oplus.camera|adb shell grep "reason="
arm64: [status=speed-profile] [reason=start-app] [primary-abi]
C:\Users\>
7. Top 进程前30
adb shell top -b -m 30
8. ISO Range ,Max Gain
adb shell "dumpsys media.camera |grep 'android.sensor.info.sensitivityRange|android.sensor.maxAnalogSensitivity| static information' -iE -A 1"
举例如下:
C:\Users\>adb shell "dumpsys media.camera |grep 'android.sensor.info.sensitivityRange|android.sensor.maxAnalogSensitivity| static information' -iE -A 1"
== Camera HAL device device@3.7/legacy/0 (v3.7) static information: ==
Resource cost: 33
--
android.sensor.info.sensitivityRange (f0001): int32[2]
[100 6400 ]
--
android.sensor.maxAnalogSensitivity (e000d): int32[1]
[6400 ]
--
== Camera HAL device device@3.7/legacy/1 (v3.7) static information: ==
Resource cost: 33
--
android.sensor.info.sensitivityRange (f0001): int32[2]
[100 1600 ]
--
android.sensor.maxAnalogSensitivity (e000d): int32[1]
[1600 ]
--
== Camera HAL device device@3.7/legacy/2 (v3.7) static information: ==
Resource cost: 33
--
android.sensor.info.sensitivityRange (f0001): int32[2]
[100 1550 ]
--
android.sensor.maxAnalogSensitivity (e000d): int32[1]
[1550 ]
C:\Users\>
9. pidof 获取进程 pid 方法
adb wait-for-device
adb root
adb remount
echo meminfo cameraprovider
for /f "delims=" %%i in ('adb shell pidof android.hardware.camera.provider@2.4-service_64') do (set pidnum=%%i)
echo %pidnum%
adb shell ps | findstr camera
adb shell dumpsys meminfo %pidnum%
pause
11. repo && Git 命令
放弃本地所有修改
repo forall -vc "git reset --hard"
repo 初始化
repo init
repo 更新代码
repo sync -c
12. 内存相关命令
dumpsys 10次 app 预览 meminfo
::@echo off
adb wait-for-device
adb root
adb remount
:: dump 10 次 camera app 内存
for /L %%i in (1,1,10) do (
adb shell am start -n com.android.camera/.Camera
timeout /T 10
echo -------------------dumpsys camera app memmory %%i ---------------- >> %cd%\meminfo_camera_app.txt
adb shell dumpsys meminfo -p com.android.camera >> %cd%\meminfo_camera_app.txt
:: 返回桌面
adb shell input keyevent 3
timeout /T 5
)
pause
13. 拍照脚本
::@echo off
adb wait-for-device
adb root
adb remount
:: 10 次拍照
for /L %%i in (1,1,2) do (
adb shell am start -n com.android.camera/.Camera
timeout /T 20
adb shell input keyevent 27
timeout /T 10
:: 返回桌面
adb shell input keyevent 3
timeout /T 5
)
pause
14. 跳过开机向导的方法
adb wait-for-device
adb root
adb remount
adb shell settings put global device_provisioned 1
adb shell settings put secure user_setup_complete 1
adb reboot
15. Qcom Dump RAW 图 YUV图方法
log开关
camxoverridesettings.txt 打开如下开关后,重启复现问题
autoimageDump = TRUE
autoimageDumpMask=0x2
autoinputimageDumpMask=0x2
dumpinputatOutput=TRUE
RAW YUV 图保存位置
使用adb 命令将保存的RAW 图以及YUV 图 pull 出来,注意复现问题尽量时间短一点,不然会保存大量的图
/data/vendor/camera
16 . Android 常用编译方法
1.frameworks/av/camera/目录:
make cameraserver -j32
cameraserver目录下:编译module是 ---> make cameraserver -j32
ndk目录下:编译module是 ---> make libcamera2ndk -j32
2.frameworks/av/services/camera/目录:
make libcameraservice -j32
libcameraservice目录下:编译module是 ---> make libcameraservice -j32
编译生成的文件是:out/target/product/lavender/system/lib/libcameraservice.so
3.基础编译 mm mmm
执行source ./build/envsetup.sh
lunch 对应的项目
然后就可以执行 模块 的mm 编译
4.vendorimage.img 镜像编译
make vendorimage
网友评论