Wuthering Waves یک بازی اکشن RPG است که توسط شرکت Kuro Games ساخته شده است. بهینه سازی مصرف انرژی برای ارائه پایدار تجربه کاربری ممتاز برای جلسات طولانی بازی بسیار مهم است.
اندروید استودیو Power Profiler را از Hedgehog (2023.1.1) معرفی کرد که میتواند به توسعهدهندگان کمک کند تا دادههای مصرف انرژی را بر اساس On Device Power Rails Monitor (ODPM) درک کنند.
با قابلیتهای پروفایل قدرت در Android Studio، میتوانید به طور موثر A/B مصرف انرژی را برای ویژگیهای برنامه اندروید خود آزمایش کنید (مانند شکل زیر).
کاری که آنها انجام دادند
Kuro Games با استفاده از Android Studio Power Profiler برای درک اینکه چگونه رفتارهای بازی بر مصرف انرژی دستگاه تأثیر می گذارد، شروع کرد. این تجربه آنها را به ایجاد یک ابزار سفارشی بر اساس Perfetto و ODPM هدایت کرد که شامل پیشرفتهای زیر است:
- نماهای سفارشی - توسعه دهنده می تواند ریل های برق را فیلتر کرده و محدوده زمانی انعطاف پذیر را از پیش تعیین کند.
- نگهداری بهتر - توسعه دهنده می تواند داده های مصرف انرژی را در سیستم QA سفارشی خود آپلود کند و داده ها را در نسخه های بازی مقایسه کند.
پردازش داده های ODPM
برای دسترسی به دادههای ODPM، Kuro Games از Perfetto Trace Processor (Python) Metric API برای پردازش avg_used_power_mw data
30 ثانیهای از متریک android_powerrails
، که بهعنوان AndroidPowerRails
در پروتو متریک Pertetto تعریف میشود، در قالب زیر استفاده کرد:
ریل برق | کیفیت گرافیک | FPS | روشنایی | میانگین مصرف برق | درصد (در هر ریل / کل) |
---|---|---|---|---|---|
power.rail.cpu.big | بالا | 30 | کم | 474.158 میلی وات | 14.70٪ |
power.rail.cpu.mid | بالا | 30 | کم | 470.916 مگاوات | 14.60٪ |
power.rail.cpu.little | بالا | 30 | کم | 438.662 مگاوات | 13.60٪ |
power.rail.gpu | بالا | 30 | کم | 346.761 میلی وات | 10.70٪ |
... | ... | ... | ... | ... | ... |
ریل های برق پرمصرف را شناسایی کنید
هیچ مقدار استانداردی برای هر ریل برق وجود ندارد. کورو گیمز برای شناسایی ریلهای برق پرمصرف، تستهای A/B را با استفاده از تستهای مختلف از جمله بیکاری، دویدن و مبارزه ایجاد کرد. ریل های برق خاص با مقادیر آشکارا بالا را می توان با مقایسه مقادیر همان ریل های قدرت شناسایی کرد. با مقایسه تفاوت های رفتاری در موارد مختلف آزمایش، علت اصلی مشکل مصرف برق به تدریج مشخص خواهد شد.
بهینه سازی ها
با داده های ODPM، Kuro Games می تواند بهبود هر سناریو بهینه سازی را اندازه گیری کند:
- تغییر استراتژی زمانبندی هسته CPU و تنظیم اولویت رشتههای مختلف برای کاهش بار کاری هستههای بزرگ
- پیش کامپایل PSO (Pipeline State Object) برای کاهش حجم کاری کامپایل سایه زن در زمان اجرا CPU
- پیادهسازی PVS (مجموعههای بالقوه قابل مشاهده) برای کاهش بار کاری رندر GPU
- پخت انسداد سایه آفلاین برای کاهش بار کاری رندر GPU
برای مقایسه نتایج آزمایش در شرایط یکسان و قابل تکرار، Kuro Games دادههای ODPM را در یک مورد آزمایشی با استفاده از همان صحنه سه بعدی و پرسپکتیو دوربین با مدت زمان مشابه بازیابی کرد.
نتایج
کورو گیمز با استفاده از دادههای ODPM و پروفایل قدرت، مصرف کل انرژی را تا 9.68 درصد از 3233 میلیوات در نسخه سپتامبر (نسخه 0904) به 2920 میلیوات در نسخه نوامبر (نسخه 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
استفاده کنید. با پاورمانیتور، می توانید نقشه بین برچسب های قابل خواندن توسط انسان و نام ریل های برق خام که توسط هر OEM منفرد تنظیم شده است را بازیابی کنید.
برای تأیید بهبود در دستگاههای بدون ODPM، میتوانید از ساعتهای CPU، ساعتهای GPU و تخمین پهنای باند حافظه به عنوان پراکسی برای مصرف انرژی استفاده کنید.