ניפוי באגים במצלמה

בדף הזה מתוארים הכלים לניפוי באגים בשירות המצלמה, שמאפשרים לראות שינויים בבקשת הצילום ובערכים של התוצאות שנשלחים אל HAL המצלמה וממנו. שירות המצלמה כולל את הפקודות watch ו-dumpsys. הפקודה watch זמינה במכשירים עם Android מגרסה 13 ואילך, ומאפשרת לקבוע מתי יתבצע מעקב אחרי התגים ותהיה גישה אליהם, להציג תצוגה מקדימה של נתוני גרסת dump של מעקב אחר תגים מלקוחות פתוחים ולצפות בנתוני גרסת dump שנשמרו במטמון מלקוחות סגורים. הפקודה 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 מתייחס לקבוצה של כל התגים android.control.* שקשורים ל-AF, ל-AE ול-AWB (הרשימה המלאה של התגים מופיעה במאמר TagMonitor.cpp).
  • clients: ארגומנט אופציונלי. רשימה מופרדת בפסיקים של שמות החבילות של הלקוחות שאחריהן מתבצע מעקב. הפונקציה עוקבת אחרי כל הלקוחות אם לא מועבר ארגומנט של לקוח, או אם הערך all נמצא ברשימת הלקוחות.

הפקודה הזו מפעילה מעקב אחרי תגים בלקוחות פתוחים ובכל הלקוחות שנפתחים לאחר מכן (עד הקריאה ל-stop). אחרי הקריאה ל-start, שירות המצלמה מאחסן במטמון דיווחים על מעקב אחר תגים מהלקוחות כשהם נסגרים.

אלא אם קוראים לפונקציה start, שירות המצלמה לא עוקב אחרי תגים של אף לקוח ולא שומר במטמון מעקב אחרי תגים. אם הערך all מועבר בפרמטר clients, שירות המצלמה עוקב אחרי תגים ומאחסן במטמון דמפים של מעקב מכל הלקוחות.

איך פורקים את המידע מהמעקב אחרי התג

כדי לדגום את המידע על מעקב התגים, משתמשים ב-:

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]

ניקוי נתוני dump שנשמרו במטמון

כדי לנקות את כל נתוני הדמפ של מעקב התגים שנשמרו במטמון, משתמשים בפקודה:

adb shell cmd media.camera watch clear

הפקודה הזו לא עוצרת את מעקב התגים.

הפסקת המעקב אחרי תגים

כדי להפסיק את המעקב אחר תגים בכל הלקוחות ולנקות את כל המאגרים שנשמרו למטמון של דיווחים על מעקב אחר תגים, משתמשים בפקודה:

adb shell cmd media.camera watch stop

הפקודה dumpsys

הפקודה dumpsys מספקת מגוון מידע על ניפוי באגים משירות המצלמה. הפקודה הבאה מתעדת את כל נתוני הדמפ של ניפוי הבאגים משירות המצלמה:

adb shell dumpsys media.camera

הפקודה dumpsys מאפשרת גם לצלם קבצים זמניים של מעקב אחר תגים מלקוחות פתוחים. עם זאת, dumpsys לא מספק קובצי SQL של מעקב אחרי תגים מלקוחות סגורים. דוגמאות לשימוש ב-dumpsys למעקב אחר תגים:

  • איך מתעדים דיווחים על מעקב אחר תגים מכל הלקוחות הפתוחים:

    adb shell dumpsys media.camera -m 3a | grep -A50 Monitored
  • הצגת תצוגה מקדימה של מידע בזמן אמת על מעקב התגים באמצעות הפקודה watch ב-Linux:

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