我是靠谱客的博主 悦耳野狼,这篇文章主要介绍Qcom平台 Camera 调试技巧 01CPU & GPU Android 系统负载相关查看系统资源 cpu mem 占用, 以进程的形式查看系统 mem 占比查看系统 cpu 占比查看所有运行的后台进程camera 外部 YUV 库, Android SDK下 获取系统cpu使用情况获取系统cpu使用情况 获取cpu使用率情况 获取系统GPU使用情况查看 GPU busy 占比 查看 GPU 的 clk 频率获取cpu的工作频率 AEC 自动曝光测试dump h.264 编码数据流抓取 h.,现在分享给大家,希望可以做个参考。

CPU & GPU Android 系统负载相关

查看系统资源 cpu mem 占用, 以进程的形式

 进去后, 按 p 进行 cpu 占比由大到小的排序显示, 显示有延时, 默认 5s 刷新一次
  adb shell top

查看系统 mem 占比

  adb shell dumpsys meminfo

查看系统 cpu 占比

  adb shell dumpsys cpuinfo

查看所有运行的后台进程

adb shell ps -A

camera 外部 YUV 库, Android SDK下 

  目录: external/libyuv/

获取系统cpu使用情况

参考链接: 原文链接:https://blog.csdn.net/u010126792/article/details/61617491

获取系统cpu使用情况 

//获取cpu的最大工作频率(多个核心修改cpu0,cpu1进行查询): 

 adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq 

获取cpu使用率情况 

 结果包括总的cpu使用率和每个核的cpu使用率 
 但结果无法直接得到cpu每个核心的使用率,需要通过公式进行计算,查看非常不方便。 
 还可以设置cpu的工作模式,一般包括interactive conservative ondemand userspace powersave performance 这几种工作模式, 
 adb shell "cat /proc/stat" 

 cpu的使用率,也可以利用top命令,但无法查看单个核的使用率 
 cpu无论4核,8核,还是10核同时工作的一般只有4个核心。
 adb shell "cat /proc/stat" 
 cpu系统架构,核心数等 
 adb shell dumpsys cpuinfo 

获取系统GPU使用情况

//获取系统GPU使用情况,gpu使用率 

查看 GPU busy 占比 

 // 会打印出两个值, 第一个/第二个 就是 GPU busy 的百分比 
 adb  shell "cat /sys/class/kgsl/kgsl-3d0/gpubusy" 
//结果包含两列数字,已用第一列和第二列做除法可以得到gpu的使用率 

查看 GPU 的 clk 频率

  adb shell "cat /sys/class/kgsl/kgsl-3d0/gpuclk" 
//现在更多的程序利用opengles,vulkan等gpu接口绘制,他们直接申请gpu存储,节省了cpu消耗,使绘制更快。

获取cpu的工作频率 

 adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 

adb 查看系统当前支持 camera

【Android9.0】

  adb shell
  cd  vendor/etc/camera
  cat camera_config.xml

AEC 自动曝光测试

 adb 开启 aec log // aetest 自动曝光测试
  adb shell setprop persist.vendor.camera.sensor.debug 5
  adb shell setprop persist.vendor.camera.stats.aec.debug 5  // 设置 aec 全局 debug log
  adb shell setprop persist.vendor.camera.stats.aetest 1        //  开启自动曝光测试
  AEC 测试设备、环境光固定,设置完后,重启相机生效

dump OTP 数据

复制代码
1
2
3
4
5
adb shell setprop persist.vendor.camera.cal.dump 1 数据路径: "/data/misc/camera/" 或者 "/data/vendor/camera/"

dump h.264 编码数据流

复制代码
1
2
3
4
5
6
7
8
adb shell chmod 777 data/vendor/media adb shell setenforce 0 adb shell setprop vidc.enc.log.in 1 adb shell setprop vendor.vidc.enc.log.in 1 adb shell setprop vidc.enc.log.out 1 adb shell setprop vendor.vidc.enc.log.out 1

data/vendor/media 目录下会生成编码后的数据流

抓取 h.264 编码log

复制代码
1
2
3
4
5
6
7
8
9
10
11
adb root adb shell setenforce 0 adb shell "echo 0x103F > /d/msm_vidc/debug_level" adb shell "echo 0x3f > /d/msm_vidc/fw_level" adb shell "echo 100 > /sys/module/videobuf2_core/parameters/debug" adb shell "echo 0 > /proc/sys/kernel/kptr_restrict" adb shell setprop vidc.debug.level 7 adb shell setprop vendor.vidc.debug.level 7 adb shell chmod 777 data/vendor/media

打印进程调用栈

adb shell debuggerd -b




 vfe clk 的计算

