2012-04-20 8 views
13

मेरा गेम बहुत अधिक बैटरी का उपयोग करता है। मुझे नहीं पता कि तुलनीय खेलों की तुलना में यह कितना उपयोग करता है, लेकिन यह बहुत अधिक उपयोग करता है। खिलाड़ियों ने शिकायत की है कि यह बहुत उपयोग करता है, और उनमें से कई नोट करते हैं कि यह उनके डिवाइस को "गर्म चलाने" बनाता है। मैं बस इसकी जांच शुरू कर रहा हूं और खोज स्थान को सीमित करने के लिए कुछ सैद्धांतिक और व्यावहारिक प्रश्न पूछना चाहता हूं। यह मुख्य रूप से मेरे गेम के आईओएस संस्करण के बारे में है, लेकिन शायद कई मुद्दों में एंड्रॉइड संस्करण को प्रभावित किया गया है। कई उप-प्रश्न पूछने के लिए खेद है, लेकिन वे सभी इतने परस्पर लग रहे थे कि मैंने उन्हें एक साथ रखने के लिए सबसे अच्छा लगा।आईफोन/आईपैड गेम (एंड्रॉइड भी) में बैटरी उपयोग को मापने और सुधारने के लिए

साइड नोट्स: मेरा गेम नेटवर्क एक्सेस नहीं करता है (कई जगहों पर बड़ी बैटरी नाली के रूप में बुलाया जाता है) और पृष्ठभूमि में बहुत सी बैटरी का उपभोग नहीं करता है; यह अग्रभूमि चल रहा है कि समस्या है।

(1) मुझे पता है कि बैटरी स्तर को पढ़ने के लिए एपीआई हैं, इसलिए मैं कुछ स्वचालित परीक्षण कर सकता हूं। मेरा सवाल यह है कि: कितनी देर तक (या शायद: कितनी बैटरी नाली) मुझे चीज़ को विश्वसनीय पढ़ने के लिए चलाने की ज़रूरत है? उदाहरण के लिए, यदि यह 10 मिनट तक चलता है तो वह विश्वसनीय है? अगर यह बैटरी का 10% नाली करता है, तो क्या वह विश्वसनीय है? या क्या यह एक घंटे की तरह दौड़ने के लिए बेहतर है (या, कहें, बैटरी 50% तक निकालने में कितनी देर लगती है)? मैं यहां क्या पूछ रहा हूं कि बैटरी मीटर कितना संवेदनशील/भरोसेमंद है, इसलिए मुझे पता है कि प्रत्येक टेस्ट रन कितनी देर तक होना चाहिए।

(2) मैं समझने की कोशिश कर रहा हूं कि उच्च बैटरी उपयोग के संभावित कारण क्या हैं। नीचे मैं कुछ संभावित कारकों की सूची देता हूं। कृपया मुझे समझने में सहायता करें कि कौन से सबसे अधिक संभावित अपराधी हैं:

(2 ए) कई खेलों के साथ, मेरे गेम को प्रत्येक फ्रेम पर पूर्ण स्क्रीन खींचने की आवश्यकता है। यह लगभग 30 एफपीएस पर चलता है। मुझे पता है कि ऐप्पल कहता है कि "केवल उतनी ही स्क्रीन को रीफ्रेश करें जितना आपको चाहिए", लेकिन मुझे हर फ्रेम को खींचने की ज़रूरत है। दरअसल, मैं कुछ काम केवल स्क्रीन के उन हिस्सों को चित्रित करने में डाल सकता था जो बदल गए थे, लेकिन मेरे मामले में यह अभी भी स्क्रीन का सबसे अधिक होगा। और किसी भी मामले में, भले ही मैं स्क्रीन के केवल हिस्से में ड्राइंग को स्थानीयकृत कर सकूं, फिर भी मैं एक ओपनजीएल स्वैप बफर प्रति सेकंड 30 बार कॉल कर रहा हूं, इसलिए क्या यह वास्तव में मायने रखता है कि मैंने थोड़ा कम आकर्षित करने के लिए कड़ी मेहनत की है ?

(2 बी) जैसे ही मैं स्क्रीन तत्वों को खींचता हूं, वहां एक निश्चित मात्रा में फ्लोटिंग पॉइंट गणित होता है (उदाहरण के लिए, बनावट यूवी निर्देशांक की गणना में), और कुछ (कम) डबल परिशुद्धता गणित जो चल रहा है। मुझे नहीं पता कि ये समान हैं, बैटरी-वार, समान पूर्णांक परिचालनों की तुलना में। मैं शायद इन मूल्यों में से कई को कैश कर सकता हूं ताकि उन्हें बार-बार गणना नहीं करनी पड़े, अगर यह एक संभावित जीत थी।

(2 सी) दृश्य को प्रतिपादित करते समय मैं निश्चित मात्रा में बनावट स्विचिंग करता हूं। मैं पहले इस खेल को बहुत धीमा कर रहा था (यह नहीं करता) के बारे में चिंतित था, लेकिन अब मुझे आश्चर्य है कि बनावट स्विचिंग को कम करने से बैटरी का उपयोग कम हो जाएगा।

