اندروید ۱۵ ویژگی نرخ تازهسازی تطبیقی (ARR) را معرفی میکند که به شما امکان میدهد نرخ تازهسازی صفحه نمایش را با استفاده از مراحل گسسته VSync با نرخ فریم محتوا تطبیق دهید.
ویژگی ARR مزایای زیر را ارائه میدهد:
- کاهش مصرف برق: به طور پیشفرض، ARR به دستگاهها اجازه میدهد با نرخهایی پایینتر از حداکثر نرخ نوسازی خود کار کنند و تنها در صورت لزوم برای تجربه کاربر، به نرخهای بالاتر تغییر وضعیت میدهند که این امر مصرف برق غیرضروری را به حداقل میرساند.
- کاهش بینظمی: ARR نیاز به تغییر حالت را که یکی از دلایل شناختهشده بینظمی است، از بین میبرد.
نمای کلی
در پنلهای غیر ARR، صفحه نمایش با ریتم ثابتی که توسط حالت نمایش فعال تعیین میشود، بهروزرسانی میشود.
در پنلهای ARR، نرخ VSync نمایشگر و نرخ نوسازی از هم جدا هستند، که به نرخ نوسازی اجازه میدهد در یک حالت نمایش بر اساس آهنگ بهروزرسانی محتوا تغییر کند. پنلها میتوانند با نرخ نوسازیای کار کنند که مقسومعلیههای اثر پارگی (TE) پنل هستند. تولیدکنندگان اصلی تجهیزات (OEM) میتوانند ARR را بر اساس بدهبستانهای مصرف انرژی ترجیحی خود پیادهسازی کنند.
شکل زیر نمایشگری را با vsyncPeriod برابر با ۲۴۰ هرتز و minFrameIntervalNs (حداکثر نرخ تازهسازی) ۱۲۰ هرتز نشان میدهد. VSync هر ۴.۱۶ میلیثانیه رخ میدهد. یک فریم میتواند در هر مضربی از VSync پس از minFrameIntervalNs از آخرین فریم نمایش داده شود.

شکل ۱. مثالی از ARR.
پیادهسازی
اندروید ۱۵ با استفاده از APIهای جدید HAL Composer سختافزاری (HWC) و تغییرات پلتفرم، از ARR پشتیبانی میکند. برای فعال کردن ARR، تولیدکنندگان اصلی تجهیزات (OEM) باید از تغییرات هسته و سیستم در دستگاههایی که اندروید ۱۵ و بالاتر را اجرا میکنند، پشتیبانی کنند و نسخه ۳ APIهای android.hardware.graphics.composer3 را، همانطور که در بخشهای بعدی ذکر شده است، پیادهسازی کنند.
برای اطلاعات بیشتر به پیادهسازی مرجع Pixel از APIهایی که از ARR پشتیبانی میکنند، مراجعه کنید.
پیکربندی نمایش.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
رابط برنامهنویسی کاربردی VrrConfig.aidl شامل ویژگیهای زیر است:
-
minFrameIntervalNs: حداکثر نرخ نوسازی که نمایشگر میتواند پشتیبانی کند. -
NotifyExpectedPresentConfig: این پارامتر زمانی تعیین میشود که نمایشگر نیاز به اطلاع قبلی از فریم بعدی دارد.
IComposerClient.notifyExpectedPresent راهنمایی برای فریمی که احتمالاً ارائه خواهد شد، ارائه میدهد تا نمایشگر بتواند دوره خود-تازهسازی خود را بر اساس آن تطبیق دهد. frameIntervalNs نشان دهنده ریتم فعلی است که پس از expectedPresentTime میآید. برای مثال، اگر notifyExpectedPresent با expectedPresentTime N و frameIntervalNs 16.6 میلیثانیه فراخوانی شود، فریم بعدی در N + 16.6 میلیثانیه پس از زمان فعلی N قرار دارد. پس از زمان فعلی N، ریتم فریم 16.6 میلیثانیه است تا زمانی که تغییرات بیشتری رخ دهد.
تابع IComposerClient.notifyExpectedPresent فقط زمانی فراخوانی میشود که DisplayConfiguration.notifyExpectedPresentConfig تنظیم شده باشد و اگر یکی از شرایط زمانی زیر رخ دهد:
- زمان حال خارج از ریتم: زمان نمایش مورد انتظار فریم بعدی از نرخ نوسازی معمول نمایشگر که توسط
frameIntervalNsتعریف میشود، منحرف میشود. - پایان مهلت: فاصله زمانی بین فریمهای قبلی بزرگتر یا مساوی
notifyExpectedPresentConfig.timeoutNsاست.
فاصلههای فریم نمایش فرمان
DisplayCommand.frameIntervalNs به صورت نانوثانیه، ریتم فریمهای بعدی را نشان میدهد.
آزمایش
برای اشکالزدایی onRefreshRateChangedDebug استفاده کنید. این متد به کلاینت اطلاع میدهد که نرخ بهروزرسانی صفحه نمایش تغییر کرده است.
برای آزمایش دستی، همانطور که در شکل 2 نشان داده شده است، از برنامه تست TouchLatency استفاده کنید:

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