फ़्रेम पेसिंग

एंड्रॉइड फ्रेम पेसिंग लाइब्रेरी, जिसे स्वैपी के नाम से भी जाना जाता है, एंड्रॉइड गेम एसडीके का हिस्सा है। यह ओपनजीएल और वल्कन गेम्स को एंड्रॉइड पर स्मूथ रेंडरिंग और सही फ्रेम पेसिंग हासिल करने में मदद करता है।

फ़्रेम पेसिंग एक ओएस के डिस्प्ले सबसिस्टम और अंतर्निहित डिस्प्ले हार्डवेयर के साथ गेम के लॉजिक और रेंडरिंग लूप का सिंक्रनाइज़ेशन है। एंड्रॉइड डिस्प्ले सबसिस्टम को कुछ दृश्य कलाकृतियों, जैसे कि फटने से बचने के लिए डिज़ाइन किया गया था। निम्नलिखित कार्य करके डिस्प्ले सबसिस्टम फटने से बचाता है:

  • पिछले फ़्रेमों को आंतरिक रूप से बफर करना
  • देर से फ़्रेम सबमिशन का पता लगाना
  • विलंबित फ़्रेम का पता चलने पर वर्तमान फ़्रेम को प्रदर्शित करना जारी रखें

असंगत फ़्रेम डिस्प्ले समय गेम के रेंडर लूप के मूल डिस्प्ले हार्डवेयर द्वारा समर्थित दर से भिन्न दर पर चलने के कारण होता है। समस्याएँ तब उत्पन्न होती हैं जब गेम का रेंडर लूप अंतर्निहित डिस्प्ले हार्डवेयर के लिए बहुत धीमी गति से चलता है, जिससे डिस्प्ले समय असंगत हो जाता है। उदाहरण के लिए, जब 30 एफपीएस पर चलने वाला गेम किसी डिवाइस पर रेंडर करने का प्रयास करता है जो मूल रूप से 60 एफपीएस का समर्थन करता है, तो गेम का रेंडर लूप अतिरिक्त 16 एमएस के लिए स्क्रीन पर एक बार-बार फ्रेम बने रहने का कारण बनता है। इस प्रकार का डिस्कनेक्ट फ़्रेम समय में पर्याप्त विसंगतियां पैदा करता है जैसे कि 33 एमएस, 16 एमएस, 49 एमएस, इत्यादि। अत्यधिक जटिल दृश्य इस समस्या को और भी बढ़ा देते हैं क्योंकि उनके कारण फ़्रेम छूट जाते हैं।

फ़्रेम पेसिंग लाइब्रेरी ये कार्य करती है:

  • छोटे गेम फ़्रेम के कारण हकलाने की भरपाई करता है।
    • प्रेजेंटेशन टाइमस्टैम्प जोड़ता है ताकि फ़्रेम समय पर प्रस्तुत किए जाएं, जल्दी नहीं।
    • प्रेजेंटेशन टाइमस्टैम्प एक्सटेंशन EGL_ANDROID_presentation_time और VK_GOOGLE_display_timing का उपयोग करता है।
  • लंबे फ़्रेमों के लिए सिंक बाड़ का उपयोग करता है जो हकलाना और विलंबता का कारण बनता है।
    • ऐप में प्रतीक्षा इंजेक्ट करता है। ये बैक प्रेशर बनने की अनुमति देने के बजाय डिस्प्ले पाइपलाइन को पकड़ने की अनुमति देते हैं।
    • सिंक बाड़ ( EGL_KHR_fence_sync और VkFence ) का उपयोग करता है।
  • यदि आपका डिवाइस एकाधिक रीफ्रेश दरों का समर्थन करता है, तो लचीलापन और सुचारू प्रस्तुति प्रदान करने के लिए रीफ्रेश दर चुनता है।
  • फ़्रेम आँकड़ों का उपयोग करके डिबगिंग और प्रोफ़ाइलिंग के लिए आँकड़े प्रदान करता है।

अपनी आवश्यकता के अनुसार विभिन्न मोड में संचालित करने के लिए लाइब्रेरी को कॉन्फ़िगर करने का तरीका जानने के लिए, समर्थित ऑपरेटिंग मोड देखें।

