अडैप्टिव रीफ़्रेश रेट (एआरआर) की सुविधा Android 15 में शुरू की गई थी. यह सुविधा, डिसप्ले रीफ़्रेश दर को कॉन्टेंट के फ़्रेम रेट के हिसाब से बनाती है. इसके लिए, अलग-अलग VSync चरणों का इस्तेमाल किया जाता है.
सालाना रेवेन्यू की सुविधा से ये फ़ायदे मिलते हैं:
बैटरी की खपत कम करना: डिफ़ॉल्ट रूप से, ARR की मदद से डिवाइसों को उनके ज़्यादा से ज़्यादा रिफ़्रेश रेट से कम रेट पर काम करने की सुविधा मिलती है. साथ ही, डिवाइसों को ज़्यादा रेट पर सिर्फ़ तब ट्रांज़िशन किया जाता है, जब उपयोगकर्ता अनुभव के लिए ज़रूरी हो. इससे, बैटरी की ग़ैर-ज़रूरी खपत कम हो जाती है.
झटके को कम करना: ARR की मदद से, मोड स्विच करने की ज़रूरत नहीं होती. झटके का मुख्य कारण यही है.
खास जानकारी
नॉन-एआरआर पैनल पर, डिसप्ले एक तय समयसीमा के हिसाब से रीफ़्रेश होता है. यह समयसीमा, डिसप्ले के चालू मोड के हिसाब से तय होती है.
एआरआर पैनल में, डिसप्ले के वीएसंक दर और रीफ़्रेश दर को अलग किया गया है. इससे, कॉन्टेंट अपडेट के क्रम के आधार पर, एक डिसप्ले मोड में रीफ़्रेश दर बदलने की सुविधा मिलती है. पैनल, रीफ़्रेश रेट पर चल सकते हैं, जो पैनल के टियरिंग इफ़ेक्ट (टीई) के डिविज़र होते हैं. OEM के पास, अपनी पसंद के पावर ट्रेड-ऑफ़ के आधार पर, ARR लागू करने का विकल्प होता है.
नीचे दिए गए फ़्लो चार्ट में, 240 Hz का vsyncPeriod
और 120 Hz का minFrameIntervalNs
(ज़्यादा से ज़्यादा रीफ़्रेश रेट) वाला डिसप्ले दिखाया गया है. VSync हर 4.16 मिलीसेकंड में होता है. आखिरी फ़्रेम के minFrameIntervalNs
के बाद, VSync के किसी भी मल्टीपल में फ़्रेम दिखाया जा सकता है.
पहली इमेज. ARR का उदाहरण.
लागू करना
Android 15, नए हार्डवेयर कंपोजर (एचडब्ल्यूसी) एचएएल एपीआई और प्लैटफ़ॉर्म में हुए बदलावों के साथ, एआरआर के साथ काम करता है. एआरआर को चालू करने के लिए, ओईएम को Android 15 और उसके बाद के वर्शन वाले डिवाइसों पर, कर्नेल और सिस्टम में बदलाव करने की सुविधा देनी होगी. साथ ही, उन्हें android.hardware.graphics.composer3
एपीआई के वर्शन 3 को लागू करना होगा, जैसा कि नीचे दिए गए सेक्शन में बताया गया है.
ज़्यादा जानकारी के लिए, ARR के साथ काम करने वाले एपीआई के Pixel के रेफ़रंस को लागू करना देखें.
DisplayConfiguration.aidl
DisplayConfiguration.aidl
एपीआई, डिसप्ले एट्रिब्यूट का इस्तेमाल करके डिसप्ले कॉन्फ़िगरेशन के बारे में बताता है. साथ ही, यह एआरआर के लिए इन एट्रिब्यूट के बारे में भी बताता है:
- ज़रूरी नहीं
vrrConfig
: अगर यह सेट है, तो कुछ खास कॉन्फ़िगरेशन के लिए ARR चालू हो जाता है. अगर इसेnull
पर सेट किया जाता है, तो डिसप्ले मोड को नॉन-एआरआर मोड पर सेट किया जाता है. जैसे, मल्टीपल रीफ़्रेश रेट (एमआरआर). इस एट्रिब्यूट की मदद से, किसी डिसप्ले को एमआरआर या एआरआर, दोनों में से किसी एक के तौर पर कॉन्फ़िगर किया जा सकता है. vsyncPeriod
: डिसप्ले की VSync दर. एआरआर डिसप्ले पर, इस वैल्यू का इस्तेमाल अलग-अलग रीफ़्रेश रेट का पता लगाने के लिए किया जाता है.वेंडर को सभी डिवाइसों के लिए
DisplayConfiguration.vsyncPeriod
वैल्यू सेट करनी होगी. ऐसे डिसप्ले के लिए जिनमें एआरआर नहीं है,DisplayConfiguration.vsyncPeriod
डिसप्ले की रीफ़्रेश दर है. अगर कोई डिवाइस 120 Hz पर काम करता है, तो इस वैल्यू का मतलब 8.3 मिलीसेकंड होना चाहिए.एआरआर डिसप्ले के लिए,
DisplayConfiguration.vsyncPeriod
टीई सिग्नल की फ़्रीक्वेंसी है. अगर किसी डिवाइस काminFrameIntervalNs
8.3 एमएस है, लेकिन टीई 240 हर्ट्ज़ है, तो यह वैल्यू 4.16 एमएस होनी चाहिए.
VrrConfig.aidl
VrrConfig.aidl
एपीआई में ये एट्रिब्यूट शामिल हैं:
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 टेस्ट ऐप्लिकेशन.
टेस्ट ऐप्लिकेशन में, स्लाइडर का इस्तेमाल करके रेंडर रेट को अपने डिसप्ले के रीफ़्रेश रेट के डिविज़र रीफ़्रेश रेट की अलग-अलग वैल्यू में बदलें. देखें कि अनुरोध की गई दर के हिसाब से, फ़्रेम रेट कैसे बदलता है.