धीमा सेशन उसे कहा जाता है जिसमें 25% से ज़्यादा फ़्रेम धीमी रफ़्तार से रेंडर होते हैं. अगर कोई फ़्रेम, पिछले फ़्रेम के 50 मि॰से॰ (20 FPS के बराबर) के अंदर रेंडर नहीं होता है, तो उसे धीमा माना जाता है. Android की ज़रूरी जानकारी में, धीमे सेशन की एक और मेट्रिक भी दिखती है. इसमें 34 मि॰से॰ (30 FPS के बराबर) का टारगेट सेट किया गया है. धीमे सेशन की मेट्रिक का इस्तेमाल करके, अपने गेम के फ़्रेम रेट की परफ़ॉर्मेंस को समझा जा सकता है. इसकी मदद से डेवलपर यह जान सकते हैं कि लोग उनके गेम को आसानी से खेल पा रहे हैं या नहीं.
आने वाले समय में, Play अपने उपयोगकर्ताओं को उन गेम से दूर रखना शुरू कर देगा जो उनके फ़ोन पर 20 FPS (फ़्रेम प्रति सेकंड) की दर से रेंडर नहीं हो पाते. ध्यान दें कि Android की ज़रूरी जानकारी, गेम के एक मिनट तक चलने के बाद ही फ़्रेम रेट की जानकारी इकट्ठा करती है.
मेट्रिक के बारे में ज़्यादा जानकारी पाने के लिए, हमारे सहायता केंद्र पर जाएं.
Canvas या
View क्रम के हिसाब से बनाया जाता है.
FPS को मापने और धीमे फ़्रेम का पता लगाने का तरीका
Android का dumpsys surfaceflinger timestats कमांड, रेंडर किए जा रहे सभी लेयर के लिए औसत FPS और present to present टाइमिंग हिस्टोग्राम उपलब्ध कराता है. किसी फ़्रेम का present to present टाइम, मौजूदा फ़्रेम और रेंडर किए जा रहे पिछले फ़्रेम के बीच का इंटरवल होता है. अपने गेम के FPS की जानकारी इकट्ठा करने के लिए, इस कमांड का इस्तेमाल करने का तरीका यहां दिया गया है:
जानकारी कैप्चर करना शुरू करने के लिए,
enableऔरclearफ़्लैग के साथ कमांड चलाएं:adb shell dumpsys SurfaceFlinger --timestats -clear -enableजब गेम काफ़ी समय तक खेला जा चुका हो, तो जानकारी डंप करने के लिए,
dumpफ़्लैग के साथ कमांड फिर से चलाएं:adb shell dumpsys SurfaceFlinger --timestats -dumpडंप की गई जानकारी में, SurfaceFlinger से रेंडर किए गए सभी लेयर के लिए कुल फ़्रेम और presentToPresent हिस्टोग्राम की जानकारी मिलती है. आपको अपने गेम का सेक्शन
layerNameके आधार पर फ़िल्टर करके ढूंढना होगा:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833सेशन के धीमे फ़्रेम रेट का हिसाब, हर लेयर की जानकारी के आधार पर लगाया जा सकता है.
उदाहरण के लिए, 20 FPS के धीमे फ़्रेम का प्रतिशत = (54 मि॰से॰ से 1000 मि॰से॰ तक की वैल्यू का योग) / कुल फ़्रेम x 100
totalFrames = 274 ... presentToPresent histogram is as below: 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डंप में, हर लेयर का औसत FPS भी दिखता है:
... averageFPS = 30.179 ...पूरी जानकारी इकट्ठा करने के बाद, आपको
disableफ़्लैग का इस्तेमाल करके, टाइमस्टैट्स को बंद कर देना चाहिए:adb shell dumpsys SurfaceFlinger --timestats -disable
धीमे फ़्रेम की वजहें और उन्हें ठीक करने के तरीके
कई वजहों से, कोई फ़्रेम स्क्रीन पर डेवलपर के टारगेट से ज़्यादा समय तक दिख सकता है या रेंडर हो सकता है. ऐसा हो सकता है कि गेम सीपीयू/जीपीयू बाउंड हो. या डिवाइस ज़्यादा गर्म हो रहा हो और थ्रॉटल की गई थर्मल स्थिति में हो. या गेम के फ़्रेमरेट और डिवाइस के डिसप्ले रीफ़्रेश रेट में अंतर हो.
इन समस्याओं को हल करने और अपने गेम की परफ़ॉर्मेंस को बेहतर बनाने के लिए, Android Frame Pacing (Swappy), Vulkan, और ADPF का इस्तेमाल करें.
Swappy क्या है
Android Frame Pacing लाइब्रेरी को Swappy भी कहा जाता है. यह AGDK लाइब्रेरी का हिस्सा है. Swappy, OpenGL और Vulkan गेम को Android पर आसानी से रेंडर करने और सही फ़्रेम पेसिंग हासिल करने में मदद करता है.
फ़्रेम पेसिंग, गेम की लॉजिक और रेंडरिंग लूप को ओएस के डिसप्ले सबसिस्टम और उसके हार्डवेयर के साथ सिंक करने की प्रोसेस है. Android के डिसप्ले सबसिस्टम को, विज़ुअल आर्टफ़ैक्ट (जिन्हें टियरिंग कहा जाता है) से बचने के लिए डिज़ाइन किया गया है. ये आर्टफ़ैक्ट तब दिख सकते हैं, जब डिसप्ले हार्डवेयर, अपडेट के दौरान किसी नए फ़्रेम पर स्विच करता है. इन आर्टफ़ैक्ट से बचने के लिए, डिसप्ले सबसिस्टम ये काम करता है:
- पिछले फ़्रेम को इंटरनली बफ़र करता है
- देर से सबमिट किए गए फ़्रेम का पता लगाता है
- देर से सबमिट किए गए फ़्रेम का पता लगने पर, पिछले फ़्रेम को फिर से दिखाता है
जानें कि Mir 2 ने Swappy का इस्तेमाल करके, धीमे सेशन की दर को 40% से 10%तक कैसे कम किया.
नेटिव प्रोजेक्ट में Swappy का इस्तेमाल करने का तरीका
अपने गेम में Android Frame Pacing लाइब्रेरी को इंटिग्रेट करने के लिए, ये गाइड देखें:
- अपने OpenGL रेंडरर में Android Frame Pacing को इंटिग्रेट करना
- अपने Vulkan रेंडरर में Android Frame Pacing को इंटिग्रेट करना
Unity गेम इंजन में Swappy का इस्तेमाल करने का तरीका
Unity ने Android Frame Pacing को अपने इंजन में इंटिग्रेट किया है. Unity 2019.2 या इसके बाद के वर्शन में इस सुविधा को चालू करने के लिए, ऑप्टिमाइज़ किया गया फ़्रेम पेसिंग चेकबॉक्स को प्रोजेक्ट सेटिंग > प्लेयर > सेटिंग में Android > रिज़ॉल्यूशन और प्रज़ेंटेशन के लिए चुनें:
इसके अलावा, अपने लॉजिक कोड में, ऑप्टिमाइज़ किए गए फ़्रेम पेसिंग के विकल्प को प्रोग्राम के ज़रिए चालू किया जा सकता है. इससे Unity, फ़्रेम रेट में कम अंतर के लिए फ़्रेम को बराबर बांट सकता है. इससे गेमप्ले बेहतर होता है.
Unreal गेम इंजन में Swappy का इस्तेमाल करने का तरीका
Unreal 4.25 और इसके बाद के वर्शन में, Android Frame Pacing लाइब्रेरी इंटिग्रेट की गई है. यह Android Game Development Kit का हिस्सा है. Mobile Frame Pacing लेख में, Android Frame Pacing लाइब्रेरी को चालू करने और C++ कोड से फ़्रेम पेसिंग को कंट्रोल करने का तरीका बताया गया है.
Vulkan क्या है
Vulkan, 3D ग्राफ़िक के लिए एक आधुनिक क्रॉस-प्लैटफ़ॉर्म एपीआई है. इसे डिवाइस के ग्राफ़िक हार्डवेयर और आपके गेम के बीच के ऐब्स्ट्रैक्शन को कम करने के लिए डिज़ाइन किया गया है. Vulkan, Android पर प्राइमरी लो-लेवल ग्राफ़िक एपीआई है, यह OpenGL ES की जगह लेता है. Android पर OpenGL ES अब भी काम करता है, लेकिन अब इसमें नई सुविधाएं नहीं जोड़ी जा रही हैं.
Vulkan, OpenGL ES की तुलना में ये फ़ायदे देता है:
- बेहतर आर्किटेक्चर, जिसमें ग्राफ़िक ड्राइवर में सीपीयू ओवरहेड कम होता है
- सीपीयू की परफ़ॉर्मेंस को बेहतर बनाने के लिए, नई ऑप्टिमाइज़ेशन रणनीतियां
- OpenGL ES में उपलब्ध नहीं होने वाली नई ग्राफ़िक सुविधाएं. जैसे, बाइंडलेस एपीआई और रे ट्रेसिंग
नेटिव Android प्रोजेक्ट में Vulkan का इस्तेमाल करने का तरीका
Android पर Vulkan के साथ शुरुआत करना कोडलैब, आपको Vulkan रेंडरिंग पाइपलाइन सेट अप करने और फिर स्क्रीन पर टेक्सचर वाला, घूमता हुआ ट्रायंगल रेंडर करने में मदद करता है. अपने गेम के ग्राफ़िक को रेंडर करने का तरीका जानने के लिए, कोडलैब का इस्तेमाल करें.
Unity गेम इंजन में Vulkan का इस्तेमाल करने का तरीका
Unity पर डिवाइस के अपने-आप चुने जाने की सुविधा चालू करने के लिए, Auto Graphics API को कॉन्फ़िगर करने का तरीका अपनाएं.
इसके अलावा, Auto Graphics API को बंद करके, और Graphics APIs की सूची में Vulkan को सबसे ज़्यादा प्राथमिकता देकर, Vulkan को मैन्युअल तरीके से चालू किया जा सकता है. अगर Unity 2021.1 या इससे पहले के वर्शन का इस्तेमाल किया जा रहा है, तो Vulkan का इस्तेमाल करने का यही तरीका है.
VkQuality Unity इंजन प्लगिन का इस्तेमाल करके, खास डिवाइसों पर इस्तेमाल करने के लिए, अपने गेम के ग्राफ़िक एपीआई के लॉन्च-टाइम सुझाव दें.
Unreal गेम इंजन में Vulkan का इस्तेमाल करने का तरीका
Vulkan ग्राफ़िक एपीआई को चालू करने के लिए, प्रोजेक्ट सेटिंग > प्लैटफ़ॉर्म > Android > बिल्ड पर जाएं और Vulkan के साथ काम करने की सुविधा को चुनें. जब Vulkan के साथ काम करने की सुविधा और OpenGL ES3.2 के साथ काम करने की सुविधा, दोनों को चुना जाता है, तो Unreal डिफ़ॉल्ट रूप से Vulkan का इस्तेमाल करता है. अगर डिवाइस , Vulkan के साथ काम नहीं करता है, तो Unreal, OpenGL ES 3.2 पर वापस आ जाता है.
अगर Vulkan की उन खास सुविधाओं का इस्तेमाल किया जा रहा है जो कुछ डिवाइसों पर ठीक से काम नहीं करती हैं, तो उन डिवाइसों को शामिल न करने के लिए, BaseDeviceProfile.ini फ़ाइल को पसंद के मुताबिक बनाया जा सकता है. `BaseDeviceProfile.ini` को पसंद के मुताबिक बनाने का तरीका जानने के लिए, Android के लिए डिवाइस प्रोफ़ाइल और स्केलेबिलिटी को पसंद के मुताबिक बनाना
देखें. नए डिवाइस ड्राइवर, पहले से खराब परफ़ॉर्मेंस देने वाले डिवाइसों की समस्याओं को ठीक कर सकते हैं. इसलिए, सभी ऑप्टिमाइज़ेशन पाने के लिए, अपनी BaseDeviceProfile.ini फ़ाइल को अपडेट रखें.
ADPF क्या है
Android Dynamic Performance Framework (ADPF) Android पर मौजूद डाइनैमिक थर्मल, सीपीयू, और जीपीयू मैनेजमेंट की सुविधाओं के आधार पर गेम को ऑप्टिमाइज़ करता है. इसका मुख्य फ़ोकस गेम पर होता है, लेकिन परफ़ॉर्मेंस के मामले में ज़्यादा संसाधन इस्तेमाल करने वाले अन्य ऐप्लिकेशन के लिए भी इन सुविधाओं का इस्तेमाल किया जा सकता है.
ADPF, एपीआई का एक सेट है. इसकी मदद से, गेम और परफ़ॉर्मेंस के मामले में ज़्यादा संसाधन इस्तेमाल करने वाले ऐप्लिकेशन, Android डिवाइसों के पावर और थर्मल सिस्टम के साथ ज़्यादा सीधे तौर पर इंटरैक्ट कर सकते हैं. इन एपीआई की मदद से, Android सिस्टम पर डाइनैमिक बिहेवियर को मॉनिटर किया जा सकता है. साथ ही, गेम की परफ़ॉर्मेंस को ऐसे लेवल पर ऑप्टिमाइज़ किया जा सकता है जिससे डिवाइस ज़्यादा गर्म न हों.
ADPF की मुख्य सुविधाएं यहां दी गई हैं:
- थर्मल एपीआई: किसी डिवाइस की थर्मल स्थिति को मॉनिटर करें, ताकि ऐप्लिकेशन, काम के बोझ को पहले से ही अडजस्ट कर सके. इससे डिवाइस ज़्यादा गर्म नहीं होगा.
- सीपीयू परफ़ॉर्मेंस हिंट एपीआई: परफ़ॉर्मेंस हिंट उपलब्ध कराएं, ताकि Android, काम के बोझ के लिए सही परफ़ॉर्मेंस सेटिंग (उदाहरण के लिए, सीपीयू ऑपरेटिंग पॉइंट या कोर) चुन सके.
- गेम मोड एपीआई और गेम स्टेट एपीआई: उपयोगकर्ता की सेटिंग और गेम के लिए तय किए गए कॉन्फ़िगरेशन के आधार पर, परफ़ॉर्मेंस या बैटरी लाइफ़ की विशेषताओं को प्राथमिकता देकर, गेमप्ले को ऑप्टिमाइज़ करें.
- फ़िक्स्ड परफ़ॉर्मेंस मोड: बेंचमार्किंग के दौरान, किसी डिवाइस पर फ़िक्स्ड-परफ़ॉर्मेंस मोड चालू करें, ताकि ऐसे मेज़रमेंट मिल सकें जो डाइनैमिक सीपीयू क्लॉकिंग से न बदले हों.
- पावर एफिशिएंसी मोड: सेशन को बताता है कि परफ़ॉर्मेंस हिंट सेशन में थ्रेड को सुरक्षित तरीके से शेड्यूल किया जा सकता है, ताकि परफ़ॉर्मेंस के बजाय पावर एफिशिएंसी को प्राथमिकता दी जा सके. यह सुविधा, Android 15 (एपीआई लेवल 35) में उपलब्ध है.
नेटिव Android प्रोजेक्ट में ADPF का इस्तेमाल करने का तरीका
अपने नेटिव गेम में अडैप्टेबिलिटी की सुविधाएं इंटिग्रेट करना कोडलैब, आपको ADPF की सुविधाओं को अपने गेम में इंटिग्रेट करने में मदद करता है. इसमें ऐसे चरण दिए गए हैं जिन्हें अपनी सुविधा के हिसाब से पूरा किया जा सकता है. कोडलैब के आखिर में, आपने ये सुविधाएं इंटिग्रेट कर ली होंगी:
- थर्मल एपीआई: डिवाइस की थर्मल स्थिति को सुनें और डिवाइस के थर्मल थ्रॉटलिंग की स्थिति में आने से पहले कार्रवाई करें.
- गेम मोड एपीआई: खिलाड़ी की ऑप्टिमाइज़ेशन की प्राथमिकताओं (परफ़ॉर्मेंस को ज़्यादा करना या बैटरी बचाना) को समझें और उसके हिसाब से बदलाव करें.
- गेम स्टेट एपीआई: सिस्टम को अपने गेम की स्थिति (लोड हो रहा है, चल रहा है, यूज़र इंटरफ़ेस (यूआई) वगैरह) के बारे में बताएं. इसके बाद, सिस्टम, संसाधनों को उसके हिसाब से अडजस्ट कर सकता है (आई/ओ, सीपीयू, जीपीयू वगैरह को बढ़ावा देना).
- परफ़ॉर्मेंस हिंट एपीआई: सिस्टम को अपने थ्रेडिंग मॉडल और काम के बोझ के बारे में बताएं, ताकि सिस्टम, संसाधनों को उसके हिसाब से बांट सके.
Unity गेम इंजन में ADPF का इस्तेमाल करने का तरीका
Unity का Adaptive Performance, गेम डेवलपर के लिए एक टूल है. इसकी मदद से, वे अपने गेम को मोबाइल डिवाइसों के लिए ऑप्टिमाइज़ कर सकते हैं. खास तौर पर, Android के अलग-अलग इकोसिस्टम के लिए. Adaptive Performance की मदद से, आपका गेम, डिवाइस की परफ़ॉर्मेंस और थर्मल विशेषताओं के हिसाब से रीयल-टाइम में अडजस्ट हो सकता है. इससे गेमिंग का अनुभव बेहतर और असरदार होता है.
Adaptive Performance Android provider, आपको Unity में ADPF को लागू करने के चरणों के बारे में बताता है.
Unreal गेम इंजन में ADPF का इस्तेमाल करने का तरीका
- प्लगिन डाउनलोड करें
- प्लगिन को प्रोजेक्ट प्लगिन फ़ोल्डर में कॉपी करें
- Unreal एडिटर में, ADPF Unreal Engine प्लगिन को चालू करें
- Unreal एडिटर को फिर से लॉन्च करें
- गेम को बिल्ड और कुक करें
Unreal Engine के लिए Android Dynamic Performance Framework(ADPF) प्लगिन, परफ़ॉर्मेंस को स्थिर रखता है और थर्मल थ्रॉटलिंग को रोकता है. प्लगिन डाउनलोड करें GitHub से. यह प्लगिन, Unreal console की वैल्यू सेट करके सुविधाओं में बदलाव करता है.