धीमे सेशन

'Android की ज़रूरी जानकारी' में, धीमा सेशन उसे कहा जाता है जिसमें 25% से ज़्यादा फ़्रेम धीमी रफ़्तार से रेंडर होते हैं. अगर कोई फ़्रेम, पिछले फ़्रेम के बाद 50 मि॰से॰ से कम समय में रेंडर नहीं होता है, तो उसे धीमा माना जाता है. यह रेट, 20 FPS के बराबर होता है. 'Android की ज़रूरी जानकारी' में, धीमे सेशन की दूसरी मेट्रिक भी रिपोर्ट की जाती है. इसका टारगेट 34 मि॰से॰ (30 FPS के बराबर) होता है. 'धीमे सेशन' मेट्रिक का इस्तेमाल करके, अपने गेम के फ़्रेम रेट की परफ़ॉर्मेंस को समझा जा सकता है. इसकी मदद से डेवलपर यह जान सकते हैं कि लोग उनके गेम को आसानी से खेल पा रहे हैं या नहीं.

आने वाले समय में, Play अपने उपयोगकर्ताओं को उन गेम से दूर रखना शुरू कर देगा जो उनके फ़ोन पर 20 FPS (फ़्रेम प्रति सेकंड) की दर से रेंडर नहीं हो पाते. ध्यान दें कि 'Android की ज़रूरी जानकारी', गेम के एक मिनट तक चलने के बाद ही फ़्रेम रेट की जानकारी इकट्ठा करती है.

इस मेट्रिक के बारे में ज़्यादा जानने के लिए, हमारे सहायता केंद्र पर जाएं.

पाई चार्ट जैसे ग्राफ़िक, जिनमें रेंडर होने में ज़्यादा समय लेने वाले और कम समय लेने वाले फ़्रेम की संख्या दिखती है.
पहली इमेज. 'Android की ज़रूरी जानकारी' में धीमे सेशन की जानकारी.

एफ़पीएस को मेज़र करने और रेंडर करने में ज़्यादा समय लेने वाले फ़्रेम का पता लगाने का तरीका

Android dumpsys SurfaceFlinger --timestats कमांड, रेंडर की जा रही सभी लेयर के लिए, औसत एफ़पीएस और प्रज़ेंट टू प्रज़ेंट टाइमिंग हिस्टोग्राम उपलब्ध कराता है. किसी फ़्रेम के प्रज़ेंट से प्रज़ेंट होने का समय, मौजूदा फ़्रेम और पिछले फ़्रेम के बीच का इंटरवल होता है. अपने गेम के एफ़पीएस की जानकारी इकट्ठा करने के लिए, कमांड का इस्तेमाल करने का यह तरीका अपनाएं:

  1. जानकारी कैप्चर करना शुरू करने के लिए, enable और clear फ़्लैग के साथ कमांड चलाएं:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. जब गेम को काफ़ी देर तक खेला जाए, तो जानकारी को डंप करने के लिए, फ़्लैग dump के साथ कमांड को फिर से चलाएं:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    डंप की गई जानकारी से, कुल फ़्रेम और presentToPresent हिस्टोग्राम के बारे में पता चलता है. यह जानकारी, SurfaceFlinger की रेंडर की गई सभी लेयर के लिए होती है. आपको layerName के आधार पर फ़िल्टर करके, अपने गेम का सेक्शन ढूंढना होगा:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    हर लेयर की जानकारी के आधार पर, सेशन के धीमे फ़्रेम रेट का हिसाब लगाया जा सकता है.

    उदाहरण के लिए, 20 FPS (फ़्रेम प्रति सेकंड) वाले धीमे फ़्रेम का प्रतिशत = (54 मि॰से॰ से 1000 मि॰से॰ तक की वैल्यू का योग) / totalFrames x 100

    totalFrames = 274
    ...
    presentToPresent histogram:
    0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0
    13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0
    24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0
    36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0
    66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0
    110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0
    150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0
    650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
    

    डंप में हर लेयर का औसत एफ़पीएस भी दिखाया जाता है:

    ...
    averageFPS = 30.179
    ...
    
  3. सारी जानकारी इकट्ठा करने के बाद, disable फ़्लैग का इस्तेमाल करके, timestats को बंद करें:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

