פתרון בעיות ב-AGI

בנושא הזה נסביר איך לפתור בעיות נפוצות כשמשתמשים ב-Android GPU Inspector (AGI) .

איפוס הגדרות ה-AGI

ההגדרות של AGI נשמרות בקובץ ~/.agic. אם הקובץ יוסר, כל הגדרות ה-AGI יימחקו, כולל הרשימה של מעקבים ותוצאות אימות של מכשירים שנפתחו לאחרונה.

כשל AGI במכשירים מסוימים

צריך לוודא שההגדרה שלך עומדת בכל הדרישות.

גם הדברים הבאים יכולים לעזור:

  • הפסקת כל תוכנית שעשויה להיות לה אינטראקציה עם המכשיר באמצעות ADB, כמו Android אולפן.

  • צריך להפעיל את האפשרות Stay awake (בקטע 'אפשרויות למפתחים' ב-Android) כדי למנוע בעיות שמתעוררות כשמסך המכשיר נכבה עקב מצב שינה.

הכלי לניתוח ביצועי המערכת לא מדווח על פעילות GPU במשחקי OpenGL ES

בשלב הזה, יש תמיכה רק במוני GPU כשעוקבים אחר OpenGL ES תרגום מכונה. פרטי הפעילות של GPU באפליקציות OpenGL ES לא פעילים ופיתוח.

הכלי ליצירת פרופילים של פריימים נכשל בחלק ממשחקי Vulkan

הדבר הראשון שצריך לוודא הוא שנעשה שימוש ב-Vulkan במשחק. משתמשים ב שכבת האימות של Vulkan ולוודא שהמשחק לא מציג שגיאות או אזהרות.

אם יש שגיאת אימות של Vulkan, המערכת לא צפויה להשתמש בכלי לניתוח פריימים של AGI לעבודה.

היה כשל במשחק במהלך יצירת מעקב אחר פרופיל הפריימים

אם המשחק פועל ללא AGI אבל לא פועל כשיוצרים פריים מעקב אחר הפרופיל, יכול להיות שהמשחק מזלזל תהליך אחר במהלך ההפעלה ברצף. במקרה כזה, צריך לציין את שם התהליך שעליו רוצים לעקוב בשדה 'שם התהליך' בשדה באפשרויות מעקב.

כדי לזהות את הבעיה הזו, אפשר לבדוק את פלט ה-Logcat בזמן שיוצרים מעקב ולבדוק אם מתחיל תהליך אחר:

# Clear the logcat output
adb logcat -c

## Use AGI to attempt to create a frame profile trace

Look at the logcat output to identify the processes that are running AGI. 

adb logcat | grep "this process name"
I GAPID   : gapii [gapii/cc/spy.cpp:109] this process name: com.example.mygame
I GAPID   : gapii [gapii/cc/spy.cpp:109] this process name: com.example.mygame:GameProcess

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

המשחק מתחיל בתהליך ראשי בשם com.example.mygame, ולאחר מכן מתפצל תהליך חדש בשם com.example.mygame:GameProcess. אם רינדור המשחק בפועל מתרחש בתהליך השני, עליכם לציין AGI שזה התהליך שאתה רוצה לעקוב אחריו. אפשר לעשות זאת על ידי הזנת שם התהליך בשדה Process name של תיבת הדו-שיח של האפשרות למעקב.

נכשל במשחק אחרי השימוש ב-AGI

אם מעקב לא מסתיים בצורה תקינה, AGI עשוי להשאיר חלק מההגדרות של Android מצב שעלול להפריע להפעלות הבאות של האפליקציה. ההגדרות האלה:

  • הגדרות שקשורות לשכבות Vulkan:

    • enable_gpu_debug_layers

    • gpu_debug_app

    • gpu_debug_layers

    • gpu_debug_layer_app

  • הגדרות שקשורות ל-ANGLE:

    • angle_debug_package

    • angle_gl_driver_selection_values

    • angle_gl_driver_selection_pkgs

אם יש בעיות באפליקציה אחרי השימוש ב-AGI, אפשר לנסות לפתור את הבעיות האלה באמצעות פקודות adb הבאות:

# Vulkan layers
adb shell settings delete global enable_gpu_debug_layers
adb shell settings delete global gpu_debug_app
adb shell settings delete global gpu_debug_layers
adb shell settings delete global gpu_debug_layer_app
# ANGLE
adb shell settings delete global angle_debug_package
adb shell settings delete global angle_gl_driver_selection_values
adb shell settings delete global angle_gl_driver_selection_pkgs

המשחק נראה שונה כשמפעילים אותו דרך AGI בזמן יצירת מעקב אחר פרופיל פריימים

כדי ליצור מעקב אחר פרופיל פריים, AGI מיירט את הקריאות ל-API הגרפי שמתבצעות וזה עשוי להשפיע על הרינדור של המשחק.

AGI מתעד שיחות של Vulkan. במשחקי OpenGL ES, AGI מסתמך על ANGLE לתרגום OpenGL ES ל-Vulkan. אם המשחק נראה שונה (למשל, צבעים מסוימים אינם אלה שציפיתם) אם מפעילים אותו דרך AGI, סביר להניח שמדובר בבאג ב-AGI או ב-ANGLE. כדי לעזור לנו להבין טוב יותר את שורש הבעיה, לנסות את הפעולות הבאות.

משחקי Vulkan: מעקב עם כל התוספים של Vulkan

אפשרות המעקב הכללת תוספים לא מוכרים קובעת אם מדיניות GGI צריכה להיות כוללות תוספי Vulkan שהוא לא תומך בו. (עיון רשימה של תוספים נתמכים).

אם האפליקציה משתמשת בתוסף שלא נתמך על ידי AGI, יכול להיות שתיתקלו התנהגות לא רצויה, כולל שגיאות או קריסות קלות, בעת הפעלה חוזרת של למעקב.

כדאי לנסות להפעיל את האפשרות הזו ואז להפעיל מעקב נוסף של פרופיל הפריימים. אם המשחק מוצגת כצפוי כאשר האפשרות מופעלת, המשחק עשוי להסתמך על Vulkan שאינה נתמכת על ידי AGI.

משחקי OpenGL ES: פועלים עם ANGLE בלבד

אפשר להפעיל את משחק OpenGL ES עם ANGLE אבל בלי AGI כדי לבדוק אם השגיאה הרינדור מגיע מבעיה ב-ANGLE.

אם כבר ניסית ליצור מעקב אחרי פרופיל הפריימים של OpenGL ES ANGLE כבר התקין את ANGLE במכשיר. חבילת ANGLE שבה משתמשת השם של AGI נקרא org.chromium.angle.agi.

כדי לאלץ את המשחק לרוץ ב-ANGLE, משתמשים בפקודות הבאות:

# Make sure that the AGI capture layer will be ignored
adb shell settings delete global enable_gpu_debug_layers
# Force the package com.example.mygame to use ANGLE
adb shell settings put global angle_debug_package org.chromium.angle.agi
adb shell settings put global angle_gl_driver_selection_values angle
adb shell settings put global angle_gl_driver_selection_pkgs com.example.mygame

אם המשחק נראה שונה עם ההגדרות האלה, אז כנראה שיש באג ANGLE ולא AGI אם המשחק נראה תקין עם ההגדרות האלה, אבל נראה בזמן שאתם יוצרים מעקב AGI, אז זה כנראה באג ב-AGI.

כדי לדווח על באגים ב-AGI, אפשר ליצור בעיה ב-GitHub.