Daya subsistem perangkat sering diukur dan dicatat di lingkungan lab untuk berbagai kondisi steady state, seperti saat layar menyala, atau perangkat dalam status daya tidak ada aktivitas. Hal ini berfungsi untuk subsistem dengan daya draw konstanta, atau dalam kondisi yang mudah diukur di lingkungan lab, tetapi tidak untuk kasus penggunaan tertentu, seperti saat layar menampilkan video.
IPower.hal 1.0
menyediakan antarmuka untuk meneruskan
petunjuk daya dan melaporkan data kumulatif pada metrik status tidur subsistem.
Di Android 10 dan yang lebih baru, fungsi pelaporan statistik kumulatif
berada di API pengumpulan statistik daya IPowerStats.hal
, dan
menyediakan cara untuk mengambil data penggunaan energi di perangkat. Hal ini menggantikan
bagian pengumpulan statistik kumulatif dari antarmuka IPower.hal
,
untuk pemisahan fungsi yang lebih jelas.
Pengukuran layanan IPowerStats
tidak bersifat berkala. Hal ini terjadi pada
momen penting, seperti saat baterai turun 1%. Pengukuran lebih jarang
jika daya baterai rendah, dan lebih sering jika daya baterai tinggi. Data dapat
dikirim kembali ke server, dan dapat digunakan dalam laporan bug untuk analisis dan pemilihan prioritas.
Hal ini mendukung upaya berkelanjutan untuk mengurangi konsumsi daya dan meningkatkan
daya tahan baterai.
IPower.hal dan IPowerStats.hal
Antarmuka IPower.hal
dan
IPowerStats.hal
tersedia di Android 10, tetapi
fungsi pengumpulan statistik IPower.hal
hanya
tersedia dari antarmuka IPowerStats.hal
. Fungsi
IPowerStats.hal
mencakup API untuk memperoleh dan menggunakan
data yang dikumpulkan dari pengukuran daya di perangkat untuk perangkat yang didukung:
- Melakukan pengukuran energi tingkat rail untuk klien frekuensi rendah
(
getRailInfo
) dan frekuensi tinggi (streamEnergyData
), dan melaporkan akumulasi energi sejak booting. - Melaporkan informasi yang terkait dengan setiap
PowerEntity
yang didukung yang datanya tersedia.PowerEntity
adalah subsistem platform, periferal, atau domain daya yang memengaruhi total penggunaan daya perangkat. - Melaporkan kumpulan status entitas daya (
getPowerEntityStateInfo
) yang data residensinya diberikan oleh entitas yang ditentukan, lalu melaporkan data yang terakumulasi untuk setiapPowerEntity
yang ditentukan.
API IPowerStats.hal
digunakan oleh klien berikut:
Statsd
, untuk mengumpulkan metrik konsumsi daya per rel.Perfetto
, untuk mengaitkan konsumsi daya dengan aktivitas CPU.Batterystats
, untuk meningkatkan atribusi baterai dengan menggunakan data yang diukur, bukan memperkirakan konsumsi baterai dari konstanta yang telah ditentukan sebelumnya dipower_profile.xml.
Dengan Android 10 dan yang lebih tinggi, produsen perangkat dapat memilih antara
fungsi IPower.hal
dan IPowerStats.hal
, tetapi
semua klien harus kembali ke IPower.hal
jika
IPowerStats.hal
tidak diterapkan .
Opsi penerapan IPowerStats.hal
Hanya fungsi IPower.hal
yang tersedia di Android 7
hingga Android 9. Perangkat yang telah diupgrade ke Android 10 harus
memiliki subsistem pemantauan daya hardware, atau cara lain yang tersedia untuk memantau
dan mencatat statistik daya. Beberapa SoC mengumpulkan
statistik penggunaan daya untuk Anda, atau Anda dapat memperoleh informasi residensi
status entitas daya melalui software. Hardware pemantauan daya hanya diperlukan untuk
mendukung getRailInfo()
, getEnergyData()
, dan
streamEnergyData()
.
Jika Anda menerapkan IPowerStats.hal
tanpa hardware pemantauan
daya, getRailInfo(), getEnergyData()
, dan
streamEnergyData()
akan menampilkan NOT_SUPPORTED
. Demikian pula,
getPowerEntityInfo(), getPowerEntityStateInfo()
, dan
getPowerEntityStateResidencyData()
juga dapat menampilkan
NOT_SUPPORTED
jika tidak dimaksudkan untuk digunakan.
Contoh data yang ditampilkan oleh API pemantauan kereta api meliputi
- Power rail untuk layar menghabiskan X µW.
- Power rail untuk modem menghabiskan Y µW.
Contoh data yang ditampilkan oleh API status tidur subsistem mencakup
- Modem tidur selama X md.
- SoC berada dalam status penghentian daya selama Y md.
- GPU berada dalam status penangguhan selama Z md.
Menggunakan subsistem pemantauan daya hardware
Jika desain perangkat Anda memiliki subsistem pemantauan daya hardware, terapkan
IPowerStats.hal
dengan membuat satu node sysfs
tempat PowerStats.hal
dapat mengurai data, atau dengan membuat
kumpulan panggilan sistem jenis ioctl.
Anda harus mengimplementasikan driver kernel dengan cara yang mencegah kelebihan accumulator. Algoritma yang digunakan bergantung pada desain subsistem pemantauan daya hardware unik Anda, yang harus memberikan pengukuran voltase bus dan arus seketika dan rata-rata. Driver kernel harus mengambil data ini dengan cara yang tidak menghapus akumulator energi, dan harus mempertahankan data energi yang terakumulasi untuk setiap sub-jalur sejak booting, dalam bentuk variabel 64-bit yang bertambah dengan pembacaan energi dari setiap kueri akumulator.
Statistik untuk komponen tertentu (atau secara opsional, beberapa komponen) harus berada di satu node. Meskipun ini bukan penggunaan konvensional sysfs (yang biasanya membatasi setiap node ke satu nilai), hal ini memastikan semua data konsisten.
Panduan desain
- Pertahankan latensi tetap rendah (maksimum 1 msec) saat membaca dari node sysfs atau melakukan panggilan sistem.
- Pastikan fungsi statistik pendukung tidak meningkatkan konsumsi daya secara terukur:
- Jangan meningkatkan titik akses (AP) dan/atau pengaktifan subsistem untuk melacak parameter seperti waktu yang dihabiskan dalam mode tidur.
- Mentransfer statistik antara prosesor aplikasi dan firmware secara oportunistik dengan traffic lain jika memungkinkan.
- Jika perlu, subsistem dapat menggunakan fungsi driver berikut:
- Menyimpan data dalam cache secara internal untuk menghindari latensi/panggilan bangun dengan mengorbankan data yang sedikit usang.
- Melakukan ekstrapolasi saat subsistem tidur, untuk memberikan waktu tidur yang diperbarui tanpa membangunkan subsistem.
Memilih komponen, subsistem, dan statistik
Saat memilih komponen atau subsistem yang akan digunakan untuk mengumpulkan
data IPowerStats.hal
, pilih apa pun di perangkat yang menggunakan
arus yang signifikan (5 mA atau lebih), atau yang mendukung
beberapa mode konsumsi daya, seperti berikut:
- Setiap subsistem SoC.
- Subsistem sebagian atau seluruhnya berada di luar SoC, seperti WiFi, pemroses gambar, atau pemroses keamanan.
- Periferal seperti LED dan kamera berkekuatan tinggi.
- Domain daya yang menggunakan mode yang berbeda (seperti domain daya untuk SoC secara keseluruhan).
Penyesuaian
Fitur opsional ini dapat disesuaikan. Desain kasus penggunaan dan sesuaikan penggunaan Anda:
- Tentukan kolom mana yang akan diukur, dan seberapa sering kolom tersebut diukur.
- Tentukan kapan harus membaca data, dan cara menafsirkannya.
- Tentukan tindakan yang akan diambil dan kapan harus diambil, berdasarkan data Anda.
Validasi
Pengujian VTS memastikan persyaratan Android terpenuhi. Komentar di
IPowerStats.hal
digunakan untuk memverifikasi bahwa perangkat mematuhi
peraturan.
Misalnya, jika Anda memanggil getRailInfo()
dan tidak menampilkan apa pun,
pengujian VTS akan gagal, karena Anda tidak menerima informasi tentang rail
yang dipantau, atau status SUCCESS
yang ditampilkan. Demikian pula, jika Anda menerima
info kereta api, tetapi disertai dengan respons NON_SUPPORTED
atau
FILE_SYSTEM_ERROR
, hal itu juga merupakan kegagalan. VTS
memverifikasi bahwa spesifikasi produsen perangkat dipatuhi dalam file HAL,
menggunakan persyaratan dalam komentar IPower.hal dan IPowerStats.hal. Contoh
komentar yang digunakan dalam pengujian VTS ditunjukkan di bawah ini:
/** * 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);