पावर स्टैटिस्टिक्स एचएएल

डिवाइस के सबसिस्टम की पावर को अक्सर लैब एनवायरमेंट में मापा और रिकॉर्ड किया जाता है स्थिर रहने वाली स्थितियों के लिए, जैसे कि जब स्क्रीन चालू हो या डिवाइस की बैटरी कुछ समय से इस्तेमाल में न हो. यह उन सबसिस्टम के लिए काम करता है जिनमें कॉन्सटैंट वैल्यू मौजूद होती है पावर ड्रॉ या ऐसी स्थितियों में हैं जिन्हें लैब के एनवायरमेंट में आसानी से मापा जा सकता है, हालाँकि, इसका इस्तेमाल कुछ मामलों में नहीं किया जा सकता. जैसे, जब किसी स्क्रीन पर वीडियो दिखाया जाता है.

IPower.hal 1.0 पास करने के लिए इंटरफ़ेस उपलब्ध कराता है पावर हिंट और सबसिस्टम स्लीप-स्टेट मेट्रिक पर कुल डेटा की रिपोर्टिंग करता है. Android 10 और उसके बाद वाले वर्शन में, आंकड़ों की कुल रिपोर्टिंग का फ़ंक्शन IPowerStats.hal पावर-स्टेट कलेक्शन एपीआई में मौजूद हो और की मदद से, डिवाइस में मौजूद ऊर्जा के इस्तेमाल का डेटा वापस पाया जा सकता है. यह IPower.hal इंटरफ़ेस के कुल आंकड़े इकट्ठा करने वाला हिस्सा, सुविधाओं के बारे में साफ़ तौर पर बताया गया है.

IPowerStats सेवा से जुड़ी रीडिंग, समय-समय पर नहीं होती हैं. ये इवेंट इस समय होते हैं खास पल, जैसे कि बैटरी 1% कम होने पर. लोग कम बार पढ़ते हैं जब बैटरी कम खर्च होती है और जब बैटरी ज़्यादा खत्म होती है, तब यह ज़्यादा बार खत्म होता है. डेटा को सर्वर पर वापस भेजा जाता है. साथ ही, इसका इस्तेमाल विश्लेषण और जांच के लिए गड़बड़ी की रिपोर्ट में किया जा सकता है. इससे ऊर्जा की खपत कम करने और उसे बढ़ाने के लिए की जा रही कोशिशों में मदद मिलती है बैटरी लाइफ़.

IPower.hal और IPowerStats.hal

IPower.hal और IPowerStats.hal, दोनों इंटरफ़ेस Android 10 पर उपलब्ध हैं, लेकिन IPower.hal आंकड़े इकट्ठा करने की सुविधा सिर्फ़ IPowerStats.hal इंटरफ़ेस से उपलब्ध है. कॉन्टेंट बनाने IPowerStats.hal फ़ंक्शन में, ऐक्सेस हासिल करने और इस्तेमाल करने के लिए एपीआई शामिल हैं इस सुविधा के साथ काम करने वाले डिवाइसों के लिए, उपयोगकर्ता के डिवाइस पर मौजूद ऊर्जा के मेज़रमेंट से इकट्ठा किया गया डेटा:

  • यह फ़ंक्शन, कम फ़्रीक्वेंसी वाले दोनों तरह के डिवाइसों के लिए, रेल लेवल पर ऊर्जा का मेज़रमेंट करता है getRailInfo और ज़्यादा फ़्रीक्वेंसी (streamEnergyData) और रिपोर्ट बूट करने के बाद से ऊर्जा इकट्ठा करती हैं.
  • यह विकल्प, काम करने वाले हर उस PowerEntity से जुड़ी जानकारी को रिपोर्ट करता है जिसके लिए डेटा उपलब्ध है. PowerEntity एक ऐसा प्लैटफ़ॉर्म सबसिस्टम, सहायक डिवाइस (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) या पावर डोमेन है जो कुल परफ़ॉर्मेंस पर असर डालता है डिवाइस-पावर की खपत.
  • पावर इकाई की स्थितियों के सेट की रिपोर्ट करता है (getPowerEntityStateInfo) इसके बाद, संबंधित इकाइयां रेज़िडेंसी डेटा उपलब्ध कराती हैं. इसके बाद, बताए गए हर PowerEntity के लिए इकट्ठा किया गया डेटा.

ये क्लाइंट IPowerStats.hal एपीआई का इस्तेमाल करते हैं:

  • हर रेल बिजली की खपत की मेट्रिक इकट्ठा करने के लिए, Statsd.
  • ऊर्जा की खपत को सीपीयू से जोड़ने के लिए, Perfetto गतिविधि.
  • Batterystats, बैटरी एट्रिब्यूशन को बेहतर बनाने के लिए वह डेटा जो पहले से तय कॉन्सटेंट से बैटरी की खपत का अनुमान लगाने के बजाय power_profile.xml. में

