[CamX] 性能分析调试技巧

本文总结在CamX上性能分析的一些调试技巧。

如何在log中打印FPS

首先从 /vendor/etc/camera/ 下面 pull 出camxoverridesettings.txt

adb pull /vendor/etc/camera/camxoverridesettings.txt

在该文件中添加如下两行:

enableFPSLog=TRUE
logPerfInfoMask=0xFFFFFFFF

再将camxoverridesettings.txt push到/vendor/etc/camera/,然后重启手机/重启provider进程。

在log中搜索 CalculateResultFPS 就能看到当时的帧率了:

camx打印FPS

CamX如何打开systrace

打开systrace,首先修改 camxoverridesettings.txt 执行如下命令

adb root
adb remount
adb shell "echo traceGroupsEnable=0xFFFFFFFF >> /vendor/etc/camera/camxoverridesettings.txt" 

接着执行如下命令打开systrace:

adb shell "echo 1 > d/tracing/events/camera/enable"
adb shell "echo 1 > /sys/kernel/debug/tracing/options/record-tgid"

最后执行 kill -9 pid 杀掉provider进程让其重启生效上面的设置。

命令设置完后,再通过 systrace.py 抓取包含拍照的systrace,执行如下命令:

python systrace.py gfx input view wm am bionic power sched camera freq idle video -b 20480 -t 4 -o capture.html

  • -b 表示systrace的buffer大小
  • -t 表示systrace抓几秒
  • -o 表示systrace输出的文件名

需要使用python 2.7版本, 如果需要抓取更长的systrace,需要加大buffer。

通过Systrace分析拍照性能

抓到systrace后,我们可以从App、Cameraserver、HAL三者的角度来看拍照时长。

App角度看拍照性能

通常App拍照会通过ImageReader去接收拍照的结果,因此我们可以以ImageReader接收到Buffer作为结束点。开始点即是用户点击Shutter Button时。

  • 开始点:deliverInputEvent。
  • 结束点:ImageReader的上升沿。

App角度看拍照性能

CameraServer角度看拍照性能

在Camera3Device的 prepareHalRequests()方法里面打印了拍照的开始systrace。在的 removeInFlightRequestIfReadyLocked方法里面打印了拍照结束的systrace。

  • 开始点:prepareHalRequests

    CameraServer角度看拍照性能

  • 结束点:removeInFlightRequestIfReadyLocked

    CameraServer角度看拍照性能

在systrace中,首先找到cameraserver进程,然后再找still capture。

CameraServer角度看拍照性能

HAL角度看拍照性能

通过 RequestTrace 可以看到HAL处理该Request的耗时。

HAL角度看拍照性能

如果我们想更进一步了解该Request在每个Node处理的耗时,可以systrace源文件中搜索 ProcessRequest 177

HAL角度看拍照性能

赞(8)
未经允许不得转载:极客笔记 » [CamX] 性能分析调试技巧
分享到: 更多 (0)