वीसिंक सिग्नल, डिसप्ले पाइपलाइन को सिंक करता है. डिसप्ले पाइपलाइन में ये चीज़ें शामिल होती हैं: ऐप्लिकेशन रेंडरिंग, SurfaceFlinger कंपोज़िशन, और Hardware Composer (HWC) की मदद से डिसप्ले पर इमेज दिखाना. VSync, इन चीज़ों को सिंक करता है: ऐप्लिकेशन को रेंडरिंग शुरू करने के लिए चालू होने में लगने वाला समय, SurfaceFlinger को स्क्रीन कंपोज़िट करने के लिए चालू होने में लगने वाला समय, और डिसप्ले रीफ़्रेश साइकल. इस सिंक्रनाइज़ेशन से, वीडियो के अटकने की समस्या खत्म हो जाती है और ग्राफ़िक्स की परफ़ॉर्मेंस बेहतर हो जाती है.
एचडब्ल्यूसी, वीसिंक इवेंट जनरेट करता है और उन्हें 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 के बीच अंतर का पता चलता है, तो SurfaceFlinger, VSync इवेंट जनरेट करने की सुविधा को फिर से चालू कर देता है.
VSync ऑफ़सेट
सिंक ऐप्लिकेशन और SurfaceFlinger, हार्डवेयर VSync को रेंडर लूप करते हैं. VSync इवेंट पर, डिसप्ले फ़्रेम N दिखाना शुरू कर देता है. वहीं, SurfaceFlinger फ़्रेम N+1 के लिए विंडो कंपोज़ करना शुरू कर देता है. ऐप्लिकेशन, इनपुट को प्रोसेस करता है और फ़्रेम N+2 जनरेट करता है.
VSync के साथ सिंक करने पर, लेटेन्सी एक जैसी रहती है. इससे ऐप्लिकेशन और SurfaceFlinger में गड़बड़ियां कम होती हैं. साथ ही, डिसप्ले के एक-दूसरे के साथ फ़ेज़ में आने और बाहर जाने की समस्या कम होती है. इससे यह माना जाता है कि ऐप्लिकेशन और SurfaceFlinger के हर फ़्रेम के समय में ज़्यादा अंतर नहीं है. लेटेंसी कम से कम दो फ़्रेम है.
इस समस्या को ठीक करने के लिए, VSync ऑफ़सेट का इस्तेमाल किया जा सकता है. इससे, इनपुट से लेकर डिसप्ले तक की लेटेन्सी को कम किया जा सकता है. इसके लिए, ऐप्लिकेशन और कंपोज़िशन के सिग्नल को हार्डवेयर VSync के हिसाब से बनाया जाता है. ऐसा इसलिए हो सकता है, क्योंकि ऐप्लिकेशन प्लस कंपोज़िशन में आम तौर पर 33 मि॰से॰ से कम समय लगता है.
वीसिंक ऑफ़सेट का नतीजा, एक ही अवधि और ऑफ़सेट फ़ेज़ वाले तीन सिग्नल होते हैं:
HW_VSYNC_0
— डिसप्ले पर अगला फ़्रेम दिखने लगता है.VSYNC
— ऐप्लिकेशन, इनपुट को पढ़ता है और अगला फ़्रेम जनरेट करता है.SF_VSYNC
— SurfaceFlinger, अगले फ़्रेम के लिए कंपोज़िटिंग शुरू करता है.
वीसिंक ऑफ़सेट की मदद से, SurfaceFlinger को बफ़र मिलता है और वह फ़्रेम को कंपोज़ करता है. वहीं, ऐप्लिकेशन एक साथ इनपुट को प्रोसेस करता है और फ़्रेम को रेंडर करता है.
DispSync
DispSync, डिसप्ले के हार्डवेयर पर आधारित वीसिंक इवेंट का मॉडल बनाए रखता है. साथ ही, इस मॉडल का इस्तेमाल करके, हार्डवेयर वीसिंक इवेंट से खास फ़ेज़ ऑफ़सेट पर कॉलबैक को एक्ज़ीक्यूट करता है.
DispSync, सॉफ़्टवेयर फ़ेज़-लॉक लूप (पीएलएल) है. यह Choreographer और SurfaceFlinger के लिए, VSYNC
और SF_VSYNC
सिग्नल जनरेट करता है. भले ही, ये सिग्नल हार्डवेयर VSync से ऑफ़सेट न हों.
इस इमेज में DispSync फ़्लो दिखाया गया है:

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