复制代码
1
2
3
4
5
6
vendorqcomproprietarymm-cameramm-camera2media-controllermodulesiface2iface_util.c static uint64_t iface_util_get_vfe_clk(   uint32_t num_sensor_meta,   ispif_out_info_t *split_info,   sensor_out_info_t *sensor_out_info,   uint32_t isp_id)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
min_line_length = MIN(ll_max, theoretical_line_length); if (min_line_length) { vfe_clk = pixels_per_line * sensor_out_info->op_pixel_clk / min_line_length; } else { vfe_clk = sensor_out_info->op_pixel_clk; } /* Make sure the vfe clock meets the minimum VBI requirements */ if ((sensor_out_info->min_vbi != 0) && (sensor_out_info->min_vbi < REQUIRED_MIN_VBI)){ vfe_clk = vfe_clk * REQUIRED_MIN_VBI / sensor_out_info->min_vbi; CDBG_HIGH("%s: not enough VBI cycle %dn",__func__, sensor_out_info->min_vbi); } { /* override to force ISP clock rate */ char prop[255]; int override = 0; property_get("persist.vendor.camera.dualcam.override", prop, "0"); override = atoi(prop); if (override) { vfe_clk = MAX(vfe_clk, sensor_out_info->op_pixel_clk); } } /* override to force ISP clock rate */

ae收敛帧数计算

aec_settle




ISO计算

ISO = (analog_gain*100)/ISO_100_gain。
效果参数中 ISO_100_gain =1

查看 camera 支持的分辨率

adb shell dumpsys media.camera

固定帧率 

persist.vendor.debug.set.fixedfps

调试 查看帧率 Log

关键字:PROFILE_PREVIEW_FRAMES_PER_SECOND 

默认fps log是不输出的,需要用到adb命令打开 
adb 打开帧率log 

adb shell setprop persist.vendor.debug.sf.showfps 1

预览帧率(preview fps ) Log

打印preview帧率log的文件路径和函数:

// HAL-1 架构的
hardwareqcomcameraQCamera2HALQCamera2HWICallbacks.cpp
void QCamera2HardwareInterface::debugShowPreviewFPS()

帧率计算方式:

mPFps = (((double)(mPFrameCount - mPLastFrameCount)) * (double)(s2ns(1))) / (double)diff;

preview帧率 log:

01-04 06:35:15.331   523  3321 I QCamera : <HAL><INFO> debugShowPreviewFPS: 3332: [KPI Perf]: PROFILE_PREVIEW_FRAMES_PER_SECOND : 29.7241 Cam ID = 0

如果找不到 preview、video、raw的 fps log,
请先打开 hal log 和 fps log,后重启,再录像,再抓log

复制代码
1
2
3
4
open hal log: adb shell setprop persist.vendor.camera.hal.debug 5 open fps log: adb shell setprop persist.vendor.debug.sf.showfps 1 adb sync adb reboot

视频帧率 (video fps)  Log 

关键字:PROFILE_PREVIEW_FRAMES_PER_SECOND 

默认fps log是不输出的,需要用到adb命令打开 

adb 打开帧率log 
adb shell setprop persist.vendor.debug.sf.showfps 1 

打印video帧率log的文件路径和函数: 

hardwareqcomcameraQCamera2HALQCamera2HWICallbacks.cpp 
void QCamera2HardwareInterface::debugShowVideoFPS() 

video fps计算方式 

 mVFps = (((double)(mVFrameCount - mVLastFrameCount)) * (double)(s2ns(1))) / (double)diff;

video fps log:

01-04 06:34:52.713   523  3316 I QCamera : <HAL><INFO> debugShowVideoFPS: 3308: [KPI Perf]: PROFILE_VIDEO_FRAMES_PER_SECOND: 32.9534 Cam ID = 0 

调试 Cam AE 自动曝光测试

AE TEST,用于检测曝光的线性度。需要配合开启AEC LOG和使用。

AEC 测试设备、环境光固定,设置完后,重启相机生效。

复制代码
1
2
3
adb shell setprop persist.vendor.camera.sensor.debug 5 adb shell setprop persist.vendor.camera.stats.aec.debug 5  // 设置 aec 全局 debug log adb shell setprop persist.vendor.camera.stats.aetest 1     //  开启自动曝光测试

调试 3A Simulation AWB 模拟

需要使用 CHromatix 6.6 Tools,并导入 metedata 文件和3A DLL 文件。

metadata 文件如下:

调试 dump metadata 数据

Please try below command and be sure to enable zsl 

复制代码
1
2
3
4
5
6
7
8
9
10
adb root adb remount adb shell setprop persist.vendor.camera.raw_yuv 1 adb shell setprop persist.vendor.camera.raw.format 31 adb shell chmod 777 /data adb shell setprop persist.vendor.camera.dumpimg 20 adb shell setprop persist.vendor.camera.zsl_raw 1 adb shell setprop persist.vendor.camera.dumpmetadata 1 adb shell setenforce 0 adb shell sync

待续。。。

最后

以上就是悦耳野狼最近收集整理的关于Qcom平台 Camera 调试技巧 01CPU & GPU Android 系统负载相关查看系统资源 cpu mem 占用, 以进程的形式查看系统 mem 占比查看系统 cpu 占比查看所有运行的后台进程camera 外部 YUV 库, Android SDK下 获取系统cpu使用情况获取系统cpu使用情况 获取cpu使用率情况 获取系统GPU使用情况查看 GPU busy 占比 查看 GPU 的 clk 频率获取cpu的工作频率 AEC 自动曝光测试dump h.264 编码数据流抓取 h.的全部内容,更多相关Qcom平台内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部