VSYNC सिग्नल, डिसप्ले पाइपलाइन को सिंक करता है. डिसप्ले पाइपलाइन में ऐप्लिकेशन रेंडरिंग, SurfaceFlinger कॉम्पोज़िशन, और डिसप्ले पर इमेज दिखाने वाला हार्डवेयर कंपोज़र (एचडब्ल्यूसी) शामिल होता है. VSYNC, ऐप्लिकेशन के रेंडरिंग शुरू करने के समय, स्क्रीन को कंपोज करने के लिए SurfaceFlinger के चालू होने के समय, और डिसप्ले के रीफ़्रेश साइकल को सिंक करता है. इस सिंक की मदद से, वीडियो में रुकावट नहीं आती और ग्राफ़िक की विज़ुअल परफ़ॉर्मेंस बेहतर होती है.
HWC, VSYNC इवेंट जनरेट करता है और कॉलबैक के ज़रिए इवेंट को SurfaceFlinger पर भेजता है:
typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData, hwc2_display_t display, int64_t timestamp);
SurfaceFlinger यह कंट्रोल करता है कि HWC, setVsyncEnabled
को कॉल करके VSYNC इवेंट जनरेट करता है या नहीं. SurfaceFlinger, setVsyncEnabled
को VSYNC इवेंट जनरेट करने की सुविधा देता है, ताकि वह डिसप्ले के रीफ़्रेश साइकल के साथ सिंक हो सके. जब SurfaceFlinger, डिसप्ले रीफ़्रेश साइकल के साथ सिंक हो जाता है, तो SurfaceFlinger setVsyncEnabled
को बंद कर देता है, ताकि HWC, VSYNC इवेंट जनरेट करना बंद कर दे. अगर SurfaceFlinger को असली VSYNC और पहले से तय किए गए VSYNC के बीच कोई अंतर दिखता है, तो वह VSYNC इवेंट जनरेशन को फिर से चालू कर देता है.
VSYNC ऑफ़सेट
सिंक ऐप्लिकेशन और SurfaceFlinger, हार्डवेयर VSYNC के लिए लूप रेंडर करते हैं. VSYNC इवेंट पर, डिसप्ले फ़्रेम N दिखाना शुरू करता है, जबकि SurfaceFlinger फ़्रेम N+1 के लिए विंडो को कॉम्पोज़ करना शुरू करता है. ऐप्लिकेशन, बाकी बचे इनपुट को मैनेज करता है और फ़्रेम N+2 जनरेट करता है.
VSYNC के साथ सिंक करने से, देरी एक जैसी रहती है. इससे ऐप्लिकेशन और SurfaceFlinger में होने वाली गड़बड़ियां कम हो जाती हैं. साथ ही, डिसप्ले के एक-दूसरे के साथ फ़ेज़ में होने की समस्या भी कम हो जाती है. यह मान लिया जाता है कि ऐप्लिकेशन और SurfaceFlinger के हर फ़्रेम के लिए, समय में काफ़ी अंतर नहीं होता. लैटेंसी कम से कम दो फ़्रेम हो.
इस समस्या को ठीक करने के लिए, VSYNC ऑफ़सेट का इस्तेमाल किया जा सकता है. इससे, ऐप्लिकेशन और कॉम्पोज़िशन सिग्नल को हार्डवेयर VSYNC के हिसाब से बनाकर, इनपुट-टू-डिसप्ले के इंतज़ार का समय कम किया जा सकता है. ऐसा इसलिए होता है, क्योंकि ऐप्लिकेशन और कॉम्पोज़िशन को आम तौर पर 33 मिलीसेकंड से कम समय लगता है.
VSYNC ऑफ़सेट का नतीजा, एक ही अवधि और ऑफ़सेट फ़ेज़ वाले तीन सिग्नल होते हैं:
HW_VSYNC_0
— डिसप्ले पर अगला फ़्रेम दिखने लगता है.VSYNC
— ऐप्लिकेशन, इनपुट को पढ़ता है और अगला फ़्रेम जनरेट करता है.SF_VSYNC
— SurfaceFlinger, अगले फ़्रेम के लिए कॉम्पोज़ करना शुरू करता है.
VSYNC ऑफ़सेट की मदद से, SurfaceFlinger को बफ़र मिलता है और वह फ़्रेम को कंपोज़ करता है. इस दौरान, ऐप्लिकेशन एक साथ इनपुट को प्रोसेस करता है और फ़्रेम को रेंडर करता है.
DispSync
DispSync, डिसप्ले के हर समय होने वाले हार्डवेयर-आधारित VSYNC इवेंट का मॉडल बनाए रखता है. साथ ही, हार्डवेयर VSYNC इवेंट के खास फ़ेज़ ऑफ़सेट पर कॉलबैक चलाने के लिए, उस मॉडल का इस्तेमाल करता है.
DispSync एक सॉफ़्टवेयर फ़ेज़-लॉक लूप (पीएलएल) है. यह VSYNC और SF_VSYNC सिग्नल जनरेट करता है. इनका इस्तेमाल Choreographer और SurfaceFlinger करते हैं. भले ही, ये हार्डवेयर VSYNC से ऑफ़सेट न हों.