धीमे रेंडर होने वाले फ़्रेम की वजहें और उनके समाधान

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

इन समस्याओं को हल करने और अपने गेम की परफ़ॉर्मेंस को बेहतर बनाने के लिए, Android Frame Pacing (Swappy), Vulkan, और एडीपीएफ़ का इस्तेमाल करें.

Swappy क्या है

Android फ़्रेम पेसिंग लाइब्रेरी, AGDK लाइब्रेरी का हिस्सा है. इसे Swappy भी कहा जाता है. Swappy, OpenGL और Vulkan गेम को Android पर आसानी से रेंडर करने और सही फ़्रेम पेसिंग हासिल करने में मदद करता है.

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

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

जानें कि Mir 2 ने Swappy का इस्तेमाल करके, धीमे सेशन की दर को 40% से घटाकर 10% कैसे किया.

नेटिव प्रोजेक्ट में Swappy इस्तेमाल करने का तरीका

अपने गेम में Android फ़्रेम पेसिंग लाइब्रेरी को इंटिग्रेट करने के लिए, यहां दी गई गाइड देखें:

Unity गेम इंजन में Swappy इस्तेमाल करने का तरीका

Unity ने Android Frame Pacing को अपने इंजन में इंटिग्रेट किया है. Unity 2019.2 या इसके बाद के वर्शन में इस सुविधा को चालू करने के लिए, प्रोजेक्ट सेटिंग > Player > Settings में जाकर, Android > Resolution and Presentation के लिए, ऑप्टिमाइज़ किए गए फ़्रेम पेसिंग चेकबॉक्स को चुनें:

Unity प्रोजेक्ट सेटिंग विंडो में, ऑप्टिमाइज़ किए गए फ़्रेम पेसिंग का चेकबॉक्स दिख रहा है.
दूसरी इमेज. Unity Engine में फ़्रेम पेसिंग की सुविधा चालू करें.

इसके अलावा, अपने लॉजिक कोड में ऑप्टिमाइज़ किए गए फ़्रेम पेसिंग के विकल्प को प्रोग्राम के हिसाब से चालू करें. इससे Unity को फ़्रेम रेट में कम अंतर के लिए, फ़्रेम को समान रूप से डिस्ट्रिब्यूट करने की अनुमति मिलती है. इससे गेमप्ले बेहतर होता है.

Unreal गेम इंजन में Swappy का इस्तेमाल करने का तरीका

Unreal 4.25 और इसके बाद के वर्शन में, Android फ़्रेम पेसिंग लाइब्रेरी इंटिग्रेट की गई है. यह Android Game Development Kit का हिस्सा है. मोबाइल फ़्रेम पेसिंग लेख में, Android फ़्रेम पेसिंग लाइब्रेरी को चालू करने और C++ कोड से फ़्रेम पेसिंग को कंट्रोल करने का तरीका बताया गया है.

Vulkan क्या है

Vulkan एक मॉडर्न क्रॉस-प्लैटफ़ॉर्म 3D ग्राफ़िक्स एपीआई है. इसे डिवाइस के ग्राफ़िक्स हार्डवेयर और आपके गेम के बीच ऐब्स्ट्रैक्शन को कम करने के लिए डिज़ाइन किया गया है. Vulkan, Android पर मुख्य लो-लेवल ग्राफ़िक्स एपीआई है. यह OpenGL ES की जगह लेता है. Android पर OpenGL ES अब भी काम करता है. हालांकि, अब इसमें नई सुविधाएं नहीं जोड़ी जा रही हैं.