Android 10 और उसके बाद के वर्शन के साथ, डिवाइस बनाने वाली कंपनी इनमें से कोई एक विकल्प चुन सकती है IPower.hal और IPowerStats.hal फ़ंक्शन का इस्तेमाल करते हैं, लेकिन अगर सभी क्लाइंट को IPower.hal पर वापस आना होगा, तो IPowerStats.hal लागू नहीं किया गया है .

IPowerStats.hal लागू करने के विकल्प

Android 7 पर सिर्फ़ IPower.hal फ़ंक्शन उपलब्ध हैं Android 9 के लिए उपलब्ध है. Android 10 में अपग्रेड किए गए डिवाइसों के लिए, यह ज़रूरी है कि उसके पास हार्डवेयर पावर मॉनिटर करने वाला सबसिस्टम होता है या निगरानी करने के लिए दूसरे तरीके उपलब्ध होते हैं और शक्ति के आंकड़े रिकॉर्ड करें. कुछ SoC इकट्ठा किए जाते हैं आपके लिए बिजली के इस्तेमाल के आंकड़े देखने का ऐक्सेस मिलता है या पावर-इकाई स्टेट रेज़ीडेंसी का इस्तेमाल किया जा सकता है में मदद मिलती है. पावर-मॉनिटरिंग हार्डवेयर, सिर्फ़ इन कामों के लिए ज़रूरी है getRailInfo(), getEnergyData(), और इस सेवा का इस्तेमाल किया जा सकता है streamEnergyData().

अगर IPowerStats.hal को पावर-मॉनिटरिंग के बिना लागू किया जाता है हार्डवेयर, getRailInfo(), getEnergyData(), और streamEnergyData() वापसी NOT_SUPPORTED. इसी तरह, getPowerEntityInfo(), getPowerEntityStateInfo(), और getPowerEntityStateResidencyData()वापस भी जा सकता है अगर प्रॉडक्ट इस्तेमाल नहीं करना है, तो NOT_SUPPORTED.

रेल निगरानी करने वाले एपीआई से मिलने वाले डेटा के उदाहरणों में ये शामिल हैं

  • डिसप्ले के लिए पावर रेल ने X μW की खपत की.
  • मॉडम के लिए पावर रेल की वजह से Y μW की खपत हुई.

सबसिस्टम स्लीप-स्टेट एपीआई से मिलने वाले डेटा के उदाहरणों में ये शामिल हैं

  • मॉडम X मि॰से॰ के लिए स्लीप मोड में था.
  • Y MS के लिए, SoC बंद होने की स्थिति में था.
  • जीपीयू Z मि॰से॰ के लिए निलंबित की स्थिति में था.

हार्डवेयर पावर-मॉनिटरिंग सबसिस्टम का इस्तेमाल करें

अगर आपके डिवाइस के डिज़ाइन में हार्डवेयर पावर-मॉनिटरिंग सबसिस्टम है, तो लागू करें एक sysfs नोड बनाकर IPowerStats.hal जिससे PowerStats.hal डेटा पार्स कर सकता है या ioctl-टाइप के सिस्टम कॉल का संग्रह.

आपको अपने कर्नेल ड्राइवर को इस तरह से लागू करना चाहिए कि अक्युमिलेटर को रोका जा सके ओवरफ़्लो. इस्तेमाल किया जाने वाला एल्गोरिदम, आपके खास हार्डवेयर की पावर-मॉनिटरिंग पर निर्भर करता है सबसिस्टम डिज़ाइन, जिसमें बस का औसत वोल्टेज और तात्कालिक और औसत, दोनों तरह का वोल्टेज होना चाहिए और मौजूदा मापों को मापता है. कर्नेल ड्राइवर को यह डेटा इस तरीके से कैप्चर करना चाहिए जो एनर्जी इकट्ठा नहीं हो पाता है और उसे बनाए रखने की बूट के बाद से हर सबरेल के लिए इकट्ठा किया गया ऊर्जा डेटा, 64-बिट के रूप में होता है यह वैरिएबल हर अक्युमिलेटर से मिलने वाली एनर्जी रीडिंग के साथ बढ़ता है क्वेरी.

किसी दिए गए कॉम्पोनेंट (या वैकल्पिक रूप से, एक से ज़्यादा कॉम्पोनेंट) के आंकड़े सिंगल नोड. हालांकि, यह sysfs का पारंपरिक इस्तेमाल नहीं है (आम तौर पर, यह हर नोड को एक वैल्यू तक सीमित करता है), इससे पक्का होता है कि सारा डेटा एक जैसा.

