अधिकांश डिवाइसों में DispSync ऑफ़सेट कॉन्फ़िगर नहीं है, इसलिए वास्तव में केवल एक VSYNC संकेत है। निम्नानुसार मैं मान रहा हूं कि DispSync सक्षम है।
हार्डवेयर केवल प्राथमिक प्रदर्शन रीफ्रेश के अनुरूप एक VSYNC सिग्नल प्रदान करता है। अन्य लोग SurfaceFlinger DispSync कोड द्वारा सॉफ़्टवेयर में जेनरेट किए जाते हैं, वास्तविक VSYNC से निश्चित ऑफ़सेट पर फायरिंग करते हैं। कुछ चालाक सॉफ़्टवेयर का प्रयोग समय से बाहर निकलने से रोकने के लिए किया जाता है।
संकेतों का उपयोग SurfaceFlinger संरचना और ऐप प्रतिपादन को ट्रिगर करने के लिए किया जाता है। यदि आप आर्किटेक्चर दस्तावेज़ में सेक्शन का पालन करते हैं, तो आप देख सकते हैं कि जब ऐप अपनी सामग्री प्रस्तुत करता है, और स्क्रीन पर सामग्री दिखाई देने पर विलंबता के दो फ्रेम स्थापित करती है। इस तरह के बारे में सोचें: वीएसवाईएनसी की तीन घटनाओं को देखते हुए, ऐप V0 पर खींचता है, सिस्टम V1 पर संरचना करता है, और रचित फ्रेम V2 पर डिस्प्ले पर भेजा जाता है।
यदि आप स्पर्श इनपुट को ट्रैक करने का प्रयास कर रहे हैं, तो शायद उपयोगकर्ता की उंगली के नीचे एक नक्शा ले जा रहे हैं, तो उपयोगकर्ता द्वारा किसी भी विलंबता को सुस्त स्पर्श प्रतिक्रिया के रूप में देखा जाएगा। लक्ष्य उपयोगकर्ता अनुभव को बेहतर बनाने के लिए विलंबता को कम करना है। मान लीजिए कि हमने घटनाओं को थोड़ा सा दे दिया है, इसलिए ऐप V0.5 पर खींचता है, हम V1.2 पर मिश्रित होते हैं, और फिर V2 पर डिस्प्ले पर स्वैप करते हैं। ऐप और एसएफ गतिविधि को ऑफसेट करके हम कुल विलंबता को 2 फ्रेम से 1.5 तक घटाते हैं, जैसा कि नीचे दिखाया गया है।
क्या DispSync के लिए है यही कारण है कि। आपके द्वारा लिंक किए गए पृष्ठ पर फीडबैक आरेख में, HW_VSYNC_0 भौतिक प्रदर्शन के लिए हार्डवेयर रीफ्रेश है, VSYNC ऐप को प्रस्तुत करने का कारण बनता है, और SF_VSYNC सतहफ्लिंगर को संरचना करने का कारण बनता है। उन्हें "वीएसवाईएनसी" के रूप में संदर्भित करना एक गलत नाम है, लेकिन एक एलसीडी पैनल पर "वीएसवाईएनसी" के रूप में कुछ भी संदर्भित करना संभवतः एक गलत नाम है।
फीडबैक लूप आरेख में नोट किया गया "सेवानिवृत्त बाड़ टाइमस्टैम्प" एक चालाक अनुकूलन को संदर्भित करता है। चूंकि हम वास्तविक हार्डवेयर वीएसवाईएनसी पर कोई काम नहीं कर रहे हैं, इसलिए अगर हम ताज़ा सिग्नल बंद कर देते हैं तो हम थोड़ा और अधिक कुशल हो सकते हैं। DispSync कोड इसके बजाय सेवानिवृत्त बाड़ से टाइमस्टैम्प का उपयोग करेगा (यह एक पूरी चर्चा है) यह देखने के लिए कि क्या यह सिंक से बाहर हो रहा है, और अस्थायी रूप से हार्डवेयर सिग्नल को फिर से सक्षम कर देगा जब तक यह ट्रैक पर वापस न हो।
संपादित करें: आप देख सकते हैं कि Nexus 5 boardconfig में मान कैसे कॉन्फ़िगर किए गए हैं। VSYNC_EVENT_PHASE_OFFSET_NS
और SF_VSYNC_EVENT_PHASE_OFFSET_NS
के लिए सेटिंग्स नोट करें।
fadden, एक बार फिर आपकी मदद के लिए धन्यवाद। केवल दो प्रश्न: 1) क्या यह समय चार्ट मैंने बनाया है? मूल (विलंबता के 2 फ्रेम): i.imgur.com/4E2cD9l.png DispSync: i.imgur.com/p7LdmXF.png 2) यदि आप ऑफसेट को पर्याप्त रूप से कम करते हैं (जोखिम पर) एक फ्रेम में ड्रॉ करना और लिखना संभव है समय प्रस्तुत करने को कम करने के लिए)? – Shookit
आरेख अच्छे लगते हैं। एक वीएसवाईएनसी अंतराल (आमतौर पर 16.7 एमएमएस) में आकर्षित करना और लिखना संभव है, लेकिन व्यवहार में नियमित रूप से उन समय सीमाओं को मारना मुश्किल होता है, इसलिए ऐसा करने का प्रयास अक्सर जंकी परिणाम उत्पन्न करता है। ध्यान दें कि अगर सब कुछ ओवरले में फिट बैठता है तो सतहफ्लिंगर संरचना बहुत तेज़ है, लेकिन यदि यह जीएलएस संरचना में वापस आती है तो इसमें अधिक समय लगेगा, खासकर अगर एसएफ और ऐप जीपीयू संसाधनों के लिए प्रतिस्पर्धा कर रहा है। DispSync का सबसे सटीक विज़ुअलाइजेशन उस डिवाइस से सिस्ट्रेस आउटपुट है जहां यह सक्षम है, उदा। नेक्सस 5. – fadden
क्या कोई हार्डवेयर कारण है कि कोई बोर्ड DispSync का समर्थन नहीं करेगा? या यह सिर्फ इतना परीक्षण है कि निर्माता को लागू करने के लिए क्या करना है? मैं एन 4 पर परीक्षण कर रहा हूं, और मैंने देखा कि VSYNC_EVENT_PHASE_OFFSET_NS झंडे में से कोई भी N4 के लिए परिभाषित नहीं किया गया है (न ही RUNNING_WITHOUT_SYNC_FRAMEWORK)। यह उस स्थिति में 0 से डिफ़ॉल्ट है, DispSync को अक्षम कर रहा है? – Shookit