התערבות במצב משחק היא אופטימיזציה ספציפית למשחקים שמוגדרת על ידי יצרני ציוד מקורי (OEM) כדי לשפר את הביצועים של משחקים שהמפתחים כבר לא מעדכנים. לדוגמה:
- שינוי הגודל של מאגר הנתונים האחורי של WindowManager.
- שימוש ב-ANGLE במקום בנהגים מקומיים של GLES.
אתם יכולים לאפשר למשחק לתמוך ולנהל את Game Mode API, כדי שהוא יוכל לבטל התערבויות של מצב משחק שסופקו על ידי יצרן הציוד המקורי (OEM).
ממשק ה-API של מצב המשחק והפעולות זמינים במכשירים הבאים:
- מכשירי Android 12 נבחרים
- במכשירים עם Android 13 ואילך
כל משחק יכול:
- מטמיעים את ההתנהגות של Game Mode API,
- להציע ליצרני ציוד מקורי הגדרות של התערבויות במצב משחק, או
- לבטל באופן מפורש את התערבויות מצב המשחק.
רקע
בקטע הזה נסביר מהן ההתערבויות של מצב המשחק ואיך לבצע אופטימיזציה של המשחק לכל מצב.
שינוי הגודל של מאגר התמונות האחורי ב-WindowManager
התערבות לשינוי הגודל של מאגר ה-backbuffer ב-WindowManager יכולה להפחית את העומס על המעבד הגרפי (GPU) של המכשיר. היא גם יכולה לצמצם את צריכת הסוללה כשקצב המשחק הוא לפי קצב פריימים יעד.
הפעלת שינוי הגודל יכולה להוביל לירידה של עד 30% בצריכת ה-GPU ו-10% בצריכת האנרגיה הכוללת של המערכת. התוצאות עשויות להשתנות בהתאם למכשיר שבו נעשה שימוש, לתנאי הסביבה ולגורמים אחרים, כמו עיבוד בו-זמני.
במשחק ללא קצב שבו יש הגבלה על GPU, סביר להניח שיהיו שיעורי פריימים גבוהים יותר במהלך עומסי GPU מופחתים.
מומלץ מאוד שהקצב של כל המשחקים יהיה מתאים, כי שיעורי פריימים לא אחידים משפיעים באופן משמעותי על אופן התפיסה של המשתמשים לגבי הביצועים.
ויסות נתונים (throttle) של FPS
ויסות נתונים (throttle) של FPS ב-Android הוא התערבות במצב משחק שעוזר למשחקים לפעול בקצב פריימים יציב יותר כדי לצמצם את צריכת הסוללה. התכונה זמינה ב-Android 13 ואילך. למידע נוסף, קראו את הסקירה הכללית על הגבלת FPS.
הערכת התערבויות במצב משחק
בקטע הזה נעשה שימוש בפקודה adb.
הגדרת המצבים
לפני שבודקים את ההתערבויות במצב משחק, צריך לבטל את ההסכמה לשימוש במצבי משחק בקובץ התצורה של מצב המשחק של האפליקציה. אחרת, הפלטפורמה תתעלם מהן ותתייחס רק לאופטימיזציות במשחק.
<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
xmlns:android="http://schemas.android.com/apk/res/android"
android:supportsBatteryGameMode="false"
android:supportsPerformanceGameMode="false"
/>
(אופציונלי) גיבוי של תצורת המכשיר הקיימת
במכשירי Pixel או במכשירים אחרים, יכול להיות שהגדרה קיימת של התערבות במשחקים כבר מוגדרת בהגדרות המכשיר. אפשר לשלוח שאילתה להגדרות באמצעות הפקודה:
adb shell device_config get game_overlay <PACKAGE_NAME>
אם השאילתה מחזירה את הערך null
, מתעלמים מההגדרה הקיימת. אחרת, שומרים אותה ומאפסים אליה אחרי הבדיקה.
הערכת התערבויות
כדי להעריך את ההתערבות של WindowManager בגודל של מאגר ה-backbuffer בפני עצמה, משתמשים בפקודה הבאה כדי להגדיר ערכים שונים של שינוי גודל מאגר ב-WindowManager במצבי המשחק השונים.
adb shell device_config put game_overlay <PACKAGE_NAME>
mode=2,downscaleFactor=0.9:mode=3,downscaleFactor=0.5
בדוגמה שלמעלה, הערך של mode=2
הוא 'ביצועים' והערך של mode=3
הוא 'חיסכון בסוללה'. הערך של downscaleFactor
מצוין כאחוז שחלה על הגדרת שינוי הגודל (לדוגמה, 0.7 הוא 70% ו-0.8 הוא 80%). שינוי גודל של 90% (0.9) הוא כמעט זניח, בעוד ששינוי גודל של 50% (0.5) הוא משמעותי.
אזהרה: יכול להיות שגודל התהליכים הצאצאים לא ישתנה בצורה נכונה ב-Android 12. במיוחד, חשוב לוודא שההצגה של הודעות קצרות ושל חלונות קופצים תקינה. מומלץ להגביל את הגדרת שינוי הגודל ל-70% לפחות.
אחרי שמגדירים את הערכים החדשים לשינוי הגודל, עוברים בין מצבי המשחק כדי לראות איך המשחק מושפע מהתערבות של WindowManager לשינוי הגודל של מאגר ה-backbuffer:
adb shell cmd game mode [standard|performance|battery] <PACKAGE_NAME>
חשוב להפעיל מחדש את המשחק אחרי כל בחירה של מצב משחק. כדי לבצע את ההתערבות של הפחתת הרזולוציה, צריך להפעיל מחדש את האפליקציה.
ביטול ההסכמה להתערבויות
אתם יכולים לקבוע אם התערבות תוחל על המשחק שלכם על ידי ביטול ההסכמה. לכל התערבות יש הגדרה משלה לביטול ההסכמה.
- אותו קובץ XML של תצורה שמשמש לניהול ההסכמה לשימוש במצבי המשחק והסרה של ההסכמה משמש גם להגדרות של התערבות:
<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
xmlns:android="http://schemas.android.com/apk/res/android"
android:allowGameDownscaling="false"
android:allowGameFpsOverride="false"
/>
- צריך ליצור מחדש את המשחק ולשלוח אותו מחדש כדי לבטל את ההסכמה.
כברירת מחדל, המערכת תשתמש בהתערבויות שהוגדרו על ידי יצרני הציוד המקורי (OEM), אלא אם תבטלו את השימוש בהן במשחק באופן מפורש.
משאבים
מידע נוסף על מדידה ואופטימיזציה של ביצועי משחקים:
כלי ליצירת תמונת מצב של מערכת – ניתוח השימוש במעבד (CPU) והקריאות לרכיבי הגרפיקה.
Android GPU Inspector – כלי לפרופיל גרפיקה ב-Android.
Android Frame Pacing Library – ספרייה שבעזרתה משחקים ב-OpenGL וב-Vulkan יכולים להשיג רינדור חלק וקצב פריימים תקין.
Android Performance Tuner – מדידה של קצב הפריימים והגרפיקה וביצוע אופטימיזציה שלהם במכשירי Android בהתאם לעומסים.
Power Profiler – כלי לזיהוי מקורות האנרגיה שבהם האפליקציה שלכם צורכת יותר אנרגיה מהנדרש.