相機偵錯

本頁說明相機服務中的偵錯工具,可用於查看傳送至相機 HAL 和從相機 HAL 傳送的擷取要求和結果值的變更。相機服務包含 watchdumpsys 指令。watch 指令可在搭載 Android 13 以上版本的裝置上使用,可用於控管標記的監控和存取時機、從開放用戶端即時預覽標記監控傾印,以及查看從關閉用戶端快取的傾印。dumpsys 指令允許存取偵錯資訊,但無法提供來自封閉用戶端的標記監控傾印。

手錶指令

本節將說明如何使用 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,否則攝影機服務不會監控任何用戶端的標記,也不會快取標記監控傾印。如果 allclients 參數中傳遞,攝影機服務會監控標記,並快取所有用戶端的監控傾印。

傾印標記監控資訊

如要傾印標記監控資訊,請使用:

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。

這個指令會即時顯示代碼監控資訊。如要退出,請按下 return/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'