डिज़ाइन के लिए दिशा-निर्देश

  • इस sysfs नोड का इस्तेमाल कर सकते हैं या सिस्टम कॉल कर सकते हैं.
  • पक्का करें कि साथ काम करने वाले स्टैटिस्टिक्स फ़ंक्शन, तेज़ी से बैटरी खर्च होने की संभावना:
    • ट्रैक करने के लिए ऐक्सेस पॉइंट (एपी) और/या सबसिस्टम वेकअप न बढ़ाएं स्लीप मोड में बिताया गया समय जैसे पैरामीटर.
    • समय-समय पर, ऐप्लिकेशन प्रोसेसर और फ़र्मवेयर के बीच आंकड़े ट्रांसफ़र करें ट्रैफ़िक को कम करने में मदद मिलेगी.
  • ज़रूरत पड़ने पर, सबसिस्टम नीचे दिए गए ड्राइवर फ़ंक्शन का इस्तेमाल कर सकता है:
    • थोड़ा बहुत इंतज़ार करने पर, इंतज़ार के समय/जागने से बचने के लिए, डेटा को अंदरूनी तौर पर कैश मेमोरी में सेव किया जा रहा है पुराना डेटा.
    • अपडेट किया गया उपलब्ध कराने के लिए, सबसिस्टम के निष्क्रिय होने पर एक्स्ट्रापोलेशन करना स्लीप टाइम का इस्तेमाल करके, सबसिस्टम को चालू नहीं किया जाता.

कॉम्पोनेंट, सबसिस्टम, और आंकड़े चुनें

किस कॉम्पोनेंट या सबसिस्टम से इकट्ठा करना है, यह चुनते समय IPowerStats.hal डेटा, डिवाइस पर इस्तेमाल होने वाली कोई भी चीज़ चुनें अहम मौजूदा (5 mA या उससे ज़्यादा) या जो काम करता है पावर सप्लाई के ये मोड हैं:

  • अलग-अलग SoC सबसिस्टम.
  • ऐसे सबसिस्टम जो SoC से पूरी तरह या कुछ हद तक बाहर के होते हैं. जैसे, वाई-फ़ाई, या सिक्योरिटी प्रोसेसर.
  • सहायक डिवाइस, जैसे कि ज़्यादा पावर वाली एलईडी और कैमरे.
  • ऐसे पावर डोमेन जो अलग-अलग मोड का इस्तेमाल करते हैं. जैसे, पूरे SoC के लिए पावर डोमेन.

पसंद के मुताबिक बनाएं

इस सुविधा को पसंद के मुताबिक बनाया जा सकता है. डिज़ाइन के इस्तेमाल के उदाहरण और अपने हिसाब से इनका इस्तेमाल करें:

  • तय करें कि किन रेल को मेज़र करना है और कितनी बार मेज़र करना है.
  • तय करें कि डेटा को कब पढ़ना है और उसे कैसे समझना है.
  • अपने डेटा के आधार पर तय करें कि कौनसी कार्रवाई करनी है और कब करनी है.

पुष्टि करें

वीटीएस टेस्ट से यह पक्का होता है कि Android की ज़रूरी शर्तें पूरी की गई हैं. इसमें मौजूद टिप्पणियां IPowerStats.hal का इस्तेमाल यह पुष्टि करने के लिए किया जाता है कि डिवाइस अनुपालन.

उदाहरण के लिए, अगर getRailInfo() को कॉल करने पर, कोई नतीजा नहीं मिलता, वीटीएस टेस्ट में हिस्सा नहीं ले सका, क्योंकि आपको रेल या रिटर्न स्टेटस SUCCESS. इसी तरह, अगर आपको रेल की जानकारी थी, लेकिन उसके साथ NON_SUPPORTED या FILE_SYSTEM_ERROR जवाब, यह भी कोई गड़बड़ी है. वीटीएस यह पुष्टि करता है कि HAL फ़ाइल में डिवाइस बनाने वाली कंपनी की बताई गई शर्तों का पालन किया गया है या नहीं, IPower.hal और IPowerStats.hal, टिप्पणियों में ज़रूरी शर्तों का पालन करके. अगर आप वीटीएस टेस्टिंग में इस्तेमाल की गई टिप्पणियों का उदाहरण नीचे दिया गया है:

/**
* Rail information:
* Reports information related to the rails being monitored.
*
* @return rails Information about monitored rails.
* @return status SUCCESS on success or NOT_SUPPORTED if
* feature is not enabled or FILESYSTEM_ERROR on filesystem nodes
* access error.
*/
getRailInfo()
generates(vec<e;RailInfo>e; rails, Status status);