ओपनजीएल रेंडरर या वल्कन रेंडरर का उपयोग करके कार्यान्वित करने के लिए, देखें

अधिक पढ़ने के लिए, उचित फ़्रेम पेसिंग प्राप्त करें देखें।

फ़्रेम प्रति सेकंड थ्रॉटलिंग हस्तक्षेप

फ़्रेम प्रति सेकंड (एफपीएस) थ्रॉटलिंग हस्तक्षेप गेम को केवल प्लेटफ़ॉर्म साइड परिवर्तन का उपयोग करके और डेवलपर्स की ओर से किसी भी कार्रवाई की आवश्यकता के बिना उचित एफपीएस पर गति देने में सक्षम बनाता है।

एफपीएस थ्रॉटलिंग हस्तक्षेप का कार्यान्वयन निम्नलिखित घटकों का उपयोग करता है:

गेममैनेजरसेवा

GameManagerService घटक गेम मोड और गेम हस्तक्षेप की सभी प्रति-उपयोगकर्ता और प्रति-गेम जानकारी बनाए रखता है। एफपीएस जानकारी को प्रत्येक उपयोगकर्ता प्रोफ़ाइल के लिए <PACKAGE_NAME, Interventions> मैपिंग में अन्य हस्तक्षेप जानकारी, जैसे रिज़ॉल्यूशन डाउनस्केलिंग कारक, के साथ गेममैनेजर सर्विस में संग्रहीत किया जाता है। गेम मोड बदलने या हस्तक्षेप अपडेट होने पर एफपीएस जानकारी तक पहुंच प्राप्त की जाती है। एक UID प्रत्येक PACKAGE_NAME और उपयोगकर्ता के लिए अद्वितीय है, और इसे SurfaceFlinger पर भेजने के लिए <UID, Frame Rate> जोड़ी में अनुवादित किया जा सकता है।

सरफेसफ्लिंगर

सरफेसफ्लिंगर घटक पहले से ही किसी एप्लिकेशन के एफपीएस को थ्रॉटलिंग का समर्थन करता है जब तक कि फ्रेम दर डिस्प्ले रिफ्रेश दर का विभाजक है। Vsync की स्थिति में, SurfaceFlinger यह सत्यापित करके थ्रॉटल एप्लिकेशन के लिए vsync की वैधता की जांच करता है कि क्या vsync टाइमस्टैम्प एप्लिकेशन के फ्रेम दर के साथ चरण में है। यदि फ्रेम दर vsync के साथ चरण में नहीं है, तो SurfaceFlinger फ्रेम को तब तक पकड़कर रखता है जब तक कि फ्रेम दर और vsync चरण में न हो जाएं।

निम्नलिखित चित्र GameManagerService और SurfaceFlinger के बीच बातचीत का वर्णन करता है:

GameManagerService और SurfaceFlinger के बीच सहभागिता

चित्र 1. GameServiceManager और SurfaceFlinger के बीच सहभागिता

सरफेसफिंगर एक नई फ्रेम दर थ्रॉटलिंग प्राथमिकता निर्धारित करने के लिए <UID, Frame Rate> जोड़ी मैपिंग बनाए रखता है। UID उपयोगकर्ताओं और गेम के बीच अद्वितीय है, ताकि एक ही डिवाइस पर प्रत्येक उपयोगकर्ता के पास एक ही गेम पर फ्रेम दर की अलग-अलग सेटिंग्स हो सकें। किसी गेम की फ़्रेम दर को कम करने के लिए, GameServiceManager UID के लिए फ़्रेम दर को ओवरराइड करने के लिए SurfaceFlinger को कॉल करता है। इस तंत्र के साथ, जब भी गेम मोड बदला जाता है या हस्तक्षेप अपडेट किया जाता है तो सरफेसफ्लिंगर मैपिंग को अपडेट करता है। सरफेसफ्लिंगर तदनुसार बफ़र्स को लैच करके एफपीएस परिवर्तन को संभालता है।

एफपीएस थ्रॉटलिंग के बारे में अधिक समझने के लिए, एफपीएस थ्रॉटलिंग परिचय देखें।