OpenGL ES की तुलना में Vulkan के ये फ़ायदे हैं:

  • ग्राफ़िक्स ड्राइवर में कम सीपीयू ओवरहेड के साथ ज़्यादा बेहतर आर्किटेक्चर
  • सीपीयू की परफ़ॉर्मेंस को बेहतर बनाने के लिए, ऑप्टिमाइज़ेशन की नई रणनीतियां
  • OpenGL ES में नई ग्राफ़िक सुविधाएं उपलब्ध नहीं हैं. जैसे, बाइंडलेस एपीआई और रे ट्रेसिंग तकनीक

नेटिव Android प्रोजेक्ट में Vulkan इस्तेमाल करने का तरीका

Android पर Vulkan का इस्तेमाल शुरू करना कोडलैब, Vulkan रेंडरिंग पाइपलाइन को सेट अप करने और स्क्रीन पर टेक्सचर वाले, घूमते हुए त्रिकोण को रेंडर करने में आपकी मदद करता है. गेम के ग्राफ़िक्स रेंडर करने का तरीका जानने के लिए, कोडलैब का इस्तेमाल करें.

Unity गेम इंजन में Vulkan का इस्तेमाल करने का तरीका

Unity पर डिवाइस अपने-आप चुनने की सुविधा चालू करने के लिए, ऑटो ग्राफ़िक्स एपीआई को कॉन्फ़िगर करने का तरीका अपनाएं.

Unity प्रोजेक्ट की सेटिंग विंडो, जिसमें ऑटो ग्राफ़िक्स एपीआई चालू है.
तीसरी इमेज. Unity Auto Graphics API को चालू करें.

इसके अलावा, ऑटो ग्राफ़िक्स एपीआई को बंद करके, Vulkan को मैन्युअल तरीके से चालू किया जा सकता है. साथ ही, ग्राफ़िक्स एपीआई की सूची में Vulkan को सबसे ज़्यादा प्राथमिकता दी जा सकती है. अगर Unity 2021.1 या इसके किसी पुराने वर्शन का इस्तेमाल किया जा रहा है, तो Vulkan का इस्तेमाल करने का यही एकमात्र तरीका है.

Unity प्रोजेक्ट की सेटिंग विंडो, जिसमें ग्राफ़िक्स एपीआई की सूची में Vulkan को प्राथमिकता दी गई है.
चौथी इमेज. Unity में Vulkan को मुख्य ग्राफ़िक्स एपीआई के तौर पर मैन्युअल तरीके से चुनें.

VkQuality Unity इंजन प्लगिन का इस्तेमाल करके, गेम लॉन्च करते समय ग्राफ़िक्स एपीआई के सुझाव दें. इससे, गेम को चुनिंदा डिवाइसों पर इस्तेमाल किया जा सकेगा.

Unreal गेम इंजन में Vulkan का इस्तेमाल करने का तरीका

Vulkan ग्राफ़िक्स एपीआई को चालू करने के लिए, प्रोजेक्ट सेटिंग > Platforms > Android > बिल्ड पर जाएं. इसके बाद, Support Vulkan को चुनें. Vulkan के साथ काम करता है और OpenGL ES3.2 के साथ काम करता है, दोनों विकल्प चुनने पर Unreal, डिफ़ॉल्ट रूप से Vulkan का इस्तेमाल करता है. अगर डिवाइस पर Vulkan काम नहीं करता है, तो Unreal, OpenGL ES 3.2 पर वापस आ जाता है.

Unreal Engine प्रोजेक्ट सेटिंग विंडो में, Vulkan के साथ काम करने का विकल्प दिख रहा है.
पांचवीं इमेज. Unreal Engine में Vulkan को चालू करें.

