โดยทั่วไป ระบบย่อยของอุปกรณ์จะได้รับการตรวจวัดและบันทึกในสภาพแวดล้อมห้องทดลองสำหรับสถานะต่างๆ ในสภาวะคงที่ เช่น เมื่อหน้าจอเปิดอยู่ หรืออุปกรณ์อยู่ในสถานะพลังงานสแตนด์บาย วิธีการนี้ใช้ได้กับระบบย่อยที่มีการดึงพลังงานคงที่ หรือภายใต้เงื่อนไขที่วัดได้ง่ายในสภาพแวดล้อมห้องทดลอง แต่ใช้ไม่ได้กับบางกรณีการใช้งาน เช่น เมื่อหน้าจอแสดงวิดีโอ
IPower.hal 1.0
มีอินเทอร์เฟซสำหรับการส่ง
คำแนะนำด้านพลังงานและการรายงานข้อมูลสะสมเกี่ยวกับเมตริกสถานะสลีปของระบบย่อย
ใน Android 10 ขึ้นไป ฟังก์ชันการรายงานสถิติแบบสะสมจะอยู่ใน IPowerStats.hal
Power-Stat Collection API และให้บริการดึงข้อมูลการใช้พลังงานในอุปกรณ์ การดำเนินการนี้จะแทนที่ส่วนการเก็บรวบรวมสถิติสะสมของอินเทอร์เฟซ IPower.hal
เพื่อแยกฟังก์ชันการทำงานให้ชัดเจนยิ่งขึ้น
การอ่านค่าบริการ IPowerStats
จะไม่เป็นแบบเป็นรอบ ซึ่งจะเกิดขึ้นในช่วงเวลาสำคัญ เช่น เมื่อแบตเตอรี่เหลือ 1% การอ่านค่าจะมีความถี่น้อยลงเมื่อแบตเตอรี่เหลือน้อย และมีความถี่มากขึ้นเมื่อแบตเตอรี่เหลือมาก ระบบอาจส่งข้อมูลกลับไปยังเซิร์ฟเวอร์ และอาจนำไปใช้ในรายงานข้อบกพร่องเพื่อการวิเคราะห์และการจัดประเภท
ซึ่งสอดคล้องกับความพยายามอย่างต่อเนื่องในการลดการใช้พลังงานและยืดอายุการใช้งานแบตเตอรี่
IPower.hal และ IPowerStats.hal
ทั้งอินเทอร์เฟซ IPower.hal
และ
IPowerStats.hal
พร้อมใช้งานใน Android 10 แต่ฟังก์ชันการเก็บรวบรวมสถิติ IPower.hal
จะใช้งานได้จากอินเทอร์เฟซ IPowerStats.hal
เท่านั้น ฟังก์ชันการทำงานIPowerStats.hal
ประกอบด้วย API ในการรับและใช้ข้อมูลที่รวบรวมจากการวัดพลังงานในอุปกรณ์สำหรับอุปกรณ์ที่รองรับ
- ทำการวัดพลังงานระดับรางสำหรับทั้งไคลเอ็นต์ความถี่ต่ำ (
getRailInfo
) และไคลเอ็นต์ความถี่สูง (streamEnergyData
) และรายงานพลังงานสะสมนับตั้งแต่การบูต - รายงานข้อมูลที่เกี่ยวข้องกับ
PowerEntity
แต่ละรายการที่รองรับซึ่งมีข้อมูลPowerEntity
คือระบบย่อยของแพลตฟอร์ม อุปกรณ์ต่อพ่วง หรือโดเมนพลังงานที่ส่งผลต่อการใช้พลังงานทั้งหมดของอุปกรณ์ - รายงานชุดสถานะเอนทิตีพลังงาน (
getPowerEntityStateInfo
) ที่เอนทิตีที่ระบุให้ข้อมูลที่อยู่อาศัย จากนั้นรายงานข้อมูลที่รวบรวมไว้สำหรับPowerEntity
ที่ระบุแต่ละรายการ
ไคลเอ็นต์ต่อไปนี้ใช้ IPowerStats.hal
API
Statsd
เพื่อรวบรวมเมตริกการใช้พลังงานต่อรางPerfetto
เพื่อเชื่อมโยงปริมาณการใช้พลังงานกับกิจกรรมของ CPUBatterystats
เพื่อปรับปรุงการระบุแหล่งที่มาของแบตเตอรี่โดยใช้ข้อมูลที่วัดได้แทนการประมาณปริมาณการใช้แบตเตอรี่จากค่าคงที่ที่กําหนดไว้ล่วงหน้าในpower_profile.xml.
ใน Android 10 ขึ้นไป ผู้ผลิตอุปกรณ์อาจเลือกระหว่างฟังก์ชัน IPower.hal
กับ IPowerStats.hal
แต่ไคลเอ็นต์ทั้งหมดต้องใช้ IPower.hal
เป็นทางเลือกสำรองหากไม่มีการใช้งาน IPowerStats.hal
ตัวเลือกการติดตั้งใช้งาน IPowerStats.hal
เฉพาะฟังก์ชัน IPower.hal
เท่านั้นที่ใช้ได้บน Android 7 ไปจนถึง Android 9 อุปกรณ์ที่อัปเกรดเป็น Android 10 ต้องมีระบบย่อยในการตรวจสอบพลังงานของฮาร์ดแวร์ หรือวิธีอื่นๆ ที่พร้อมตรวจสอบและบันทึกสถิติการใช้พลังงาน SoC บางรุ่นจะรวบรวมสถิติการใช้พลังงานให้คุณ หรือคุณอาจดูข้อมูลสถานะที่อยู่ของเอนทิตีโฟลว์พลังงานผ่านซอฟต์แวร์ ฮาร์ดแวร์ตรวจสอบพลังงานจําเป็นต่อการสนับสนุน getRailInfo()
, getEnergyData()
และ streamEnergyData()
เท่านั้น
หากคุณติดตั้ง IPowerStats.hal
โดยไม่ได้ใช้ฮาร์ดแวร์ตรวจสอบพลังงาน getRailInfo(), getEnergyData()
และ streamEnergyData()
จะแสดงผลเป็น NOT_SUPPORTED
ในทํานองเดียวกัน getPowerEntityInfo(), getPowerEntityStateInfo()
และgetPowerEntityStateResidencyData()
อาจแสดงNOT_SUPPORTED
ด้วยหากไม่ได้มีไว้เพื่อใช้งาน
ตัวอย่างข้อมูลที่ API การตรวจสอบทางรถไฟแสดงผล ได้แก่
- รางจ่ายไฟสำหรับจอแสดงผลใช้พลังงาน X µW
- รางไฟของโมเด็มใช้พลังงาน Y µW
ตัวอย่างข้อมูลที่ API สถานะสลีปของซับระบบแสดงผล ได้แก่
- โมเด็มอยู่ในโหมดสลีปเป็นเวลา X มิลลิวินาที
- SoC อยู่ในสถานะพลังงานหมดเป็นเวลา Y ms
- GPU อยู่ในสถานะ "หยุดชั่วคราว" เป็นเวลา Z มิลลิวินาที
ใช้ระบบย่อยในการตรวจสอบพลังงานของฮาร์ดแวร์
หากการออกแบบอุปกรณ์มีระบบย่อยในการตรวจสอบพลังงานของฮาร์ดแวร์ ให้ติดตั้งใช้งานIPowerStats.hal
โดยสร้างโหนด sysfs รายการเดียวPowerStats.hal
จะแยกวิเคราะห์ข้อมูลได้ หรือสร้างคอลเล็กชันการเรียกใช้ระบบประเภท ioctl
คุณต้องติดตั้งใช้งานไดรเวอร์เคอร์เนลในลักษณะที่ป้องกันไม่ให้ตัวสะสมข้อมูลรับค่าเกิน อัลกอริทึมที่ใช้ในการวัดขึ้นอยู่กับการออกแบบระบบย่อยในการตรวจสอบพลังงานของฮาร์ดแวร์ที่ไม่ซ้ำกัน ซึ่งต้องระบุทั้งการวัดแรงดันไฟฟ้าและกระแสไฟฟ้าของบัสแบบทันทีและแบบเฉลี่ย โปรแกรมควบคุมเคอร์เนลต้องบันทึกข้อมูลนี้ในลักษณะที่ไม่ล้างตัวสะสมพลังงาน และต้องเก็บรักษาข้อมูลพลังงานที่สะสมไว้สำหรับรางย่อยแต่ละรางนับตั้งแต่การบูตในรูปแบบตัวแปร 64 บิตที่เพิ่มขึ้นตามค่าที่อ่านได้จากคําค้นหาตัวสะสมพลังงานแต่ละรายการ
สถิติของคอมโพเนนต์หนึ่งๆ (หรือหลายคอมโพเนนต์ตามต้องการ) จะต้องอยู่ในโหนดเดียว แม้ว่านี่ไม่ใช่การใช้งาน sysfs แบบดั้งเดิม (ซึ่งปกติจะจำกัดแต่ละโหนดให้มีเพียงค่าเดียว) แต่วิธีนี้ช่วยให้ข้อมูลทั้งหมดสอดคล้องกัน
คำแนะนำเกี่ยวกับการออกแบบ
- รักษาเวลาในการตอบสนองให้ต่ำ (สูงสุด 1 มิลลิวินาที) เมื่ออ่านจากโหนด sysfs หรือทำการเรียกใช้ระบบ
- ตรวจสอบว่าฟังก์ชันการทำงานด้านสถิติที่รองรับไม่ได้ทำให้แบตเตอรี่หมดเร็วขึ้นอย่างเห็นได้ชัด
- อย่าเพิ่มการตื่นขึ้นของจุดเข้าใช้งาน (AP) และ/หรือระบบย่อยเพื่อติดตามพารามิเตอร์ เช่น เวลาที่ใช้ในโหมดสลีป
- โอนสถิติระหว่างโปรเซสเซอร์ของแอปกับเฟิร์มแวร์เมื่อมีโอกาส กับการรับส่งข้อมูลอื่นๆ เมื่อเป็นไปได้
- หากจําเป็น ระบบย่อยอาจใช้ฟังก์ชันไดรเวอร์ต่อไปนี้
- แคชข้อมูลภายในเพื่อหลีกเลี่ยงเวลาในการตอบสนอง/การตื่นขึ้น แต่ข้อมูลจะล้าสมัยเล็กน้อย
- ทำการประมาณเมื่อระบบย่อยอยู่ในโหมดสลีป เพื่อแสดงเวลาสลีปที่อัปเดตโดยไม่ต้องปลุกระบบย่อย
เลือกคอมโพเนนต์ ระบบย่อย และสถิติ
เมื่อเลือกคอมโพเนนต์หรือระบบย่อยที่จะรวบรวมIPowerStats.hal
ข้อมูล ให้เลือกทุกอย่างในอุปกรณ์ที่ใช้กระแสไฟฟ้าอย่างมีนัยสำคัญ (5 mA ขึ้นไป) หรือรองรับโหมดการใช้พลังงานหลายโหมด เช่น ต่อไปนี้
- ระบบย่อย SoC แต่ละระบบ
- ระบบย่อยที่อยู่นอก SoC บางส่วนหรือทั้งหมด เช่น Wi-Fi, หน่วยประมวลผลภาพ หรือหน่วยประมวลผลความปลอดภัย
- อุปกรณ์ต่อพ่วง เช่น LED กำลังสูงและกล้อง
- โดเมนพลังงานที่ใช้โหมดต่างๆ (เช่น โดเมนพลังงานสำหรับ SoC โดยรวม)
การปรับแต่ง
ฟีเจอร์ที่ไม่บังคับนี้ปรับแต่งได้ ออกแบบกรณีการใช้งานและปรับแต่งการใช้งาน
- เลือกรางที่จะวัดและความถี่ในการวัด
- ตัดสินใจว่าจะอ่านข้อมูลเมื่อใดและวิธีตีความข้อมูล
- ตัดสินใจว่าควรดำเนินการใดและดำเนินการเมื่อใด โดยอิงตามข้อมูลของคุณ
การตรวจสอบความถูกต้อง
การทดสอบ VTS ช่วยให้มั่นใจว่าเป็นไปตามข้อกำหนดของ Android ความคิดเห็นใน IPowerStats.hal
ใช้เพื่อยืนยันว่าอุปกรณ์เป็นไปตามข้อกำหนด
ตัวอย่างเช่น หากคุณเรียกใช้ getRailInfo()
และระบบไม่แสดงผลใดๆ การทดสอบ VTS จะล้มเหลวเนื่องจากคุณไม่ได้รับข้อมูลเกี่ยวกับรางที่ตรวจสอบหรือสถานะ SUCCESS
ในทํานองเดียวกัน หากคุณได้รับข้อมูลทางรถไฟ แต่มีการตอบกลับ NON_SUPPORTED
หรือ FILE_SYSTEM_ERROR
แสดงว่าไม่สําเร็จเช่นกัน VTS จะตรวจสอบว่าไฟล์ HAL เป็นไปตามข้อกำหนดของผู้ผลิตอุปกรณ์หรือไม่ โดยใช้ข้อกำหนดในความคิดเห็น IPower.hal และ IPowerStats.hal ตัวอย่างความคิดเห็นที่ใช้ในการทดสอบ VTS แสดงอยู่ด้านล่าง
/** * 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);