نرخ تازه سازی تطبیقی

با شروع اندروید 15، ویژگی نرخ تازه سازی تطبیقی ​​(ARR) با استفاده از مراحل گسسته VSync، نرخ تازه سازی نمایشگر را قادر می سازد تا با نرخ فریم محتوا سازگار شود.

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

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

  • کاهش jank: ARR نیاز به تغییر حالت را که یک علت شناخته شده برای jank است، از بین می برد.

نمای کلی

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

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

شکل زیر نمایشگری با vsyncPeriod 240 هرتز و minFrameIntervalNs (حداکثر نرخ تازه سازی) 120 هرتز است. VSync هر 4.16 میلی ثانیه اتفاق می افتد. یک فریم می تواند در هر مضرب VSync بعد از minFrameIntervalNs های آخرین فریم ارائه شود.

arr-example

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

پیاده سازی

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

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

DisplayConfiguration.aidl

DisplayConfiguration.aidl API پیکربندی صفحه نمایش را با استفاده از ویژگی های نمایش به همراه ویژگی های زیر برای ARR مشخص می کند:

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

    فروشندگان باید مقدار DisplayConfiguration.vsyncPeriod را برای همه دستگاه ها تنظیم کنند. برای نمایشگرهای غیر ARR، DisplayConfiguration.vsyncPeriod نرخ تازه سازی نمایشگر است. اگر دستگاهی از 120 هرتز پشتیبانی می کند، این مقدار باید 8.3 میلی ثانیه باشد.

    برای نمایشگرهای ARR، DisplayConfiguration.vsyncPeriod فرکانس سیگنال TE است. اگر دستگاهی دارای minFrameIntervalNs 8.3 میلی ثانیه است اما TE 240 هرتز است، این مقدار باید 4.16 میلی ثانیه باشد.

VrrConfig.aidl

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

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

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

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

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

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs اشاره‌ای درباره سرعت فریم‌های آینده در نانوثانیه ارائه می‌دهد.

تست کردن

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

همانطور که در شکل 2 نشان داده شده است، از برنامه تست TouchLatency برای آزمایش دستی استفاده کنید:

touchlatency-app

شکل 2. برنامه تست تأخیر لمسی.

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

،

با شروع اندروید 15، ویژگی نرخ تازه سازی تطبیقی ​​(ARR) با استفاده از مراحل گسسته VSync، نرخ تازه سازی نمایشگر را قادر می سازد تا با نرخ فریم محتوا سازگار شود.

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

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

  • کاهش jank: ARR نیاز به تغییر حالت را که یک علت شناخته شده برای jank است، از بین می برد.

نمای کلی

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

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

شکل زیر نمایشگری با vsyncPeriod 240 هرتز و minFrameIntervalNs (حداکثر نرخ تازه سازی) 120 هرتز است. VSync هر 4.16 میلی ثانیه اتفاق می افتد. یک فریم می تواند در هر مضرب VSync بعد از minFrameIntervalNs های آخرین فریم ارائه شود.

arr-example

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

پیاده سازی

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

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

DisplayConfiguration.aidl

DisplayConfiguration.aidl API پیکربندی صفحه نمایش را با استفاده از ویژگی های نمایش به همراه ویژگی های زیر برای ARR مشخص می کند:

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

    فروشندگان باید مقدار DisplayConfiguration.vsyncPeriod را برای همه دستگاه ها تنظیم کنند. برای نمایشگرهای غیر ARR، DisplayConfiguration.vsyncPeriod نرخ تازه سازی نمایشگر است. اگر دستگاهی از 120 هرتز پشتیبانی می کند، این مقدار باید 8.3 میلی ثانیه باشد.

    برای نمایشگرهای ARR، DisplayConfiguration.vsyncPeriod فرکانس سیگنال TE است. اگر دستگاهی دارای minFrameIntervalNs 8.3 میلی ثانیه است اما TE 240 هرتز است، این مقدار باید 4.16 میلی ثانیه باشد.

VrrConfig.aidl

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

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

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

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

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

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs اشاره‌ای درباره سرعت فریم‌های آینده در نانوثانیه ارائه می‌دهد.

تست کردن

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

همانطور که در شکل 2 نشان داده شده است، از برنامه تست TouchLatency برای آزمایش دستی استفاده کنید:

touchlatency-app

شکل 2. برنامه تست تأخیر لمسی.

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