CamX 拍照性能分析

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

加入知识星球与更多Camera同学交流

  • 星球名称:深入浅出Android Camera
  • 星球ID: 17296815
  • 微信订阅号: 极客笔记圈

CamX如何打开systrace log

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

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

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

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角度看拍照性能

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程