(2 डी) मुझे यकीन नहीं है कि यह मेरे लिए व्यावहारिक होगा लेकिन: मैं शेडर्स और ओपनसीएल के बारे में पढ़ रहा हूं, और मैं समझना चाहता हूं कि क्या मुझे कुछ CPU प्रक्रियाओं को जीपीयू में उतारना है, चाहे इससे बैटरी की बचत होगी (वेक्टर-प्रकार के संचालन के लिए संभवतः तेजी से चलने के अलावा)। या क्या यह शायद सीपीयू की तुलना में जीपीयू पर और भी बैटरी का उपयोग करेगा?

मुझे एहसास है कि मैं खेल के कुछ हिस्सों को अक्षम करके और पुनरावृत्त बैटरी टेस्ट रन (इसलिए प्रश्न का भाग (1) कर कर कौन सा कारक खेल सकता हूं। यह सिर्फ इतना है कि अक्षम करना तुच्छ नहीं है और पर्याप्त संभावित अपराधी हैं जिन्हें मैंने सोचा था कि मैं पहले सामान्य सलाह मांगूंगा।

+0

मुझे पता है कि आपने कहा है कि यह मुख्य रूप से आईओएस संस्करण है, लेकिन एंड्रॉइड संस्करण में विज्ञापन नहीं हैं? यहां तक ​​कि यदि आप स्पष्ट रूप से नेटवर्क का उपयोग नहीं कर रहे हैं, तो क्या पृष्ठभूमि में इसका उपयोग कर सकते हैं? – Michael

+2

इसके अतिरिक्त, यदि आप शोध पत्र पढ़ने के साथ ठीक हैं [यह] (http://research.microsoft.com/en-us/people/mzh/eurosys-2012.pdf) हाल ही में एक सम्मेलन से बाहर आया। यह सब एंड्रॉइड है, लेकिन शायद यह आपको कुछ विचार देगा कि अन्य लोगों ने बिजली माप कैसे किया है। – Michael

+0

माइकल, संदर्भ के लिए धन्यवाद। मैंने पेपर पर पढ़ा है और मैं इसे और अधिक बारीकी से देखूंगा। ऐसा नहीं लगता है कि eprof उपकरण इस बिंदु पर डाउनलोड के लिए उपलब्ध है। (?) लेकिन शायद मैं सही दिशा में मुझे इंगित करने के लिए कागज से पर्याप्त अंतर्दृष्टि प्राप्त कर सकता हूं। आपके अन्य प्रश्न के उत्तर में, नहीं, मैं विज्ञापन नहीं दिखा रहा हूं। –

उत्तर

1

यह लेख पढ़ प्रयास करें: Android Documents on optimization

क्या मेरे लिए अच्छी तरह से काम करता है, कचरा संग्रहण
उदा के लिए उपयोग कम हो रही हैडेस्कटॉप कंप्यूटर के लिए प्रोग्रामिंग करते समय, आप (या मैं) लूप के अंदर चर को परिभाषित करने के लिए उपयोग किए जाते हैं, जब उन्हें लूप के बाहर की आवश्यकता नहीं होती है, इससे कचरा संग्रह का भारी उपयोग होता है (और मैं आदिम के बारे में बात नहीं कर रहा हूं वार्स, लेकिन बड़ी वस्तुओं।

कि जैसी चीजों से परहेज प्रयास करें।

+0

धन्यवाद, लेकिन मैं वास्तव में मार्मलाड का उपयोग कर रहा हूं, इसलिए मेरा कोड देशी मोड में है (कम से कम सभी कोड जिन पर मेरा नियंत्रण है) इसलिए कोई कचरा संग्रह नहीं है। और यह मर्मलेड के साथ कोई मुद्दा नहीं है, क्योंकि मेरे अन्य मार्मलेड ऐप्स में यह समस्या नहीं है। –

1

एक छोटी सी टिप है कि वास्तव में मुझे बैटरी उपयोग मिलता है (और डिवाइस की गर्मी!) नीचे अपने कस्टम ओपन इंजन में एफपीएस रुके था मदद की।

खासकर जब दृश्य स्थैतिक है (उदाहरण के लिए एक टर्न-आधारित गेम या उपयोगकर्ता टैप किया गया है) एफपीएस नीचे थ्रॉटल करें। या यदि उपयोगकर्ता स्क्रीनसेव की तरह 10 सेकंड के लिए उत्तरदायी नहीं है तो थ्रॉटल करें एक डेस्कटॉप पीसी पर er। असली दुनिया में उपयोगकर्ता मोबाइल उपकरणों का उपयोग करते समय अक्सर विचलित हो जाते हैं। अपने ऐप को बैटरी को नाली न दें, जबकि आपका उपयोगकर्ता यह बताता है कि वह किस मेटवे स्टेशन में है;)

आईफोन पर भी, कभी-कभी 60 एफपीएस डिफ़ॉल्ट होता है, इसे मैन्युअल रूप से 30 एफपीएस पर थ्रॉटल करना मुश्किल से दिखाई देता है और आपको लगभग आधे से सुरक्षित करता है जीपीयू चक्रों (और इसलिए बहुत सारी बैटरी!)।

संबंधित मुद्दे