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

Android फ़्रेम पेसिंग लाइब्रेरी को Swippy भी कहा जाता है. यह Android Game SDK का हिस्सा है. इसकी मदद से, OpenGL और Vulkan गेम बेहतर रेंडरिंग कर पाते हैं साथ ही, Android पर फ़्रेम पेसिंग सही होनी चाहिए.

फ़्रेम पेसिंग, गेम के लॉजिक और रेंडरिंग लूप के साथ सिंक होती है ओएस का डिसप्ले सबसिस्टम और पहले से मौजूद डिसप्ले हार्डवेयर. Android डिसप्ले सबसिस्टम को कुछ विज़ुअल आर्टफ़ैक्ट से बचाने के लिए डिज़ाइन किया गया था, जैसे कि टूटना. कॉन्टेंट बनाने Display सबसिस्टम नीचे दिए गए काम करके टूट जाने से बचाता है:

  • पिछले फ़्रेम को अंदरूनी तौर पर बफ़र किया जा रहा है
  • देरी से सबमिट होने वाले फ़्रेम का पता लगाया जा रहा है
  • देर से फ़्रेम का पता चलने पर, मौजूदा फ़्रेम दिखाना जारी रखना

रेंडर होने में लगने वाला समय, गेम के रेंडर होने में लगने वाले समय की वजह से हो सकता है. वह फ़्रेम रेंडर होने में लगने वाले समय की वजह से जो मूल डिसप्ले हार्डवेयर की सुविधा से अलग है. समस्याएं आती हैं जब किसी गेम का रेंडर लूप, डिसप्ले हार्डवेयर के लिए बहुत धीरे काम करता है, जिससे डिसप्ले का समय अलग-अलग हो सकता है. उदाहरण के लिए, जब कोई गेम जिस डिवाइस पर मूल रूप से 60 फ़्रेम प्रति सेकंड (फ़्रेम प्रति सेकंड) काम करता है उस पर 30 फ़्रेम प्रति सेकंड (फ़्रेम प्रति सेकंड) रेंडर होने की कोशिश की जाती है, गेम के रेंडर लूप से, स्क्रीन पर एक फ़्रेम के दोहराए जाने की वजह से अतिरिक्त 16 मि॰से॰. इस तरह के डिसकनेक्ट होने की वजह से, फ़्रेम टाइम में काफ़ी अंतर होता है जैसे कि 33 मि॰से॰, 16 मि॰से॰, 49 मि॰से॰ वगैरह. ज़्यादा मुश्किल सीन में और भी कंपाउंड यह समस्या इसलिए होती है, क्योंकि उनकी वजह से फ़्रेम छूट जाते हैं.

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

  • छोटे गेम फ़्रेम की वजह से हकलाना कम हो जाता है.
    • प्रज़ेंटेशन के टाइमस्टैंप जोड़ता है, ताकि फ़्रेम को समय पर दिखाया जा सके, न कि समय से पहले.
    • प्रज़ेंटेशन के टाइमस्टैंप एक्सटेंशन EGL_ANDROID_presentation_time और VK_GOOGLE_display_timing का इस्तेमाल करता है.
  • लंबे फ़्रेम के लिए सिंक फ़ेंस का इस्तेमाल करता है, जिसकी वजह से वीडियो रुक-रुककर चलते हैं और वीडियो स्ट्रीम होने में लगने वाला समय बढ़ जाता है.
    • इंजेक्ट, ऐप्लिकेशन में इंतज़ार करते हैं. इनसे डिसप्ले पाइपलाइन को काफ़ी ज़्यादा होता है.
    • सिंक फ़ेंस (EGL_KHR_fence_sync और VkFence) का इस्तेमाल करता है.
  • सुविधाजनक और आसान प्रज़ेंटेशन देने के लिए रीफ़्रेश दर को चुना जाता है, अगर आपका डिवाइस एक से ज़्यादा रीफ़्रेश दरों की सुविधा देता है.
  • फ़्रेम का इस्तेमाल करके, प्रोफ़ाइल को डीबग और प्रोफ़ाइल बनाने के आंकड़े देता है आंकड़े.

लाइब्रेरी को अलग-अलग मोड में काम करने के लिए कॉन्फ़िगर करने का तरीका जानने के लिए, देखने के लिए, काम करने वाले ऑपरेटिंग मोड देखें.

OpenGL रेंडरर या Vulkan रेंडरर का इस्तेमाल करने के लिए, यहां देखें

इस बारे में ज़्यादा जानने के लिए, सही फ़्रेम पेसिंग पाना लेख पढ़ें.

फ़्रेम प्रति सेकंड थ्रॉटलिंग इंटरवेंशन

फ़्रेम प्रति सेकंड (एफ़पीएस) थ्रॉटलिंग इंटरवेंशन, गेम को सही एफ़पीएस (फ़्रेम प्रति सेकंड) तक तेज़ी से पहुंचाने में मदद करता है सिर्फ़ प्लैटफ़ॉर्म साइड का इस्तेमाल किया जा रहा है बदलाव करने होंगे और इसके लिए डेवलपर पर कोई कार्रवाई करने की ज़रूरत नहीं होगी .

एफ़पीएस थ्रॉटलिंग इंटरवेंशन को लागू करने के लिए, इन कॉम्पोनेंट का इस्तेमाल किया जाता है:

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

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

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

SurfaceFlinger कॉम्पोनेंट पहले से ही काम करता है किसी ऐप्लिकेशन के FPS (फ़्रेम प्रति सेकंड) को तब तक थ्रॉटल किया जाता है, जब तक फ़्रेम रेट, डिसप्ले रीफ़्रेश दर से अलग होता है. vsync की स्थिति में, SurfaceFlinger, थ्रॉटल की गई फ़ाइलों के लिए vsync की वैधता की जांच करता है ऐप्लिकेशन को सत्यापित करें कि क्या vsync टाइमस्टैंप का इस्तेमाल करें. अगर फ़्रेम रेट vsync के साथ चरण में नहीं है, तो SurfaceFlinger में फ़्रेम रेट और vsync फ़ेज़ में होने तक, फ़्रेम रेट में बदलाव होगा.

नीचे दिए गए डायग्राम में GameManagerService और SurfaceFlinger के बीच के इंटरैक्शन के बारे में बताया गया है:

GameManagerService और SurfaceFlinger के बीच इंटरैक्शन

पहला डायग्राम. GameServiceManager और SurfaceFlinger के बीच इंटरैक्शन

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

एफ़पीएस थ्रॉटलिंग के बारे में ज़्यादा जानने के लिए, यहां देखें एफ़पीएस थ्रॉटलिंग के बारे में जानकारी.