वीएसवाईएनसी

VSYNC सिग्नल डिस्प्ले पाइपलाइन को सिंक्रोनाइज़ करता है। डिस्प्ले पाइपलाइन में ऐप रेंडरिंग, सर्फेसफ्लिंगर कंपोजिशन और हार्डवेयर कम्पोज़र (HWC) डिस्प्ले पर इमेज पेश करते हैं। वीएसवाईएनसी रेंडरिंग शुरू करने के लिए ऐप्स के जागने के समय, स्क्रीन को कंपोजिट करने के लिए सर्फेसफ्लिंगर के जागने का समय और डिस्प्ले रिफ्रेश चक्र को सिंक्रोनाइज़ करता है। यह सिंक्रनाइज़ेशन हकलाना को समाप्त करता है और ग्राफिक्स के दृश्य प्रदर्शन में सुधार करता है।

एचडब्ल्यूसी वीएसवाईएनसी घटनाओं को उत्पन्न करता है और कॉलबैक के माध्यम से घटनाओं को सर्फेसफ्लिंगर को भेजता है:

typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData,
        hwc2_display_t display, int64_t timestamp);

SurfaceFlinger यह नियंत्रित करता है कि setVsyncEnabled पर कॉल करके VSYNC ईवेंट जेनरेट करता है या नहीं। setVsyncEnabled घटनाओं को उत्पन्न करने के लिए setVsyncEnabled को सक्षम करता है ताकि यह डिस्प्ले के रिफ्रेश चक्र के साथ सिंक्रोनाइज़ कर सके। जब सर्फेसफ्लिंगर को डिस्प्ले रिफ्रेश साइकल के साथ सिंक्रोनाइज़ किया जाता है, तो सर्फेसफ्लिंगर एचडब्ल्यूसी को वीएसवाईएनसी इवेंट्स जनरेट करने से रोकने के लिए setVsyncEnabled को निष्क्रिय कर देता है। यदि सर्फेसफ्लिंगर वास्तविक वीएसवाईएनसी और वीएसवाईएनसी के बीच अंतर का पता लगाता है तो यह पहले से स्थापित सर्फेसफ्लिंगर वीएसवाईएनसी इवेंट जनरेशन को फिर से सक्षम करता है।

वीएसवाईएनसी ऑफसेट

सिंक ऐप और सर्फेसफ्लिंगर हार्डवेयर वीएसवाईएनसी को लूप प्रदान करते हैं। एक वीएसवाईएनसी घटना पर, डिस्प्ले फ्रेम एन दिखाना शुरू कर देता है जबकि सर्फेसफ्लिंगर फ्रेम एन + 1 के लिए विंडोज़ को संयोजित करना शुरू कर देता है। ऐप लंबित इनपुट को संभालता है और फ्रेम एन + 2 उत्पन्न करता है।

वीएसवाईएनसी के साथ सिंक्रोनाइज़ करने से लगातार लेटेंसी मिलती है। यह ऐप्स और सर्फेसफ्लिंगर में त्रुटियों को कम करता है और एक दूसरे के साथ चरण के अंदर और बाहर बहने वाले डिस्प्ले को कम करता है। यह मानता है कि ऐप और सर्फेसफ्लिंगर प्रति-फ्रेम समय व्यापक रूप से भिन्न नहीं होते हैं। विलंबता कम से कम दो फ़्रेम है।

इसका समाधान करने के लिए, आप हार्डवेयर वीएसवाईएनसी के सापेक्ष ऐप और कंपोजिशन सिग्नल बनाकर इनपुट-टू-डिस्प्ले लेटेंसी को कम करने के लिए वीएसवाईएनसी ऑफसेट को नियोजित कर सकते हैं। ऐसा इसलिए संभव है क्योंकि ऐप प्लस कंपोजिशन में आमतौर पर 33 एमएस से कम समय लगता है।