अगर Vulkan की कुछ ऐसी सुविधाओं का इस्तेमाल किया जा रहा है जो कुछ डिवाइसों पर ठीक से काम नहीं करती हैं, तो BaseDeviceProfile.ini फ़ाइल को पसंद के मुताबिक बनाया जा सकता है. इससे उन डिवाइसों को बाहर रखा जा सकता है. BaseDeviceProfile.ini को पसंद के मुताबिक बनाने का तरीका जानने के लिए, Android के लिए डिवाइस प्रोफ़ाइलों को पसंद के मुताबिक बनाना और बढ़ाए जा सकने की योग्यता देखें. ऐसा हो सकता है कि नए डिवाइस ड्राइवर, पहले से मौजूद खराब डिवाइसों को ठीक कर दें. इसलिए, सभी ऑप्टिमाइज़ेशन पाने के लिए, अपनी BaseDeviceProfile.ini फ़ाइल को अपडेट रखें.

एडीपीएफ़ क्या है

Android Dynamic Performance Framework (ADPF), Android पर डाइनैमिक थर्मल, सीपीयू, और जीपीयू मैनेजमेंट की सुविधाओं के आधार पर गेम को ऑप्टिमाइज़ करता है. इनका फ़ोकस गेम पर होता है. हालांकि, इन सुविधाओं का इस्तेमाल, ज़्यादा परफ़ॉर्मेंस वाले अन्य ऐप्लिकेशन के लिए भी किया जा सकता है.

एडीपीएफ़, एपीआई का एक सेट है. इसकी मदद से, गेम और ज़्यादा परफ़ॉर्मेंस वाले ऐप्लिकेशन, Android डिवाइसों के पावर और थर्मल सिस्टम के साथ सीधे तौर पर इंटरैक्ट कर सकते हैं. इन एपीआई की मदद से, Android सिस्टम पर डाइनैमिक व्यवहार को मॉनिटर किया जा सकता है. साथ ही, गेम की परफ़ॉर्मेंस को इस तरह से ऑप्टिमाइज़ किया जा सकता है कि डिवाइस ज़्यादा गर्म न हों.

एडीपीएफ़ की मुख्य सुविधाएं यहां दी गई हैं:

  • थर्मल एपीआई: डिवाइस के तापमान की स्थिति पर नज़र रखें, ताकि ऐप्लिकेशन, तापमान बढ़ने से पहले ही वर्कलोड को अडजस्ट कर सके.
  • सीपीयू परफ़ॉर्मेंस हिंट एपीआई: परफ़ॉर्मेंस से जुड़े हिंट दें, ताकि Android, वर्कलोड के लिए सही परफ़ॉर्मेंस सेटिंग चुन सके. उदाहरण के लिए, सीपीयू ऑपरेटिंग पॉइंट या कोर.
  • Game Mode API और Game State API: उपयोगकर्ता की सेटिंग और गेम के हिसाब से कॉन्फ़िगरेशन के आधार पर, परफ़ॉर्मेंस या बैटरी लाइफ़ की विशेषताओं को प्राथमिकता देकर, गेम खेलने की सुविधा को ऑप्टिमाइज़ करें.
  • फ़िक्स्ड परफ़ॉर्मेंस मोड: मानदंड तय करने के दौरान, किसी डिवाइस पर फ़िक्स्ड परफ़ॉर्मेंस मोड चालू करें. इससे आपको ऐसे मेज़रमेंट मिलेंगे जिनमें डाइनैमिक सीपीयू क्लॉकिंग की वजह से बदलाव नहीं होता.
  • पावर एफ़िशिएंसी मोड: सेशन को बताएं कि परफ़ॉर्मेंस हिंट सेशन में मौजूद थ्रेड को सुरक्षित तरीके से शेड्यूल किया जा सकता है, ताकि परफ़ॉर्मेंस के बजाय पावर एफ़िशिएंसी को प्राथमिकता दी जा सके. यह Android 15 (एपीआई लेवल 35) में उपलब्ध है.

नेटिव Android प्रोजेक्ट में एडीपीएफ़ इस्तेमाल करने का तरीका

