अडैप्टिव रीफ़्रेश रेट

Android 15 में अडैप्टिव रीफ़्रेश रेट (एआरआर) सुविधा जोड़ी गई है. इसकी मदद से, डिसप्ले रीफ़्रेश रेट को कॉन्टेंट के फ़्रेम रेट के हिसाब से अडजस्ट किया जा सकता है. इसके लिए, अलग-अलग VSync चरणों का इस्तेमाल किया जाता है.

एआरआर की सुविधा से ये फ़ायदे मिलते हैं:

  • बिजली की खपत कम करना: ARR की सुविधा डिफ़ॉल्ट रूप से, डिवाइसों को उनकी ज़्यादा से ज़्यादा रीफ़्रेश रेट से कम रेट पर काम करने की अनुमति देती है. यह सुविधा, उपयोगकर्ता अनुभव के लिए ज़रूरी होने पर ही ज़्यादा रेट पर ट्रांज़िशन करती है. इससे बिजली की खपत कम होती है.
  • जंक कम करना: एआरआर से मोड स्विच करने की ज़रूरत नहीं पड़ती. यह जंक की एक जानी-पहचानी वजह है.

खास जानकारी

ARR के अलावा अन्य पैनल पर, डिसप्ले एक तय समय पर रीफ़्रेश होता है. यह समय, चालू डिसप्ले मोड के हिसाब से तय होता है.

एआरआर पैनल पर, डिसप्ले की वीसिंक दर और रीफ़्रेश दर अलग-अलग होती हैं. इससे कॉन्टेंट अपडेट होने की फ़्रीक्वेंसी के आधार पर, एक डिसप्ले मोड में रीफ़्रेश दरें बदलती हैं. पैनल, रीफ़्रेश रेट पर काम कर सकते हैं. ये रीफ़्रेश रेट, पैनल के टीयरिंग इफ़ेक्ट (टीई) के डिवाइज़र होते हैं. ओईएम, अपनी पसंद के हिसाब से बैटरी की खपत और परफ़ॉर्मेंस के बीच समझौता करके, एआरआर को लागू कर सकते हैं.

नीचे दिए गए डायग्राम में, 240 हर्ट्ज़ की vsyncPeriod और 120 हर्ट्ज़ की minFrameIntervalNs (रीफ़्रेश रेट ज़्यादा से ज़्यादा) वाला डिसप्ले दिखाया गया है. वीसिंक हर 4.16 मि॰से॰ पर होता है. पिछले फ़्रेम के minFrameIntervalNs के बाद, किसी भी फ़्रेम को वीसिंक के किसी भी मल्टीपल पर दिखाया जा सकता है.

arr-example

पहली इमेज. एआरआर का उदाहरण.

लागू करना

Android 15 में, नए Hardware Composer (HWC) HAL एपीआई और प्लैटफ़ॉर्म में हुए बदलावों की मदद से, ARR की सुविधा काम करती है. ARR को चालू करने के लिए, ओईएम को Android 15 और इसके बाद के वर्शन वाले डिवाइसों पर, कर्नल और सिस्टम में बदलाव करने की सुविधा देनी होगी. साथ ही, android.hardware.graphics.composer3 एपीआई के तीसरे वर्शन को लागू करना होगा. इसके बारे में यहां बताया गया है.

ज़्यादा जानकारी के लिए, ARR की सुविधा देने वाले एपीआई के Pixel के रेफ़रंस इंप्लीमेंटेशन देखें.

DisplayConfiguration.aidl

