相机调试

本页介绍相机服务中的调试工具,用于查看发送到和发送自相机 HAL 的拍摄请求和结果值的变化。相机服务包含 watchdumpsys 命令。watch 命令适用于搭载 Android 13 或更高版本的设备,可让您控制何时监控和访问代码,实时预览来自打开的客户端的代码监控转储以及查看来自关闭的客户端的缓存转储。dumpsys 命令允许访问调试信息,但不提供来自关闭的客户端的代码监控转储。

watch 命令

本部分介绍如何使用 watch 命令并提供了示例。

开始监控代码

如需开始监控代码,请使用以下命令:

adb shell cmd media.camera watch start -m <tags> [-c <clients>]

示例:

adb shell cmd media.camera watch start \
-m android.control.effectMode,android.control.aeMode \
-c com.google.android.GoogleCamera,com.android.chrome

参数:

  • tags:要监控的代码的逗号分隔列表。也接受简写形式 3a,其中 3a 是指与 AF、AE 和 AWB 相关的所有 android.control.* 代码的集合(有关代码的完整列表,请参阅 TagMonitor.cpp)。
  • clients:可选参数。代码受监控的客户端软件包名称的逗号分隔列表。如果未传递任何客户端参数,或客户端列表中出现 all,则监视所有客户端。

此命令会在打开的客户端中以及随后打开的任何客户端中开始监控代码(直到 stop 被调用为止)。start 被调用后,相机服务会在客户端关闭时缓存来自客户端的代码监控转储。

除非 start 被调用,否则相机服务不会监控任何客户端的代码,也不会缓存代码监控转储。如果在 clients 参数中传递 all,相机服务会监控所有客户端的代码并缓存监控转储。

转储代码监控信息

如需转储代码监控信息,请使用以下命令:

adb shell cmd media.camera watch dump

此命令会将代码监控信息转储为标准输出,然后退出。它会输出自 start(或上次 clear)起关闭的客户端的缓存代码监控转储,以及来自打开的客户端的最新代码监控转储。

示例输出:

$ adb shell cmd media.camera watch dump
Client: com.android.chrome (active)
1:com.android.chrome  f0:532642803202286ns:             REQ:android.control.aeMode: [ON] output stream ids:  0
1:com.android.chrome  f0:532642803202286ns:             REQ:android.control.afMode: [CONTINUOUS_PICTURE] output stream ids:  0
..
Client: com.google.android.GoogleCamera (cached)
0:com.google.android.GoogleCamera  f0:532601698728552ns:             REQ:android.control.aeMode: [ON] output stream ids:  0  3  1  2
0:com.google.android.GoogleCamera  f0:532601698728552ns:             REQ:android.control.afMode: [CONTINUOUS_PICTURE] output stream ids:  2  1  3  0
0:com.google.android.GoogleCamera  f0:532601698728552ns:             REQ:android.control.awbMode: [AUTO] output stream ids:  0  3  1  2
...

实时预览代码监控信息

如需实时预览代码监控信息,请使用以下命令:

adb shell cmd media.camera watch live [-n refresh_interval_ms]

示例:

adb shell cmd media.camera watch live -n 250

参数:

  • refresh_interval_ms:可选参数。刷新信息的时间间隔(以毫秒为单位)。如果未传递任何值,则默认为 1000。

此命令会实时输出代码监控信息。如需退出,请按回车键/Enter 键。

示例输出:

$ adb shell cmd media.camera watch live
Press return to exit...

0:com.google.android.GoogleCamera  f0:533016991302201ns:             REQ:android.control.aeMode: [ON] output stream ids:  1  3  0  2
0:com.google.android.GoogleCamera  f0:533016991302201ns:             REQ:android.control.afMode: [CONTINUOUS_PICTURE] output stream ids:  2  0  3  1
...
0:com.google.android.GoogleCamera  f0:533017066793915ns:                            RES:android.control.aeState: [SEARCHING]
0:com.google.android.GoogleCamera  f0:533017066793915ns: 3                          RES:android.control.aeState: [SEARCHING]
0:com.google.android.GoogleCamera  f0:533017066793915ns: 2                          RES:android.control.aeState: [SEARCHING]
0:com.google.android.GoogleCamera  f0:533017066793915ns:                            RES:android.control.afState: [PASSIVE_SCAN]

清除缓存的转储

如需清除所有缓存的代码监控转储,请使用以下命令:

adb shell cmd media.camera watch clear

此命令不会停止代码监控。

停止监控代码

如需停止监控所有客户端中的代码并清除为缓存代码监控转储而保留的所有缓冲区,请使用以下命令:

adb shell cmd media.camera watch stop

dumpsys 命令

dumpsys 命令提供相机服务的一系列调试信息。以下命令可通过相机服务捕获整个调试转储:

adb shell dumpsys media.camera

dumpsys 命令还允许从打开的客户端捕获代码监控转储。但是,dumpsys 不提供来自关闭的客户端的代码监控转储。以下是使用 dumpsys 进行代码监控的示例:

  • 从所有打开的客户端捕获代码监控转储:

    adb shell dumpsys media.camera -m 3a | grep -A50 Monitored
  • 使用 Linux watch 命令获取代码监控信息的实时预览:

    watch -n 1 -c 'adb shell dumpsys media.camera -m 3a | grep -A50 Monitored'