Misurare i valori di potenza

I produttori di dispositivi devono fornire un profilo di alimentazione dei componenti in /frameworks/base/core/res/res/xml/power_profile.xml.

Per determinare i valori per i profili di alimentazione, utilizza hardware che misuri l'energia utilizzata dal dispositivo ed esegui le varie operazioni per le quali sono necessarie informazioni. Misura il consumo energetico durante queste operazioni e calcola i valori (derivando le differenze da altri consumi energetici di base, se opportuno).

Poiché lo scopo di un profilo di consumo energetico è stimare il consumo della batteria in modo appropriato, i valori del profilo di consumo energetico sono espressi in corrente (ampere). Il framework Android moltiplica la corrente per il tempo in cui il sottosistema è stato attivo e calcola il valore mAh, che viene poi utilizzato per stimare la quantità di batteria scaricata 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 consumo energetico aggiuntivi ottenuti dai dati del chipset.

Dispositivi con CPU eterogenee

Il profilo di alimentazione per i dispositivi con core CPU di architettura eterogenea deve includere i seguenti campi aggiuntivi:

  • Numero totale di CPU per ogni cluster (espresso in cpu.clusters.cores).
  • Velocità della CPU supportate da ciascun cluster.
  • Consumo energetico attivo della CPU per ogni cluster.

Per distinguere tra il consumo di energia della CPU attiva e le velocità della CPU supportate per i cluster, aggiungi il numero del cluster al nome dell'array. I numeri del cluster vengono assegnati in base all'ordine dei core della CPU nell'albero dei dispositivi del kernel. Ad esempio, in un'architettura eterogenea con due (2) cluster con quattro (4) core:

  • cluster0 è costituito da cpu0-3
  • cluster1 è composto 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 seguente tabella descrive le impostazioni disponibili per il valore di potenza. Per visualizzare il file di esempio in AOSP, vedi power_profile.xml.

Nome Descrizione Valore di esempio Note
ambient.on Maggiore consumo di energia quando lo schermo è in modalità Sospensione/Ambient/Always On anziché spento. circa 100 mA -
screen.on Energia aggiuntiva utilizzata quando lo schermo è acceso con luminosità minima. 200 mA Include il controller touch e la retroilluminazione del display. A luminosità 0, non al minimo di Android, che tende a essere del 10 o 20%.
screen.full Consumo energetico aggiuntivo quando lo schermo è alla massima luminosità, rispetto a quando è 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 energetico dello schermo.
wifi.on Energia aggiuntiva utilizzata quando il Wi-Fi è attivo ma non riceve, trasmette o esegue scansioni. 2 mA -
wifi.active Maggiore consumo di energia durante la trasmissione o la ricezione tramite Wi-Fi. 31 mA -
wifi.scan Maggiore consumo di energia quando il Wi-Fi esegue la scansione dei 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 Utilizzo medio dell'energia da parte del sottosistema della fotocamera per una tipica app fotocamera. 600 mA Inteso come stima approssimativa per un'app che esegue un'anteprima e acquisisce circa 10 foto a risoluzione completa al minuto.
camera.flashlight Potenza media utilizzata dal modulo flash della videocamera quando è acceso. 200 mA -
gps.signalqualitybased Consumo energetico aggiuntivo del GPS in base alla potenza del segnale. Si tratta di una voce con più valori, uno per ogni intensità del segnale, dalla più debole alla più forte. 30 mA, 10 mA -
gps.on Energia aggiuntiva utilizzata quando il GPS acquisisce un segnale. 50 mA -
radio.active Potenza aggiuntiva utilizzata quando la radio cellulare trasmette/riceve. 100 mA-300 mA -
radio.scanning Potenza aggiuntiva utilizzata quando la radio cellulare esegue il paging della torre. 1,2 mA -
radio.on Maggiore consumo di energia quando il segnale cellulare è attivo. Si tratta di una voce con più valori, uno per ogni intensità del segnale (assente, debole, moderata, forte). 1,2 mA Alcune radio aumentano la potenza quando cercano una torre cellulare e non rilevano un segnale. I valori possono essere uguali o diminuire all'aumentare dell'intensità del segnale. Se fornisci un solo valore, questo viene utilizzato per tutte le intensità. Se fornisci due valori, il primo viene utilizzato per l'assenza di segnale, il secondo valore viene utilizzato per tutte le altre intensità e così via.
bluetooth.controller.idle Assorbimento di corrente medio (mA) del controller Bluetooth quando è inattivo. - Questi valori non sono stimati, ma vengono prelevati dalla scheda tecnica del controller. Se sono presenti più stati di ricezione o trasmissione, viene calcolata la media di questi stati. Inoltre, il sistema ora raccoglie dati per scansioni Bluetooth e Low Energy (LE).

