Daya subsistem perangkat sering diukur dan dicatat di lingkungan lab untuk berbagai kondisi keadaan stabil, seperti saat layar aktif, atau perangkat dalam status daya tidak ada aktivitas. Ini berfungsi untuk subsistem dengan penggunaan daya, 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 tinggi, fungsi pelaporan statistik kumulatif
berada di IPowerStats.hal
API koleksi power-stat, 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.
Pembacaan layanan IPowerStats
tidak berkala. Terjadi pada
momen penting, seperti saat baterai menurun 1%. Lebih jarang membaca
ketika baterai lemah, dan lebih sering saat baterai tinggi. Data mungkin
dikirim kembali ke server, dan dapat digunakan dalam
laporan {i>bug<i} untuk analisis dan triase.
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
yang tersedia dari antarmuka IPowerStats.hal
. Tujuan
Fungsi IPowerStats.hal
menyertakan API yang akan diperoleh dan digunakan
data yang dikumpulkan dari pengukuran daya di perangkat untuk perangkat yang didukung:
- Melakukan pengukuran energi tingkat rel untuk frekuensi rendah
(
getRailInfo
) dan frekuensi tinggi (streamEnergyData
) klien, dan melaporkan akumulasi energi sejak {i>booting<i}. - Melaporkan informasi yang terkait dengan setiap
PowerEntity
yang didukung yang datanya tersedia.PowerEntity
adalah subsistem platform, periferal, atau domain daya yang memengaruhi total konsumsi daya perangkat. - Melaporkan kumpulan status entitas daya (
getPowerEntityStateInfo
) entitas yang telah ditentukan memberikan data residensi, kemudian melaporkan akumulasi data untuk setiapPowerEntity
yang ditentukan.
IPowerStats.hal
API digunakan oleh klien berikut:
Statsd
, untuk mengumpulkan metrik konsumsi daya per rel.Perfetto
, untuk menghubungkan konsumsi daya dengan CPU aktivitas Anda.Batterystats
, untuk meningkatkan atribusi baterai dengan pengukuran data daripada memperkirakan konsumsi baterai dari konstanta yang telah ditentukan dalampower_profile.xml.
Dengan Android 10 dan yang lebih baru, 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 perangkat
keras, atau cara lain yang tersedia untuk memantau
dan mencatat statistik daya. Beberapa SoC mengumpulkan
statistik penggunaan daya untuk Anda, atau Anda dapat mendapatkan residensi status entitas daya
informasi melalui perangkat lunak. Perangkat keras pemantauan daya
hanya diperlukan untuk
mendukung getRailInfo()
, getEnergyData()
, dan
streamEnergyData()
.
Jika Anda mengimplementasikan IPowerStats.hal
tanpa pemantauan daya
hardware, getRailInfo(), getEnergyData()
, dan
streamEnergyData()
menampilkan NOT_SUPPORTED
. Demikian pula,
getPowerEntityInfo(), getPowerEntityStateInfo()
, dan
getPowerEntityStateResidencyData()
juga dapat ditampilkan
NOT_SUPPORTED
jika tidak dimaksudkan untuk digunakan.
Contoh data yang ditampilkan oleh API pemantauan kolom samping mencakup
- Power rail untuk layar menghabiskan X μW.
- Power rail untuk modem memakai Y μW.
Contoh data yang ditampilkan oleh API status tidur subsistem antara lain
- Modem tidur selama X md.
- SoC berada dalam status penciutan daya selama Y md.
- GPU berada dalam status ditangguhkan selama Z md.
Menggunakan subsistem pemantauan daya hardware
Jika desain perangkat Anda memiliki subsistem pemantauan daya
perangkat keras, 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 akumulator tambahan. Algoritma yang digunakan bergantung pada pemantauan daya hardware Anda yang unik desain subsistem, yang harus menyediakan tegangan segera dan rata-rata bus dan pengukuran saat ini. {i>Driver<i} {i>kernel<i} harus menangkap data ini dengan cara yang tidak membersihkan akumulator energi, dan harus menjaga akumulasi data energi untuk setiap sub-rel sejak boot, dalam bentuk paket 64-bit variabel yang bertambah dengan pembacaan energi dari setiap akumulator kueri.
Statistik untuk komponen tertentu (atau secara opsional, banyak komponen) harus dalam dalam satu {i>node<i}. Meskipun ini bukan penggunaan konvensional sysfs (yang biasanya membatasi setiap {i>node<i} ke satu nilai), ini memastikan semua data konsisten.
Panduan desain
- Jaga latensi tetap rendah (1 md, maksimum) saat membaca dari sysfs atau melakukan panggilan sistem.
- Pastikan bahwa mendukung fungsi statistik tidak secara terukur meningkatkan penggunaan daya:
- Jangan tingkatkan bangun titik akses (AP) dan/atau 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:
- Meng-cache data secara internal untuk menghindari latensi/aktif dengan mengorbankan sedikit data usang.
- Melakukan ekstrapolasi saat subsistem sedang tidur, untuk memberikan informasi waktu tidur tanpa membangunkan subsistem.
Pilih komponen, subsistem, dan statistik
Ketika memilih komponen atau subsistem yang menjadi sumber data
Data IPowerStats.hal
, pilih apa saja di perangkat yang menggunakan
arus signifikan (5 mA atau lebih), atau yang mendukung
beberapa mode konsumsi daya, seperti berikut:
- Masing-masing subsistem SoC.
- Subsistem yang sebagian atau seluruhnya berada di luar SoC, seperti WiFi, prosesor gambar, atau pemroses keamanan.
- Periferal seperti LED dan kamera berdaya tinggi.
- Power domain yang menggunakan mode berbeda (seperti power domain untuk SoC secara keseluruhan).
Penyesuaian
Fitur opsional ini dapat disesuaikan. Kasus penggunaan desain dan menyesuaikan penggunaan:
- Menentukan rel mana yang akan diukur, dan seberapa sering untuk mengukurnya.
- Memutuskan kapan harus membaca data, dan bagaimana menafsirkannya.
- Tentukan tindakan apa yang harus diambil dan kapan harus melakukannya, berdasarkan data Anda.
Validasi
Pengujian VTS memastikan persyaratan Android terpenuhi. Komentar di
IPowerStats.hal
digunakan untuk memverifikasi bahwa perangkat diaktifkan
kepatuhan.
Misalnya, jika Anda memanggil getRailInfo()
dan tidak menghasilkan apa pun,
tes VTS gagal, karena Anda tidak menerima informasi tentang
kolom samping, atau status yang ditampilkan SUCCESS
. Demikian pula, jika Anda menerima
info kereta api, tetapi disertai dengan NON_SUPPORTED
atau
Respons FILE_SYSTEM_ERROR
, yang juga gagal. VTS
memverifikasi spesifikasi produsen perangkat
yang dipatuhi dalam file HAL,
menggunakan persyaratan dalam komentar
IPower.hal dan IPowerStats.hal. Channel
contoh komentar yang digunakan dalam pengujian VTS ditampilkan 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);