वीएसवाईएनसी ऑफ़सेट का परिणाम समान अवधि और ऑफ़सेट चरण के साथ तीन सिग्नल हैं:

  • HW_VSYNC_0 — डिस्प्ले अगला फ्रेम दिखाना शुरू करता है।
  • VSYNC - ऐप इनपुट पढ़ता है और अगला फ्रेम बनाता है।
  • SF_VSYNC - सर्फेसफ्लिंगर अगले फ्रेम के लिए कंपोजिंग शुरू करता है।

वीएसवाईएनसी ऑफसेट के साथ, सरफेसफ्लिंगर बफर प्राप्त करता है और फ्रेम को कंपोजिट करता है जबकि ऐप एक साथ इनपुट को प्रोसेस करता है और फ्रेम को रेंडर करता है।

डिस्पसिंक

DispSync एक डिस्प्ले के आवधिक हार्डवेयर-आधारित VSYNC ईवेंट का एक मॉडल रखता है और हार्डवेयर VSYNC ईवेंट से विशिष्ट चरण ऑफ़सेट पर कॉलबैक निष्पादित करने के लिए उस मॉडल का उपयोग करता है।

डिस्पसिंक एक सॉफ्टवेयर फेज-लॉक लूप (पीएलएल) है जो कोरियोग्राफर और सर्फेसफ्लिंगर द्वारा उपयोग किए गए वीएसवाईएनसी और एसएफ_वीएसवाईएनसी सिग्नल उत्पन्न करता है, भले ही हार्डवेयर वीएसवाईएनसी से ऑफसेट न हो।

डिस्पसिंक प्रवाह

चित्र 1. डिस्पसिंक प्रवाह

DispSync में निम्नलिखित गुण हैं:

  • संदर्भ - एचडब्ल्यू_वीएसवाईएनसी_0.
  • आउटपुट - वीएसवाईएनसी और एसएफ_वीएसवाईएनसी।
  • फीडबैक — हार्डवेयर कम्पोजर से फेंस सिग्नल टाइमस्टैम्प को रिटायर करें।

वीएसवाईएनसी/रिटायर ऑफ़सेट

रिटायर बाड़ के सिग्नल टाइमस्टैम्प को HW VSYNC से मेल खाना चाहिए, यहां तक ​​कि उन उपकरणों पर भी जो ऑफ़सेट चरण का उपयोग नहीं करते हैं। अन्यथा, त्रुटियां उनकी तुलना में अधिक गंभीर प्रतीत होती हैं। स्मार्ट पैनल में अक्सर एक डेल्टा होता है जहां रिटायर बाड़ मेमोरी प्रदर्शित करने के लिए डायरेक्ट मेमोरी एक्सेस (डीएमए) का अंत होता है, लेकिन वास्तविक डिस्प्ले स्विच और एचडब्ल्यू वीएसवाईएनसी कुछ समय बाद होता है।

PRESENT_TIME_OFFSET_FROM_VSYNC_NS डिवाइस के BoardConfig.mk मेकफ़ाइल में सेट है। यह डिस्प्ले कंट्रोलर और पैनल विशेषताओं पर आधारित है। सेवानिवृत्त बाड़ टाइमस्टैम्प से HW VSYNC सिग्नल तक का समय नैनोसेकंड में मापा जाता है।

वीएसवाईएनसी और एसएफ_वीएसवाईएनसी ऑफ़सेट

VSYNC_EVENT_PHASE_OFFSET_NS और SF_VSYNC_EVENT_PHASE_OFFSET_NS उच्च-लोड उपयोग के मामलों के आधार पर रूढ़िवादी रूप से सेट किए जाते हैं, जैसे कि विंडो संक्रमण के दौरान आंशिक GPU संरचना या एनिमेशन वाले वेब पेज के माध्यम से क्रोम स्क्रॉल करना। ये ऑफ़सेट लंबे ऐप रेंडर समय और लंबे GPU कंपोज़िशन समय की अनुमति देते हैं।

एक मिलीसेकंड या दो से अधिक विलंबता ध्यान देने योग्य है। त्रुटि की संख्या में उल्लेखनीय वृद्धि किए बिना विलंबता को कम करने के लिए, पूरी तरह से स्वचालित त्रुटि परीक्षण को एकीकृत करें।