Android 7.0 e versioni successive non utilizzano più i valori di alimentazione 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 medio di corrente (mA) del controller Bluetooth durante la ricezione. -
bluetooth.controller.tx Assorbimento di corrente medio (mA) del controller Bluetooth durante la trasmissione. -
bluetooth.controller.voltage Tensione operativa media (mV) del controller Bluetooth. -
modem.controller.sleep Assorbimento di corrente medio (mA) del controller del modem durante il sonno. 0 mA Questi valori non sono stimati, ma vengono presi dalla scheda tecnica del controller. Se sono presenti più stati di ricezione, viene calcolata la media di questi stati. Se sono presenti più stati di trasmissione, la specifica di un valore per ogni stato di trasmissione è supportata a partire da Android 9.
modem.controller.idle Assorbimento di corrente medio (mA) del controller del modem quando è inattivo. -
modem.controller.rx Assorbimento di corrente medio (mA) del controller del modem durante la 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, uno per ogni livello di potenza di trasmissione. 100 mA, 200 mA, 300 mA, 400 mA, 500 mA
modem.controller.voltage Tensione operativa media (mV) del controller del modem. -
wifi.controller.idle Assorbimento di corrente medio (mA) del controller Wi-Fi inattivo. - Questi valori non sono stimati, ma vengono prelevati dalla scheda tecnica del controller. Se sono presenti più stati di ricezione o trasmissione, viene calcolata la media di questi stati.
wifi.controller.rx Assorbimento di corrente medio (mA) del controller Wi-Fi durante la ricezione. -
wifi.controller.tx Assorbimento di corrente medio (mA) del controller Wi-Fi durante la trasmissione. -
wifi.controller.voltage Tensione operativa media (mV) del controller Wi-Fi. -
cpu.speeds Si tratta di una voce multivalore che elenca ogni possibile velocità della CPU in kHz. 125.000 KHz, 250.000 KHz, 500.000 KHz, 1.000.000 KHz, 1.500.000 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 il SoC) sono in stato di sospensione del sistema. 3 mA -
cpu.awake Potenza aggiuntiva utilizzata quando le CPU sono in stato di inattività di pianificazione (ciclo di inattività del kernel); il sistema non è in stato di sospensione. 50 mA La tua piattaforma potrebbe utilizzare più di uno stato di inattività con diversi livelli di consumo energetico; scegli uno stato di inattività rappresentativo per periodi più lunghi di inattività dello scheduler (diversi millisecondi). Esamina il grafico del consumo energetico sull'apparecchiatura di misurazione e scegli i campioni in cui la CPU ha il consumo più basso, scartando i campioni più alti in cui la CPU è uscita dallo stato di inattività.
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 dai rail della CPU quando funziona 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 Il 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 CPU in cluster0, la seconda voce rappresenta il numero di core CPU in 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 dati per le scansioni Low Energy (LE) e il traffico di rete Bluetooth (ad esempio RFCOMM e L2CAP) e associa queste attività all'app che le ha avviate. Le scansioni Bluetooth sono associate all'app che ha avviato la scansione, ma le scansioni batch non lo sono (e sono invece associate all'app Bluetooth). Per un'app che esegue la scansione per N millisecondi, il costo della scansione è di 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.