חברת Kuro Games צמצמה את צריכת החשמל ב-9.68% באמצעות Android Studio Power Profiler ו-ODPM במשחק Wuthering Waves

Wuthering Waves הוא משחק תפקידים פעולה ברמת פירוט גבוהה שפותח על ידי Kuro Games. אופטימיזציה של צריכת החשמל חשובה מאוד כדי לספק חוויית משתמש ברמה גבוהה במהלך סשנים ארוכים של משחק.

איור 1. צילום מסך של Wuthering Waves

ב-Android Studio הושק Power Profiler מ-Hedgehog (2023.1.1), שיכול לעזור למפתחים להבין את נתוני צריכת החשמל על סמך On Device Power Rails Monitor‏ (ODPM).

בעזרת יכולות הפרופיל של צריכת האנרגיה ב-Android Studio, אפשר גם לבצע בדיקת A/B יעילה של צריכת האנרגיה של התכונות באפליקציה ל-Android (כפי שמוצג בהמשך).

איור 2. צילום מסך של Power Profiler ב-Android Studio

מה הם עשו

ב-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 וגרפיקה.

איור 3. הבדלים בנתוני Power Rail בין הגרסה של ספטמבר לבין הגרסה של נובמבר

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

מקורות מידע נוספים

אופטימיזציה של יעילות האנרגיה