Kuro Games zmniejsza zużycie energii o 9,68% dzięki profilowaniu zużycia energii w Android Studio i ODPM w przypadku gry Wuthering Waves

Wuthering Waves to fabularna gra akcji z grafiką wysokiej jakości stworzona przez Kuro Games. Optymalizacja zużycia energii jest bardzo ważna, aby zapewnić użytkownikom najwyższą jakość wrażeń podczas długich sesji grania.

Rysunek 1. Zrzut ekranu pokazujący dźwięk Wuthering Waves

W Android Studio pojawiło się narzędzie Power Profiler od Hedgehog (2023.1.1), które może pomóc programistom w analizowaniu danych o zużyciu energii na podstawie monitora On Device Power Rails (ODPM).

Dzięki funkcjom profilowania zużycia energii w Android Studio możesz też skutecznie przeprowadzać testy A/B zużycia energii w przypadku funkcji aplikacji na Androida (jak pokazano poniżej).

Rysunek 2. Zrzut ekranu narzędzia Power Profiler w Android Studio

Rozwiązanie

Kuro Games zaczęło od użycia narzędzia Android Studio Power Profiler, aby zrozumieć, jak zachowanie w grze wpływa na zużycie energii przez urządzenie. Doprowadziło to do opracowania przez nich narzędzia dostosowanego do potrzeb na podstawie platformy Peretto i ODPM, które zawiera te ulepszenia:

  • Widoki niestandardowe – deweloper może filtrować szyny zasilania i wstępnie ustawione elastyczne przedziały czasowe.
  • Lepsza konserwacja – deweloper może przesłać dane o zużyciu energii do niestandardowego systemu testów i porównać dane z różnych wersji gry.

Przetwarzanie danych ODPM

Aby uzyskać dostęp do danych ODPM, Kuro Games wykorzystało interfejs Perfetto Trace Processor (Python) Metric API do przetworzenia avg_used_power_mw data sesji trwającej 30 sekund z danych android_powerrails, które są zdefiniowane jako AndroidPowerRails w prototypie danych Peretto, w takim formacie:

Power Rail Jakość grafiki FPS Jasność Średnie zużycie energii Odsetek(na tor / łączna liczba)
power.rail.cpu.big Wysoki 30 Niska 474,158 mW 14,70%
power.rail.cpu.mid Wysoki 30 Niska 470,916 mW 14,60%
power.rail.cpu.little Wysoki 30 Niska 438,662 mW 13,60%
power.rail.gpu Wysoki 30 Niska 346,761 mW 10,70%
... ... ... ...

Identyfikowanie szyn zasilających o wysokim poborze mocy

Nie ma standardowej wartości dla każdej szyny zasilającej. Aby zidentyfikować elementy zużywające dużo energii, firma Kuro Games uruchomiła testy A/B, korzystając z różnych przypadków testowych, m.in. bezczynności, biegu i walki. Poszczególne szyny zasilające o wyraźnie wysokich wartościach można zidentyfikować, porównując wartości tych samych szyn. Porównując różnice w zachowaniu w różnych przypadkach testowych, można stopniowo ustalić główną przyczynę problemu z zużyciem energii.

Optymalizacje

Dzięki danym z ODPM firma Kuro Games może mierzyć poprawę w przypadku każdego scenariusza optymalizacji:

  • Zmiana strategii planowania rdzeni procesora i dostosowanie priorytetów różnych wątków w celu zmniejszenia obciążenia dużych rdzeni.
  • Wstępna kompilacja obiektu PSO (Pipeline State Object), aby zmniejszyć obciążenie procesora podczas kompilowania shaderów w czasie wykonywania.
  • Wdrożenie odrzucania zbiorów potencjalnie widocznych (PVS) w celu zmniejszenia obciążenia karty graficznej związanego z renderowaniem
  • Zapisywanie offline za pomocą funkcji usuwania cienia, aby zmniejszyć obciążenie karty graficznej związane z renderowaniem

Aby porównać wyniki testów w identycznych i powtarzalnych warunkach, firma Kuro Games pobrała dane ODPM w przypadku testowym, używając tej samej sceny 3D i tej samej perspektywy kamery o tym samym czasie trwania.

Wyniki

Wykorzystując dane z ODPM i profilowania zużycia energii, firma Kuro Games zmniejszyła łączne zużycie energii o 9,68%, z 3233 mW w wersji z września (0904) do 2920 mW w wersji z listopada (1.4 final). Na rysunku poniżej widać, jak zmniejsza się pobór mocy przy niezmiennych ustawieniach FPS i grafiki.

Rysunek 3. Różnice w danych dotyczących szyny w wersji z września i listopada

Dane ODPM są obecnie dostępne tylko na urządzeniach Pixel 6 i nowszych, ale ulepszenia można zauważyć na wszystkich urządzeniach z Androidem dzięki innym wskaźnikom, takim jak CPU Usage, GPU Usage i Batterystats. Na przykład w przypadku Oppo Reno 5 w tej samej scenie firma Kuro Games odnotowała ogólne zmniejszenie wykorzystania GPU o 9, 6%.

Rozpocznij

W przypadku zaawansowanych zastosowań możesz zacząć od danych Power Profiler lub Perfetto Power Rails.

Nazwy szyny zasilającej ODPM są specyficzne dla urządzenia. Nazwa szyny może wyglądać na przykład tak: „S2S_VDD_G3D”. Aby odczytać odpowiednie dane monitora zasilania, potrzebna jest szczegółowa znajomość sprzętu urządzenia. Od poziomu interfejsu API 35 Androida możesz używać interfejsu PowerMonitorgetSupportedPowerMonitors. Za pomocą PowerMonitor możesz pobrać mapowanie etykiet zrozumiałych dla człowieka na nazwy napięć wejściowych ustawione przez poszczególnych producentów OEM.

Aby sprawdzić poprawę na urządzeniach bez ODPM, możesz użyć zegarów procesora, zegarów GPU i szacunków przepustowości pamięci jako przybliżonych wartości zużycia energii.

Dodatkowe materiały

Optymalizacja efektywności energetycznej