DisplayConfiguration.aidl API, डिसप्ले एट्रिब्यूट का इस्तेमाल करके डिसप्ले कॉन्फ़िगरेशन तय करता है. साथ ही, एआरआर के लिए इन एट्रिब्यूट का इस्तेमाल करता है:

  • ज़रूरी नहीं vrrConfig: अगर इसे सेट किया जाता है, तो ARR को कुछ कॉन्फ़िगरेशन के लिए चालू किया जाता है. अगर इसे null पर सेट किया जाता है, तो डिसप्ले मोड को नॉन-एआरआर मोड पर सेट किया जाता है. जैसे, मल्टीपल रिफ़्रेश रेट (एमआरआर). इस एट्रिब्यूट की मदद से, डिसप्ले को एमआरआर या एआरआर के तौर पर कॉन्फ़िगर किया जा सकता है. हालांकि, दोनों के तौर पर कॉन्फ़िगर नहीं किया जा सकता.
  • vsyncPeriod: यह डिसप्ले की VSync दर होती है. एआरआर डिसप्ले पर, इस वैल्यू का इस्तेमाल करके, रीफ़्रेश रेट की अलग-अलग वैल्यू तय की जाती हैं.

    वेंडर को सभी डिवाइसों के लिए DisplayConfiguration.vsyncPeriod वैल्यू सेट करनी होगी. ARR के बिना काम करने वाले डिसप्ले के लिए, DisplayConfiguration.vsyncPeriod डिसप्ले का रीफ़्रेश रेट है. अगर कोई डिवाइस 120 हर्ट्ज़ के साथ काम करता है, तो इस वैल्यू को 8.3 मि॰से॰ पर सेट करना होगा.

    एआरआर डिसप्ले के लिए, DisplayConfiguration.vsyncPeriod टीई सिग्नल की फ़्रीक्वेंसी है. अगर किसी डिवाइस का minFrameIntervalNs 8.3 मि॰से॰ है, लेकिन टीई 240 हर्ट्ज़ है, तो यह वैल्यू 4.16 मि॰से॰ होनी चाहिए.

VrrConfig.aidl

VrrConfig.aidl API में ये एट्रिब्यूट शामिल हैं:

  • minFrameIntervalNs: यह डिसप्ले का ज़्यादा से ज़्यादा रीफ़्रेश रेट होता है.
  • NotifyExpectedPresentConfig: इससे यह तय होता है कि डिसप्ले को आने वाले फ़्रेम की सूचना कब देनी है.

IComposerClient.notifyExpectedPresent, डिसप्ले को ऐसे फ़्रेम के बारे में जानकारी देता है जिसे दिखाया जा सकता है. इससे डिसप्ले, खुद को रीफ़्रेश करने की अवधि को ज़रूरत के हिसाब से अडजस्ट कर सकता है. frameIntervalNs, expectedPresentTime के बाद की मौजूदा कैडेंस को दिखाता है. उदाहरण के लिए, अगर notifyExpectedPresent को expectedPresentTime N और 16.6 मि॰से॰ के frameIntervalNs के साथ कॉल किया जाता है, तो अगला फ़्रेम, मौजूदा समय N के बाद N + 16.6 मि॰से॰ पर होगा. मौजूदा समय N के बाद, फ़्रेम कैडेंस 16.6 मि॰से॰ है. इसमें तब तक कोई बदलाव नहीं होगा, जब तक कोई और बदलाव नहीं किया जाता.

IComposerClient.notifyExpectedPresent को सिर्फ़ तब कॉल किया जाता है, जब DisplayConfiguration.notifyExpectedPresentConfig सेट हो. साथ ही, समय से जुड़ी इनमें से कोई एक शर्त पूरी हो:

  • आउट-ऑफ़-कैडेंस प्रेजेंट टाइम: अगले फ़्रेम के दिखने का अनुमानित समय, डिसप्ले के रेगुलर रीफ़्रेश रेट से अलग है. यह रेट frameIntervalNs से तय होता है.
  • टाइम आउट की अवधि खत्म हो गई है: पिछले फ़्रेम के बीच का समय, notifyExpectedPresentConfig.timeoutNs से ज़्यादा या इसके बराबर है.

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs इससे आने वाले फ़्रेम के लिए, नैनोसेकंड में कैडेंस के बारे में जानकारी मिलती है.

जांच करना

डीबग करने के लिए, onRefreshRateChangedDebug का इस्तेमाल करें. इस तरीके से क्लाइंट को सूचना मिलती है कि डिसप्ले की रीफ़्रेश दर बदल गई है.

मैन्युअल टेस्टिंग के लिए, TouchLatency टेस्ट ऐप्लिकेशन का इस्तेमाल करें. जैसा कि दूसरी इमेज में दिखाया गया है:

touchlatency-app

दूसरी इमेज. TouchLatency टेस्ट ऐप्लिकेशन.

टेस्ट ऐप्लिकेशन में, स्लाइडर का इस्तेमाल करके रेंडर रेट को डिसप्ले के रीफ़्रेश रेट के भाजक रीफ़्रेश रेट की अलग-अलग वैल्यू के हिसाब से अडजस्ट करें. देखें कि अनुरोध किए गए रेट के आधार पर, फ़्रेम रेट में कैसे बदलाव होता है.