Android上Camera相关的日志还是非常多,当然正常版本上考虑到性能的问题,很多日志基本都是关了的。针对不同的模块,基本都有对应的property属性控制日志的开关,我们调试的时候,设置相应的property属性即可。
录像卡顿,想到的是和录像帧率有关,接下来要讲的就是如何去排查录像的帧率?
查看录像帧率的property属性:
adb shell setprop persist.vendor.debug.sf.showfps 1
对应的代码逻辑是在QCamera2HardwareInterface.cpp里面
------android/hardware/qcom/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp
/*===========================================================================
* FUNCTION : debugShowVideoFPS
*
* DESCRIPTION: helper function to log video frame FPS for debug purpose.
*
* PARAMETERS : None
*
* RETURN : None
*==========================================================================*/
void QCamera2HardwareInterface::debugShowVideoFPS()
{
mVFrameCount++;
nsecs_t now = systemTime();
nsecs_t diff = now - mVLastFpsTime;
if (diff > ms2ns(250)) {
mVFps = (((double)(mVFrameCount - mVLastFrameCount)) *
(double)(s2ns(1))) / (double)diff;
LOGI("[KPI Perf]: PROFILE_VIDEO_FRAMES_PER_SECOND: %.4f Cam ID = %d",
mVFps, mCameraId);
mVLastFpsTime = now;
mVLastFrameCount = mVFrameCount;
}
}
另外我们需要打印LOGI级别的日志,还需要把hal层的日志等级设置下。
setprop persist.vendor.camera.hal.debug 7
设置完 persist.vendor.camera.hal.debug 属性后,最好是重启下设备,然后每次重启设备后,都需要再重新设置下 persist.vendor.debug.sf.showfp 属性才生效。
属性设置好后,我们就可以看日志分析了。由于输出的日志会比较多,最好是通过logcat -G的命令,把日志缓存设置大点。
adb shell logcat -G 32M
我们过滤搜索录像帧率相关的日志:
logcat |grep PROFILE_VIDEO_FRAMES_PER_SECOND
我找了2台设备,一台是正常的,一台是卡顿的,分别查看了录像帧率的输出。
正常的设备,输出基本稳定在30fps左右,而异常的,则是不稳定,而且帧率有点低。
接下来,我是对比查看了下cpu频率,发现进入录像的时候,相比正常的设备,卡顿的设备是出现了cpu降频。后面就是让系统的同事去分析这个降频的问题了。
cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
*本人从事Android Camera相关开发已有5年,
*目前在深圳上班,
*小伙伴记得点我头像,看【个人介绍】进行关注哦,希望和更多的小伙伴一起交流 ~