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

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

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

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

खास जानकारी

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

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

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

arr-example

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

लागू करना

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

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

DisplayConfiguration.aidl

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

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

    वेंडर को सभी डिवाइसों के लिए 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 टेस्ट ऐप्लिकेशन.

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