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

בדף הזה מתוארים כלי הניפוי באגים בשירות המצלמה, שמאפשרים לראות שינויים בערכים של בקשות ללכידת תמונות וסרטונים ובתוצאות שנשלחות אל רכיב HAL של המצלמה וממנו. שירות המצלמה כולל את הפקודות watch ו-dumpsys. הפקודה watch זמינה במכשירים עם Android בגרסה 13 ואילך, והיא מאפשרת לשלוט במועד שבו מתבצע מעקב אחר תגים וגישה אליהם, לצפות בתצוגה מקדימה בזמן אמת של פריטי מידע שנאספו ממעקב אחרי תגים מלקוחות פתוחים, ולצפות בפריטי מידע שנשמרו במטמון מלקוחות סגורים. הפקודה dumpsys מאפשרת גישה למידע על ניפוי באגים, אבל היא לא מספקת קובצי dump של מעקב תגים מלקוחות סגורים.

פקודה לצפייה

בקטע הזה מוסבר איך משתמשים בפקודה 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

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

פלט לדוגמה:

$ 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: ארגומנט אופציונלי. המרווח באלפיות שנייה לרענון המידע. אם לא מעבירים ערך, ערך ברירת המחדל הוא 1,000.

הפקודה הזו מדפיסה מידע על מעקב תגים בזמן אמת. כדי לצאת, מקישים על 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 מספקת מגוון מידע לניפוי באגים משירות המצלמה. הפקודה הבאה מתעדת את כל נתוני ה-dump של ניפוי הבאגים משירות המצלמה:

adb shell dumpsys media.camera

הפקודה dumpsys מאפשרת גם לצלם dump של מעקב אחרי תגים מלקוחות פתוחים. עם זאת, dumpsys לא מספקת קובצי dump של מעקב תגים מלקוחות סגורים. דוגמאות לשימוש ב-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'