माइक्रोबैंचमार्क

Jetpack Microbenchmark लाइब्रेरी से आप अपने Android नेटिव को बेंचमार्क कर सकते हैं कोड—Kotlin या Java—Android Studio से. लाइब्रेरी वार्मअप को हैंडल करती है, यह आपके कोड की परफ़ॉर्मेंस, एलोकेशन की गिनती, और आउटपुट के मानदंड को मापता है इससे Android Studio कंसोल और JSON फ़ाइल, दोनों में नतीजे मिलते हैं. जानकारी.

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

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

माइक्रोबेंचमार्क की मदद से, अन्य तरह के कोड को मेज़र करना ज़्यादा मुश्किल होता है लाइब्रेरी. बेंचमार्क लूप में चलते हैं, इसलिए ऐसा कोई भी कोड जो बार-बार नहीं चलता है या अलग तरीके से काम करता है जब कई बार कॉल करना मानदंड.

कंटिन्यूअस इंटिग्रेशन (सीआई) एनवायरमेंट में लाइब्रेरी का इस्तेमाल करने का तरीका जानने के लिए, लगातार इंटिग्रेशन में बेंचमार्क चलाएं देखें.

कैश मेमोरी को मेज़र करने से बचें

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

एक जैसे मानदंड पाना

मोबाइल डिवाइस की घड़ियों को परफ़ॉर्मेंस के लिए, डाइनैमिक रूप से हाई से बदलकर पावर बचाने के लिए या डिवाइस के गर्म हो जाने पर, कम स्थिति. ये बदलती घड़ियां बेंचमार्क की संख्या में काफ़ी अंतर होता है, इसलिए लाइब्रेरी में अलग-अलग तरीकों से को ध्यान में रखें.

घड़ियां लॉक करें (रूट किए गए डिवाइस की ज़रूरत है)

स्थिर प्रदर्शन पाने के लिए घड़ियों को लॉक करना सबसे अच्छा तरीका है. इससे यह पक्का करने में मदद मिलती है कि घड़ियां कभी भी डिवाइस को गर्म करने के लिए काफ़ी नहीं होती या अगर बेंचमार्क नहीं है, तो CPU का पूरी तरह से उपयोग कर रहा है. इसे Gradle टास्क की मदद से लागू किया जा सकता है (gradlew lockClocks) या मैन्युअल तरीके से CI में. हालांकि, यह तरीका अपनाने का सबसे अच्छा तरीक़ा है यह सुविधा ज़्यादातर डिवाइसों पर काम नहीं करती है. ऐसा इसलिए, क्योंकि रूट किए गए Android डिवाइस की ज़रूरत होती है.

लगातार बेहतर परफ़ॉर्मेंस वाला मोड

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

यह सुविधा testInstrumentationRunner सेट के ज़रिए डिफ़ॉल्ट रूप से चालू होती है का इस्तेमाल करें. अगर आपको अपनी पसंद के मुताबिक रनर रनर का इस्तेमाल करना है, तो AndroidBenchmarkRunner को सब-क्लास करें और इसका इस्तेमाल अपने testInstrumentationRunner.

यह पक्का करने के लिए कि बेंचमार्क ऐप्लिकेशन ड्राइंग के बिना फ़ोरग्राउंड में चलता हो.

प्रोग्राम अपने-आप लागू होने की सुविधा रोकी जा रही है

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

एओटी का कंपाइलेशन

जटिल माइक्रोबेंचमार्क को स्थिर होने और स्टेबलाइज़ेशन का पता लगाना बहुत मुश्किल है. एक जैसे मेज़रमेंट और तेज़ रफ़्तार के साथ बार-बार काम करने की स्पीड पर सबसे ज़्यादा ध्यान दिया जाता है. androidx.benchmark प्लगिन पूरी तरह से काम करता है आपके माइक्रोबेंचमार्क APK को डिफ़ॉल्ट रूप से कंपाइल करता है, इसके जैसा मैक्रोबेंचमार्क में CompilationMode.Full. इस व्यवहार के लिए बेंचमार्क की ज़रूरत होती है 1.3.0-beta01+, और Android Gradle प्लग इन 8.4.0+. इससे ऑप्ट आउट किया जा सकता है androidx.benchmark.forceaotcompilation=false को सेट करके आप gradle.properties फ़ाइल.

सैंपल

GitHub रिपॉज़िटरी में ये सैंपल देखें:

अन्य संसाधन

सुझाव या राय दें

मानदंड का इस्तेमाल करते समय समस्याओं की रिपोर्ट करने या सुविधा के अनुरोध सबमिट करने के लिए, देखें सार्वजनिक समस्या ट्रैकर देखें.