نرخ بازآوری تطبیق‌پذیر

‫Android 15 ویژگی نرخ بازسازی تطبیقی (ARR) را معرفی می‌کند که به نرخ بازسازی نمایشگر اجازه می‌دهد بااستفاده از مراحل VSync مجزا با نرخ قاب محتوا تطبیق پیدا کند.

ویژگی ARR مزایای زیر را ارائه می‌دهد:

  • کاهش مصرف برق: به‌طور پیش‌فرض، ARR به دستگاه‌ها اجازه می‌دهد با نرخ‌هایی کمتر از حداکثر نرخ بازآوری‌شان کار کنند و فقط زمانی به نرخ‌های بالاتر بروند که برای تجربه کاربری ضروری باشد، که این امر مصرف برق غیرضروری را به حداقل می‌رساند.
  • کاهش پرش: ARR نیاز به تغییر حالت را که علت شناخته‌شده‌ای برای پرش است ازبین می‌برد.

نمای کلی

در پانل‌های غیر ARR، نمایشگر با آهنگ ثابتی که توسط حالت نمایشگر فعال تعیین می‌شود، بازآوری می‌شود.

در پنل‌های ARR، نرخ VSync نمایشگر و نرخ بازآوری ازهم جدا می‌شوند که باعث می‌شود نرخ‌های بازآوری در یک حالت نمایشگر براساس آهنگ به‌روزرسانی محتوا تغییر کنند. پانل‌ها می‌توانند با نرخ‌های بازآوری‌ای اجرا شوند که مقسوم‌علیه اثر پارگی (TE) پانل هستند. تولیدکنندگان اصلی تجهیزات می‌توانند ARR را براساس موازنه‌های توان ترجیحی خود پیاده‌سازی کنند.

شکل زیر نمایشگری با vsyncPeriod از ۲۴۰ هرتز و minFrameIntervalNs (حداکثر نرخ بازآوری) از ۱۲۰ هرتز را نشان می‌دهد. VSync هر ۴٫۱۶ میلی‌ثانیه رخ می‌دهد. قاب می‌تواند در هر مضربی از VSync پس‌از minFrameIntervalNs از قاب آخر ارائه شود.

arr-example

شکل ۱. مثالی از ARR.

پیاده‌سازی

‫Android 15 از ARR با میاناهای برنامه‌سازی کاربردی HAL جدید Hardware Composer (HWC) و تغییرات پلاتفرم پشتیبانی می‌کند. برای فعال کردن ARR، سازندگان اصلی تجهیزات باید از تغییرات هسته و سیستم در دستگاه‌های دارای Android 15 و بالاتر پشتیبانی کنند و نسخه ۳ از android.hardware.graphics.composer3 API را، همان‌طور که در بخش‌های زیر فهرست شده است، پیاده‌سازی کنند.

برای اطلاعات بیشتر، پیاده‌سازی مرجع Pixel از میاناهای برنامه‌سازی کاربردی را که از ARR پشتیبانی می‌کنند ببینید.

DisplayConfiguration.aidl

میانای برنامه‌سازی کاربردی DisplayConfiguration.aidl پیکربندی نمایشگر را بااستفاده از مشخصه‌های نمایشگر، همراه با مشخصه‌های زیر برای ARR مشخص می‌کند:

  • اختیاری vrrConfig: اگر تنظیم شود، ARR برای پیکربندی‌های خاص فعال می‌شود. اگر روی null تنظیم شود، حالت نمایشگر روی حالت‌های غیر ARR مثل نرخ بازآوری چندگانه (MRR) تنظیم می‌شود. با این مشخصه، نمایشگر می‌تواند به‌عنوان MRR یا ARR پیکربندی شود، اما نمی‌تواند هر دو باشد.
  • vsyncPeriod: نرخ VSync نمایشگر. در نمایشگرهای ARR، از این مقدار برای استخراج نرخ‌های بازآوری گسسته پشتیبانی‌شده استفاده می‌شود.

    فروشندگان باید مقدار DisplayConfiguration.vsyncPeriod را برای همه دستگاه‌ها تنظیم کنند. برای نمایشگرهای غیر ARR، DisplayConfiguration.vsyncPeriod نرخ بازآوری نمایشگر است. اگر دستگاهی از ۱۲۰ هرتز پشتیبانی می‌کند، این مقدار باید ۸٫۳ میلی‌ثانیه باشد.

    برای نمایشگرهای ARR، DisplayConfiguration.vsyncPeriod فرکانس سیگنال TE است. اگر دستگاهی minFrameIntervalNs برابر با ۸٫۳ میلی‌ثانیه داشته باشد اما TE آن ۲۴۰ هرتز باشد، این مقدار باید ۴٫۱۶ میلی‌ثانیه باشد.

VrrConfig.aidl

‫API VrrConfig.aidl شامل ویژگی‌های زیر است:

  • minFrameIntervalNs: حداکثر نرخ بازسازی که نمایشگر می‌تواند پشتیبانی کند.
  • NotifyExpectedPresentConfig: این زمان براساس وقتی تعیین می‌شود که نمایشگر به پیش‌اعلامیه برای قاب بعدی نیاز دارد.

IComposerClient.notifyExpectedPresent نکته‌ای برای قابی ارائه می‌دهد که احتمالاً ارائه خواهد شد تا نمایشگر بتواند دوره بازآوری خودکارش را براساس آن تطبیق دهد. frameIntervalNs نشان‌دهنده آهنگ فعلی است که پس‌از expectedPresentTime می‌آید. برای مثال، اگر notifyExpectedPresent با expectedPresentTime N و frameIntervalNs از ۱۶٫۶ میلی‌ثانیه فراخوانده شود، قاب بعدی در N + ۱۶٫۶ میلی‌ثانیه بعداز زمان فعلی N است. پس‌از زمان کنونی N، آهنگ قاب تا زمانی که تغییرات بیشتری اعمال شود، ۱۶٫۶ میلی‌ثانیه است.

‫IComposerClient.notifyExpectedPresent فقط زمانی فراخوانده می‌شود که DisplayConfiguration.notifyExpectedPresentConfig تنظیم شده باشد و اگر یکی از شرایط زمان‌بندی زیر رخ دهد:

  • زمان ارائه خارج از آهنگ: زمان ارائه موردانتظار قاب بعدی از نرخ بازآوری معمولی نمایشگر که توسط frameIntervalNs تعریف شده است منحرف می‌شود.
  • مهلت زمانی تمام شد: فاصله زمانی بین قاب‌های قبلی بزرگ‌تر از یا مساوی با notifyExpectedPresentConfig.timeoutNs است.

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs نکته‌ای درباره آهنگ فریم‌های آینده برحسب نانوثانیه ارائه می‌دهد.

آزمایش

برای اشکال‌زدایی از onRefreshRateChangedDebug استفاده کنید. این روش به مشتری اطلاع می‌دهد که نرخ بازآوری نمایشگر تغییر کرده است.

از برنامه آزمایشی TouchLatency برای آزمایش دستی همان‌طور که در «شکل ۲» نشان داده شده است استفاده کنید:

touchlatency-app

شکل ۲. برنامه آزمایش «تأخیر لمس».

در برنامه آزمایشی، از لغزنده برای تنظیم نرخ رندر به مقادیر مختلف نرخ‌های بازآوری تقسیم‌کننده نرخ بازآوری نمایشگر استفاده کنید. مشاهده کنید که نرخ فریم براساس نرخ درخواستی چگونه تغییر می‌کند.