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