[null,null,["最后更新时间 (UTC):2025-01-15。"],[],[],null,["# Kuro Games reduces 9.68% power consumption through Android Studio Power Profiler and ODPM for Wuthering Waves\n\n[Wuthering Waves](https://play.google.com/store/apps/details?id=com.kurogame.wutheringwaves.global)\nis a high fidelity action RPG game developed by Kuro Games.\nOptimizing the power consumption is very important to sustainably deliver a\npremium user experience for long gaming sessions.\n**Figure 1.** Wuthering Waves Screenshot\n\nAndroid Studio introduced the [Power Profiler](/studio/profile/power-profiler)\nfrom Hedgehog (2023.1.1) that can help developers understand power consumption\ndata based on On Device Power Rails Monitor (ODPM).\n\nWith power profiling capabilities in Android Studio, you can also\n[effectively A/B test power consumption](https://android-developers.googleblog.com/2024/04/how-to-effectively-ab-test-power-consumption-for-your-android-app-features.html)\nfor your Android app's features (as shown below).\n**Figure 2.** Android Studio Power Profiler Screenshot\n\nWhat they did\n-------------\n\nKuro Games began by using the Android Studio Power Profiler to understand how\ngame behaviors impact device power consumption. This experience led them to\ndevelop a customized tool based on Perfetto and ODPM, incorporating the\nfollowing enhancements:\n\n- Customized views - the developer can filter power rails and preset flexible time ranges.\n- Better maintenance - the developer can upload the power consumption data to their customized QA system and compare data across game versions.\n\n### Process ODPM data\n\nTo access ODPM data, Kuro Games used\n[Perfetto Trace Processor (Python) Metric API](https://perfetto.dev/docs/analysis/trace-processor-python#metric)\nto process `avg_used_power_mw data` of 30-second session from\n`android_powerrails` metric, which is defined as `AndroidPowerRails` in\n[Pertetto metrics proto](https://android.googlesource.com/platform/external/perfetto/+/main/protos/perfetto/metrics/perfetto_merged_metrics.proto),\ninto the following format:\n\n| Power Rail | Graphics Quality | FPS | Brightness | Average Power consumption | Percentage(Per Rail / Total) |\n|-----------------------|------------------|-----|------------|---------------------------|------------------------------|\n| power.rail.cpu.big | High | 30 | Low | 474.158mW | 14.70% |\n| power.rail.cpu.mid | High | 30 | Low | 470.916mW | 14.60% |\n| power.rail.cpu.little | High | 30 | Low | 438.662mW | 13.60% |\n| power.rail.gpu | High | 30 | Low | 346.761mW | 10.70% |\n| ... | ... | ... | ... | ... | ... |\n\n| **Note:** Screen brightness contributes significantly to power consumption, so it is important to set the same brightness throughout power consumption testing.\n\n### Identify high-power-consumed power rails\n\nThere is no standard value for each power rail. To identify high-power-consumed\npower rails, Kuro Games created A/B tests using different test cases including\nidle, running and combating. Specific power rails with obviously high values\ncan be identified by comparing values of the same power rails. By comparing the\nbehavioral differences across various test cases, the root cause of the power\nconsumption issue will be figured out gradually.\n\n### Optimizations\n\nWith ODPM data, Kuro Games can measure the improvement of each\noptimization scenario:\n\n- Changing the CPU core scheduling strategy and adjusting priority of different threads to reduce the workload of big cores\n- Pre-compiling the PSO (Pipeline State Object) to reduce the runtime shader compiling workload of CPU\n- Implementing PVS (Potentially Visible Sets) culling to reduce the GPU rendering workload\n- Baking offline shadow occlusion culling to reduce the GPU rendering workload\n\nTo compare test results under identical and reproducible conditions, Kuro Games\nretrieved the ODPM data in a test case using the same 3D scene and camera\nperspective with the same duration.\n| **Note:** If you don't have a customized profile system, you can refer to this [blog post](https://android-developers.googleblog.com/2024/04/how-to-effectively-ab-test-power-consumption-for-your-android-app-features.html) about how to compare power consumption ODPM data of different tests with the same duration through Power Profiler.\n\nResults\n-------\n\nBy leveraging data from ODPM and power profiling, Kuro Games reduced total power\nconsumption by 9.68%, from 3233mW in the September release (version 0904) to\n2920mW in the November release (version 1.4 final). The following figure details\nthis power reduction under consistent FPS and graphics settings.\n**Figure 3.** Power rail data differences between September version and November version\n\nODPM data is currently only available for Pixel 6 and higher devices, but\nimprovements can be seen on all Android devices through other metrics including\nCPU Usage, GPU Usage and Batterystats. For example, Kuro Games also saw an\noverall 9.6% reduction in GPU usage in the same scene for Oppo Reno 5.\n\nGet started\n-----------\n\nYou can start from [Power Profiler](/studio/profile/power-profiler), or\n[Perfetto Power Rails](https://perfetto.dev/docs/reference/trace-packet-proto#PowerRails)\ndata for advanced use cases.\n\nODPM Power Rail names are device-specific. A rail name may be something like\n\"S2S_VDD_G3D\"; specific knowledge of the device hardware is required to\ninterpret the corresponding power monitor data. From Android API level 35, you\ncan use [`PowerMonitor`](/reference/android/os/PowerMonitor) from\n[`getSupportedPowerMonitors`](/reference/android/os/health/SystemHealthManager#getSupportedPowerMonitors(java.util.concurrent.Executor,%20java.util.function.Consumer%3Cjava.util.List%3Candroid.os.PowerMonitor%3E%3E)).\nWith PowerMonitor, you can retrieve the mapping between human-readable labels\nand the raw power rails names set by each individual OEMs.\n\nTo verify improvement on devices without ODPM, you can use CPU clocks, GPU\nclocks, and memory bandwidth estimates as a proxy for power consumption.\n\nAdditional resources\n--------------------\n\n[Optimize power efficiency](/games/optimize/power)"]]