Integrating Adaptability Features Into Your Native Game कोडलैब, आपको अपने गेम में एडीपीएफ़ की सुविधाएं इंटिग्रेट करने के लिए गाइड करता है. इसमें दिए गए चरणों को अपनी सुविधा के हिसाब से पूरा किया जा सकता है. कोडलैब के आखिर में, आपको ये सुविधाएं इंटिग्रेट करनी होंगी:

  • Thermal API: डिवाइस के गर्म होने की स्थिति पर नज़र रखें और डिवाइस के ज़्यादा गर्म होने से पहले ही कार्रवाई करें.
  • Game Mode API: इससे आपको गेम खेलने वाले लोगों की ऑप्टिमाइज़ेशन से जुड़ी प्राथमिकताओं को समझने में मदद मिलती है. जैसे, परफ़ॉर्मेंस को बेहतर बनाना या बैटरी बचाना. साथ ही, इसके हिसाब से गेम को अडजस्ट किया जा सकता है.
  • Game State API: सिस्टम को अपने गेम की स्थिति (लोड हो रहा है, खेला जा रहा है, यूज़र इंटरफ़ेस (यूआई) वगैरह) के बारे में बताएं. इससे सिस्टम, गेम की स्थिति के हिसाब से संसाधनों (I/O, सीपीयू, जीपीयू वगैरह को बूस्ट करना) को अडजस्ट कर सकता है.
  • परफ़ॉर्मेंस हिंट एपीआई: सिस्टम को अपने थ्रेडिंग मॉडल और वर्कलोड की जानकारी दें, ताकि सिस्टम उसके हिसाब से संसाधन उपलब्ध करा सके.

Unity गेम इंजन में एडीपीएफ़ इस्तेमाल करने का तरीका

Unity का अडैप्टिव परफ़ॉर्मेंस एक ऐसा टूल है जो गेम डेवलपर को मोबाइल डिवाइसों पर अपने गेम ऑप्टिमाइज़ करने में मदद करता है. खास तौर पर, अलग-अलग तरह के Android ईकोसिस्टम के लिए. अडैप्टिव परफ़ॉर्मेंस की सुविधा, आपके गेम को डिवाइस की परफ़ॉर्मेंस और थर्मल विशेषताओं के हिसाब से रीयल-टाइम में अडैप्ट करने में मदद करती है. इससे गेम खेलने का आसान और बेहतर अनुभव मिलता है.

Adaptive Performance Android provider, Unity में एडीपीएफ़ को लागू करने के चरणों के बारे में बताता है. एडीपीएफ़ Unity अडैप्टिव परफ़ॉर्मेंस और Android प्रोवाइडर भी देखें.

Unity प्रोजेक्ट की सेटिंग विंडो में, Adaptive Performance Android प्रोवाइडर की सेटिंग दिख रही हैं.
छठी इमेज. Unity Engine में एडीपीएफ़ को इंटिग्रेट करें.

Unreal गेम इंजन में एडीपीएफ़ इस्तेमाल करने का तरीका

Unreal Engine प्लगिन की विंडो, जिसमें Android Dynamic Performance Framework प्लगिन दिख रहा है.
सातवीं इमेज. Unreal Engine में एडीपीएफ़ को इंटिग्रेट करें.
  1. प्लग इन डाउनलोड करें.
  2. प्लगिन को प्रोजेक्ट के प्लगिन फ़ोल्डर में कॉपी करें.
  3. Unreal एडिटर में, एडीपीएफ़ Unreal Engine प्लगिन को चालू करें.
  4. Unreal Editor को फिर से लॉन्च करें.
  5. गेम को बिल्ड और कुक करें.

Unreal Engine के लिए Android Dynamic Performance Framework (एडीपीएफ़) प्लगिन, गेम की परफ़ॉर्मेंस को बेहतर बनाता है और डिवाइस को ज़्यादा गर्म होने से बचाता है. GitHub से प्लगिन डाउनलोड करें. यह प्लगिन, Unreal कंसोल वैल्यू सेट करके सुविधाओं में बदलाव करता है. ज़्यादा जानकारी के लिए, एडीपीएफ़ Unreal Engine प्लगिन पेज पर जाएं.