本页介绍相机服务中的调试工具,用于查看发送到和发送自相机 HAL 的拍摄请求和结果值的变化。相机服务包含 watch
和 dumpsys
命令。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'