Wuthering Waves는 Kuro Games에서 개발한 Hi-Fi 액션 RPG 게임입니다. 장시간 게임 세션에서 프리미엄 사용자 환경을 지속해서 제공하려면 전원 소모량을 최적화하는 것이 매우 중요합니다.
Android 스튜디오에는 개발자가 온디바이스 전원 레일 모니터 (ODPM)를 기반으로 전원 소모량 데이터를 파악하는 데 도움이 되는 Hedgehog의 전원 프로파일러 (2023.1.1)가 도입되었습니다.
Android 스튜디오의 전원 프로파일링 기능을 사용하면 Android 앱 기능의 전원 소모량을 효과적으로 A/B 테스트할 수도 있습니다 (아래 참고).
진행한 작업
Kuro Games는 Android 스튜디오 전원 프로파일러를 사용하여 게임 동작이 기기 전원 소모량에 미치는 영향을 파악하는 것으로 시작했습니다. 이를 통해 Perfetto 및 ODPM을 기반으로 다음과 같은 개선사항을 통합한 맞춤 도구를 개발했습니다.
- 맞춤설정된 뷰 - 개발자는 전원 레일을 필터링하고 유연한 시간 범위를 사전 설정할 수 있습니다.
- 유지보수 개선 - 개발자는 전원 소모량 데이터를 맞춤설정된 QA 시스템에 업로드하고 게임 버전 간에 데이터를 비교할 수 있습니다.
ODPM 데이터 처리
ODPM 데이터에 액세스하기 위해 Kuro Games는 Perfetto Trace Processor (Python) Metric API를 사용하여 Pertetto metrics proto에서 AndroidPowerRails
로 정의된 android_powerrails
측정항목의 30초 세션 avg_used_power_mw data
를 다음 형식으로 처리했습니다.
전원 레일 | 그래픽 품질 | 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 테스트를 만들었습니다. 값이 분명히 높은 특정 전원 레일은 동일한 전원 레일의 값을 비교하여 식별할 수 있습니다. 다양한 테스트 사례 간의 동작 차이를 비교하면 전원 소모 문제의 근본 원인을 점진적으로 파악할 수 있습니다.
최적화
Kuro Games는 ODPM 데이터를 사용하여 각 최적화 시나리오의 개선사항을 측정할 수 있습니다.
- CPU 코어 예약 전략을 변경하고 여러 스레드의 우선순위를 조정하여 대용량 코어의 워크로드를 줄입니다.
- PSO (파이프라인 상태 객체)를 사전 컴파일하여 CPU의 런타임 셰이더 컴파일 워크로드 줄이기
- GPU 렌더링 워크로드를 줄이기 위해 PVS (잠재적으로 표시 가능한 세트) 컬링 구현
- GPU 렌더링 워크로드를 줄이기 위해 오프라인 그림자 가림 컬링을 베이킹
동일하고 재현 가능한 조건에서 테스트 결과를 비교하기 위해 Kuro Games는 동일한 3D 장면과 동일한 길이의 카메라 관점을 사용하여 테스트 사례에서 ODPM 데이터를 검색했습니다.
결과
Kuro Games는 ODPM 및 전원 프로파일링의 데이터를 활용하여 총 전원 소모량을 9.68% 줄였습니다. 9월 출시 (버전 0904)의 3233mW에서 11월 출시 (버전 1.4 최종)의 2920mW로 줄었습니다. 다음 그림은 일관된 FPS 및 그래픽 설정에서의 전원 절감 효과를 자세히 보여줍니다.
ODPM 데이터는 현재 Pixel 6 이상 기기에서만 사용할 수 있지만 CPU 사용량, GPU 사용량, Batterystats를 비롯한 다른 측정항목을 통해 모든 Android 기기에서 개선사항을 확인할 수 있습니다. 예를 들어 Kuro Games에서도 Oppo Reno 5의 동일한 장면에서 GPU 사용량이 전반적으로 9.6% 감소했습니다.
시작하기
고급 사용 사례의 경우 전원 프로파일러 또는 Perfetto 전원 레일 데이터에서 시작할 수 있습니다.
ODPM 전원 레일 이름은 기기별로 다릅니다. 레일 이름은 'S2S_VDD_G3D'와 같을 수 있습니다. 해당 전원 모니터 데이터를 해석하려면 기기 하드웨어에 관한 구체적인 지식이 필요합니다. Android API 수준 35부터는 getSupportedPowerMonitors
에서 PowerMonitor
를 사용할 수 있습니다.
PowerMonitor를 사용하면 사람이 읽을 수 있는 라벨과 각 개별 OEM에서 설정한 원시 전원 레일 이름 간의 매핑을 검색할 수 있습니다.
ODPM이 없는 기기에서 개선사항을 확인하려면 CPU 클럭, GPU 클럭, 메모리 대역폭 추정치를 전원 소모량의 대리 변수로 사용할 수 있습니다.