Wuthering Waves הוא משחק תפקידים פעולה ברמת פירוט גבוהה שפותח על ידי Kuro Games. אופטימיזציה של צריכת החשמל חשובה מאוד כדי לספק חוויית משתמש ברמה גבוהה במהלך סשנים ארוכים של משחק.
ב-Android Studio הושק Power Profiler מ-Hedgehog (2023.1.1), שיכול לעזור למפתחים להבין את נתוני צריכת החשמל על סמך On Device Power Rails Monitor (ODPM).
בעזרת יכולות הפרופיל של צריכת האנרגיה ב-Android Studio, אפשר גם לבצע בדיקת A/B יעילה של צריכת האנרגיה של התכונות באפליקציה ל-Android (כפי שמוצג בהמשך).
מה הם עשו
ב-Kuro Games החלו להשתמש ב-Android Studio Power Profiler כדי להבין איך התנהגויות במשחקים משפיעות על צריכת החשמל של המכשיר. הניסיון הזה הוביל אותם לפתח כלי מותאם אישית שמבוסס על Perfetto ו-ODPM, שכולל את השיפורים הבאים:
- תצוגות בהתאמה אישית – המפתח יכול לסנן את נתוני החשמל ולקבוע מראש טווחי זמן גמישים.
- תחזוקה טובה יותר – המפתח יכול להעלות את נתוני צריכת החשמל למערכת בקרת האיכות בהתאמה אישית שלו ולהשוות בין הנתונים בגרסאות השונות של המשחק.
עיבוד נתוני ODPM
כדי לגשת לנתוני ODPM, Kuro Games השתמשו ב-Perfetto Trace Processor (Python) Metric API כדי לעבד את avg_used_power_mw data
של סשן בן 30 שניות מהמדד android_powerrails
, שמוגדר כ-AndroidPowerRails
ב-Pertetto metrics proto, לפורמט הבא:
Power Rail | איכות הגרפיקה | FPS | בהירות | צריכת חשמל ממוצעת | אחוז(לכל רכבת / סה"כ) |
---|---|---|---|---|---|
power.rail.cpu.big | רחב | 30 | נמוכה | 474.158mW | 14.70% |
power.rail.cpu.mid | רחב | 30 | נמוכה | 470.916mW | 14.60% |
power.rail.cpu.little | רחב | 30 | נמוכה | 438.662mW | 13.60% |
power.rail.gpu | רחב | 30 | נמוכה | 346.761mW | 10.70% |
... | ... | ... | ... | ... | ... |
זיהוי של פסי מתח עם צריכת חשמל גבוהה
אין ערך סטנדרטי לכל פסי החשמל. כדי לזהות מקור צריכת חשמל גבוהה, Kuro Games יצרה בדיקות A/B באמצעות תרחישי בדיקה שונים, כולל מצב חוסר פעילות, מצב ריצה ומצב לחימה. אפשר לזהות מקור מתח ספציפי עם ערכים גבוהים במיוחד על ידי השוואת הערכים של אותו מקור מתח. בהשוואת ההבדלים בהתנהגות בין תרחישי בדיקה שונים, תוכלו לזהות בהדרגה את שורש הבעיה בצריכת החשמל.
פעולות אופטימיזציה
בעזרת נתוני ODPM, צוות Kuro Games יכול למדוד את השיפור בכל תרחיש אופטימיזציה:
- שינוי האסטרטגיה של תזמון הליבות של המעבד והתאמת העדיפות של שרשורים שונים כדי להפחית את עומס העבודה של הליבות הגדולות
- הידור מראש של PSO (אובייקט מצב צינור עיבוד נתונים) כדי לצמצם את עומס העבודה של המעבד (CPU) בהידור שפת שגיאות של Shader בסביבת זמן הריצה
- הטמעת סינון של קבוצות PVS (קבוצות שעשויות להיות גלויות) כדי לצמצם את עומס העבודה של העיבוד ב-GPU
- עיבוד אופליין של חיסול צללים כדי להפחית את עומס העבודה של העיבוד ב-GPU
כדי להשוות בין תוצאות הבדיקה בתנאים זהים שאפשר לשחזר, צוות Kuro Games אחזר את נתוני ODPM בתרגיל בדיקה באמצעות אותה סצנה תלת-ממדית ותצוגת מצלמה באותו משך זמן.
תוצאות
בעזרת נתונים מ-ODPM ופרופילי צריכת חשמל, צוות Kuro Games צמצם את צריכת החשמל הכוללת ב-9.68%, מ-3,233mW במהדורת ספטמבר (גרסה 0904) ל-2,920mW במהדורת נובמבר (גרסה 1.4 סופית). באיור הבא מפורטת הפחתת האנרגיה הזו בהגדרות קבועות של FPS וגרפיקה.
נתוני ODPM זמינים כרגע רק במכשירי Pixel 6 ואילך, אבל אפשר לראות שיפורים בכל מכשירי Android באמצעות מדדים אחרים, כולל 'שימוש ב-CPU', 'שימוש ב-GPU' ו-Batterystats. לדוגמה, ב-Kuro Games גם ראו ירידה כוללת של 9.6% בשימוש ב-GPU באותה סצנה ב-Oppo Reno 5.
שנתחיל?
אפשר להתחיל מנתונים של Power Profiler או מנתונים של Perfetto Power Rails לתרחישי שימוש מתקדמים.
השמות של ODPM Power Rail הם ספציפיים למכשיר. שם של פסי ההזנה יכול להיות, למשל, "S2S_VDD_G3D". כדי לפרש את הנתונים המתאימים של מעקב צריכת החשמל, נדרש ידע ספציפי לגבי חומרת המכשיר. החל מרמת Android API 35, אפשר להשתמש ב-PowerMonitor
מ-getSupportedPowerMonitors
.
בעזרת PowerMonitor תוכלו לאחזר את המיפוי בין תוויות שקריאות לבני אדם לבין שמות של מסיעי חשמל גולמיים שהוגדרו על ידי כל יצרן ציוד מקורי.
כדי לאמת את השיפור במכשירים ללא ODPM, אפשר להשתמש בשעוני מעבדים, בשעוני GPU ובאומדנים של רוחב הפס של זיכרון כמדדים לצריכת החשמל.