पहली इमेज. DispSync फ़्लो
DispSync की ये खूबियां हैं:
- रेफ़रंस — HW_VSYNC_0.
- आउटपुट — VSYNC और SF_VSYNC.
- सुझाव/राय/शिकायत/राय — Hardware Composer से फ़ेंस सिग्नल के टाइमस्टैंप हटाएं.
VSYNC/retire offset
रिटायर फ़ेंस के सिग्नल टाइमस्टैंप, एचडब्ल्यू वीएसवाईएनसी से मेल खाने चाहिए. ऐसा उन डिवाइसों पर भी करना चाहिए जो ऑफ़सेट फ़ेज़ का इस्तेमाल नहीं करते. ऐसा न करने पर, गड़बड़ियां असल से ज़्यादा गंभीर दिखती हैं. स्मार्ट पैनल में अक्सर एक डेल्टा होता है, जहां रिटायर फ़ेंस, डिसप्ले मेमोरी के लिए डायरेक्ट मेमोरी ऐक्सेस (डीएमए) का आखिरी हिस्सा होता है. हालांकि, असल डिसप्ले स्विच और एचडब्ल्यू वीएसवाईएनसी कुछ समय बाद होता है.
PRESENT_TIME_OFFSET_FROM_VSYNC_NS
को डिवाइस के
BoardConfig.mk
मेकफ़ाइल में सेट किया गया है. यह डिसप्ले कंट्रोलर और पैनल की विशेषताओं पर आधारित होता है. रिटायर फ़ेंस टाइमस्टैंप से लेकर एचडब्ल्यू वीएसवाईसी सिग्नल तक का समय, नैनोसेकंड में मेज़र किया जाता है.
VSYNC और SF_VSYNC ऑफ़सेट
VSYNC_EVENT_PHASE_OFFSET_NS
और
SF_VSYNC_EVENT_PHASE_OFFSET_NS
को ज़्यादा लोड वाले इस्तेमाल के उदाहरणों के आधार पर, कम से कम वैल्यू पर सेट किया जाता है. जैसे, विंडो ट्रांज़िशन के दौरान जीपीयू का कुछ हिस्सा इस्तेमाल करना या ऐनिमेशन वाले वेब पेज पर Chrome को स्क्रोल करना. इन ऑफ़सेट की मदद से, ऐप्लिकेशन को रेंडर होने में और जीपीयू को कॉम्पोज़ करने में ज़्यादा समय लगता है.
एक या दो मिलीसेकंड से ज़्यादा इंतज़ार का पता चलता है. गड़बड़ी की संख्या में काफ़ी बढ़ोतरी किए बिना, इंतज़ार का समय कम करने के लिए, गड़बड़ी की पूरी ऑटोमेटेड जांच को इंटिग्रेट करें.