I produttori di dispositivi devono fornire un profilo di potenza del componente in
/frameworks/base/core/res/res/xml/power_profile.xml
.
Per determinare i valori per i profili di potenza, utilizza hardware che misura la potenza impiegata dal dispositivo ed esegui le varie operazioni per le quali sono necessarie informazioni. Misura il consumo di energia durante queste operazioni e calcola i valori (derivando le differenze da altri consumi di energia di riferimento, se opportuno).
Poiché lo scopo di un profilo di potenza è stimare in modo appropriato il consumo della batteria, i valori del profilo di potenza sono indicati in corrente (ampère). Il framework Android moltiplica la corrente per il tempo per cui il sottosistema è stato attivo e calcola il valore in mAh, che viene poi utilizzato per stimare la quantità di batteria aspirata dall'app o dal sottosistema.
I dispositivi con controller Bluetooth, modem e Wi-Fi con Android 7.0 e versioni successive possono fornire valori di potenza aggiuntivi ottenuti dai dati del chipset.
Dispositivi con CPU eterogenee
Il profilo di alimentazione per i dispositivi con core della CPU di architettura eterogenea deve includere i seguenti campi aggiuntivi:
- Numero di CPU totali per ogni cluster (espresso in cpu.clusters.cores).
- Velocità della CPU supportate da ciascun cluster.
- Consumo di energia della CPU attiva per ogni cluster.
Per distinguere il consumo energetico della CPU attiva dalle velocità supportate della CPU per i cluster, aggiungi il numero del cluster al nome dell'array. I numeri dei cluster vengono assegnati nell'ordine dei core della CPU nell'albero del dispositivo del kernel. Per esempio, in un'architettura eterogenea con due (2) cluster con quattro (4) core:
- cluster0 è costituito da cpu0-3
- cluster1 è costituito da cpu4-7
Il framework Android utilizza questi numeri di core della CPU quando legge le statistiche
dai file sysfs
in:
/sys/devices/system/cpu/cpu<number>/cpufreq/stats
.
Esempio di CPU e velocità del cluster:
<array name="cpu.active.cluster0"> <value>200</value> <value>300</value> <value>400</value> </array> <array name="cpu.speeds.cluster0"> <value>600000</value> <value>800000</value> <value>1200000</value> </array> <array name="cpu.active.cluster1"> <value>400</value> <value>500</value> <value>600</value> </array> <array name="cpu.speeds.cluster1"> <value>800000</value> <value>1200000</value> <value>1400000</value> </array>
Valori di potenza
La tabella seguente descrive le impostazioni del valore della potenza disponibili. Per visualizzare il file di esempio in AOSP, consulta power_profile.xml.
Nome | Descrizione | Valore di esempio | Note |
---|---|---|---|
ambient.on | Potenza aggiuntiva utilizzata quando lo schermo è in modalità sospensione/Ambient/sempre attivo anziché spento. | circa 100 mA | - |
screen.on | Potenza aggiuntiva utilizzata quando lo schermo è acceso con luminosità minima. | 200 mA | Sono inclusi il controller touch e la retroilluminazione del display. A luminosità 0, non al valore minimo di Android, che tende a essere del 10 o 20%. |
screen.full | Potenza aggiuntiva utilizzata quando lo schermo è alla luminosità massima, rispetto allo schermo alla luminosità minima. | 100 mA-300 mA | Una frazione di questo valore (in base alla luminosità dello schermo) viene aggiunta al valore screen.on per calcolare il consumo di energia dello schermo. |
wifi.on | Potenza aggiuntiva utilizzata quando il Wi-Fi è attivo, ma non riceve, trasmette o esegue la scansione. | 2 mA | - |
wifi.active | Potenza aggiuntiva utilizzata durante l'invio o la ricezione tramite Wi-Fi. | 31 mA | - |
wifi.scan | Potenza aggiuntiva utilizzata quando il Wi-Fi è in fase di ricerca di punti di accesso. | 100 mA | - |
audio | Potenza aggiuntiva utilizzata durante la decodifica/codifica audio tramite DSP. | circa 10 mA | Utilizzato per l'audio DSP. |
video | Potenza aggiuntiva utilizzata durante la decodifica video tramite DSP. | circa 50 mA | Utilizzato per i video DSP. |
camera.avg | Consumo medio di energia del sottosistema della fotocamera per una tipica app per fotocamere. | 600 mA | Si tratta di una stima approssimativa per un'app che esegue un'anteprima e acquisisce circa 10 foto a piena risoluzione al minuto. |
camera.flashlight | Potenza media utilizzata dal modulo del flash della fotocamera quando è attivo. | 200 mA | - |
gps.signalqualitybased | Potenza aggiuntiva utilizzata dal GPS in base all'intensità del segnale. Si tratta di una voce con più valori, uno per intensità del segnale, dal più debole al più forte. | 30 mA, 10 mA | - |
gps.on | Potenza aggiuntiva utilizzata quando il GPS acquisisce un segnale. | 50 mA | - |
radio.active | Potenza aggiuntiva utilizzata quando il segnale cellulare è in trasmissione/ricezione. | 100 mA-300 mA | - |
radio.scanning | Potenza aggiuntiva utilizzata quando la radio cellulare cerca la torre. | 1,2 mA | - |
radio.on | Potenza aggiuntiva utilizzata quando il segnale cellulare è attivo. Si tratta di una voce con più valori, una per intensità del segnale (nessun segnale, debole, moderata, forte). | 1,2 mA | Alcune radio aumentano la potenza quando cercano una torre di telefonia mobile e non rilevano un segnale. I valori possono essere uguali o diminuire con l'aumento dell'intensità del segnale. Se fornisci un solo valore, verrà utilizzato lo stesso valore per tutti i punti di forza. Se fornisci due valori, il primo viene utilizzato per l'assenza di segnale, il secondo per tutte le altre intensità e così via. |
bluetooth.controller.idle | Assorbimento di corrente medio (mA) del controller Bluetooth in stato di inattività. | - | Questi valori non sono stimati, ma sono stati ricavati dalla scheda tecnica del controller. Se sono presenti più stati di ricezione o trasmissione, viene presa la media di questi stati. Inoltre, ora il sistema raccoglie i dati relativi alle scansioni Bluetooth e Low Energy (LE). Android 7.0 e versioni successive non utilizzano più i valori di potenza Bluetooth per bluetooth.active (utilizzato durante la riproduzione audio tramite Bluetooth A2DP) e bluetooth.on (utilizzato quando il Bluetooth è attivo, ma inattivo). |
bluetooth.controller.rx | Assorbimento di corrente medio (mA) del controller Bluetooth in ricezione. | - | |
bluetooth.controller.tx | Assorbimento di corrente medio (mA) del controller Bluetooth durante la trasmissione. | - | |
bluetooth.controller.voltage | Tensione di esercizio media (mV) del controller Bluetooth. | - | |
modem.controller.sleep | Assorbimento di corrente medio (mA) del controller del modem in modalità di sospensione. | 0 mA | Questi valori non sono stimati, ma sono stati ricavati dalla scheda tecnica del controller. Se sono presenti più stati di ricezione, viene presa la media di questi stati. Se sono presenti più stati di trasmissione, è supportata la specifica di un valore per ogni stato di trasmissione a partire da Android 9. |
modem.controller.idle | Assorbimento di corrente medio (mA) del controller del modem in stato inattivo. | - | |
modem.controller.rx | Assorbimento di corrente medio (mA) del controller del modem in ricezione. | - | |
modem.controller.tx | Assorbimento di corrente medio (mA) del controller del modem durante la trasmissione a diversi livelli di potenza RF. Si tratta di una voce con più valori, con un valore per ogni livello di potenza di trasmissione. | 100 mA, 200 mA, 300 mA, 400 mA, 500 mA | |
modem.controller.voltage | Tensione di esercizio media (mV) del controller del modem. | - | |
wifi.controller.idle | Assorbimento di corrente medio (mA) del controller Wi-Fi in stato inattivo. | - | Questi valori non sono stimati, ma sono stati ricavati dalla scheda tecnica del controller. Se sono presenti più stati di ricezione o trasmissione, viene presa la media di questi stati. |
wifi.controller.rx | Assorbimento di corrente medio (mA) del controller Wi-Fi in ricezione. | - | |
wifi.controller.tx | Assorbimento di corrente medio (mA) del controller Wi-Fi durante la trasmissione. | - | |
wifi.controller.voltage | Tensione di esercizio media (mV) del controller Wi-Fi. | - | |
cpu.speeds | Si tratta di una voce con più valori che elenca ogni possibile velocità della CPU in KHz. | 125000 KHz, 250000 KHz, 500000 KHz, 1000000 KHz, 1500000 KHz | Il numero e l'ordine delle voci devono corrispondere alle voci mA in cpu.active. |
cpu.idle | Potenza totale assorbita dal sistema quando le CPU (e l'SoC) sono in stato di sospensione. | 3 mA | - |
cpu.awake | Potenza aggiuntiva utilizzata quando le CPU sono in stato di inattività della pianificazione (loop di inattività del kernel); il sistema non è in stato di sospensione. | 50 mA | La tua piattaforma potrebbe avere più stati inattivi in uso con diversi livelli di consumo energetico. Scegli uno stato inattivo rappresentativo per periodi più lunghi di inattività del programma (diversi millisecondi). Esamina il grafico della potenza sulla tua attrezzatura di misurazione e scegli i campioni in cui la CPU ha il consumo minimo, ignorando i campioni più elevati in cui la CPU è uscita dallo stato inattivo. |
cpu.active | Potenza aggiuntiva utilizzata dalle CPU quando funzionano a velocità diverse. | 100 mA, 120 mA, 140 mA, 160 mA, 200 mA | Il valore rappresenta la potenza utilizzata dalle linee di CPU quando vengono eseguite a velocità diverse. Imposta la velocità massima nel kernel su ciascuna delle velocità consentite e blocca la CPU a quella velocità. Il numero e l'ordine delle voci corrispondono al numero e all'ordine delle voci in cpu.speeds. |
cpu.clusters.cores | Numero di core contenuti in ogni cluster di CPU. | 4, 2 | Obbligatorio solo per i dispositivi con architetture CPU eterogenee. Il numero di voci e l'ordine devono corrispondere al numero di voci del cluster per cpu.active e cpu.speeds. La prima voce rappresenta il numero di core della CPU nel cluster0, la seconda voce rappresenta il numero di core della CPU nel cluster1 e così via. |
battery.capacity | Capacità totale della batteria in mAh. | 3000 mAh | - |
Scansioni Bluetooth e Low Energy (LE)
Per i dispositivi con Android 7.0, il sistema raccoglie i dati relativi alle scansioni Low Energy (LE) e al traffico di rete Bluetooth (ad esempio RFCOMM e L2CAP) e associa queste attività all'app di invio. Le scansioni Bluetooth sono associate all'app che ha avviato la scansione, ma non alle scansioni collettive (che sono invece associate all'app Bluetooth). Per un'app che esegue la scansione per N millisecondi, il costo della scansione è pari a N millisecondi di tempo di ricezione e N millisecondi di tempo di trasmissione. Tutto il tempo rimanente del controller viene assegnato al traffico di rete o all'app Bluetooth.