Cómo medir los valores de potencia

Los fabricantes de dispositivos deben proporcionar un perfil de energía de componentes en /frameworks/base/core/res/res/xml/power_profile.xml.

Para determinar los valores de los perfiles de energía, usa hardware que mida la energía que usa el dispositivo y realiza las diversas operaciones para las que se necesita información. Mide el uso de energía durante esas operaciones y calcula los valores (obteniendo las diferencias de otros usos de energía de referencia según corresponda).

Como el objetivo de un perfil de energía es estimar el agotamiento de la batería de manera adecuada, los valores del perfil de energía se indican en corriente (amperios). El framework de Android multiplica la corriente por el tiempo durante el que el subsistema estuvo activo y calcula el valor de mAh, que luego se usa para estimar la cantidad de batería que consume la app o el subsistema.

Los dispositivos con controladores de Bluetooth, módem y Wi-Fi que ejecutan Android 7.0 y versiones posteriores pueden proporcionar valores de energía adicionales obtenidos de los datos del chipset.

Dispositivos con CPUs heterogéneas

El perfil de energía para dispositivos con núcleos de CPU de arquitectura heterogénea debe incluir los siguientes campos adicionales:

  • Cantidad total de CPUs para cada clúster (expresada en cpu.clusters.cores)
  • Velocidades de CPU compatibles con cada clúster
  • Consumo de energía de CPU activa para cada clúster

Para diferenciar entre el consumo de energía de CPU activa y las velocidades de CPU compatibles con los clústeres, agrega el número de clúster al nombre del array. Los números de clúster se asignan en el orden de los núcleos de CPU en el árbol de dispositivos del kernel. Por ejemplo, en una arquitectura heterogénea que tiene dos (2) clústeres con cuatro (4) núcleos:

  • cluster0 consta de cpu0-3
  • cluster1 consta de cpu4-7

El framework de Android usa estos números de núcleos de CPU cuando lee estadísticas de los sysfs archivos en: /sys/devices/system/cpu/cpu<number>/cpufreq/stats.

Ejemplo de CPUs y velocidades de clúster:

<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>

Valores de energía

En la siguiente tabla, se describen los parámetros de configuración de valores de energía disponibles. Para ver el archivo de muestra en AOSP, consulta power_profile.xml.

Nombre Descripción Valor de ejemplo Notas
ambient.on Energía adicional que se usa cuando la pantalla está en modo ambiente, de espera o siempre activo en lugar de apagada alrededor de 100 mA -
screen.on Energía adicional que se usa cuando la pantalla está encendida con el brillo mínimo 200 mA Incluye el controlador táctil y la retroiluminación de la pantalla. Con brillo 0, no es el mínimo de Android, que suele ser del 10 o el 20%.
screen.full Energía adicional que se usa cuando la pantalla está con el brillo máximo, en comparación con la pantalla con el brillo mínimo 100 mA-300 mA Se agrega una fracción de este valor (según el brillo de la pantalla) al valor screen.on para calcular el uso de energía de la pantalla.
wifi.on Energía adicional que se usa cuando Wi-Fi está activado, pero no recibe, transmite ni analiza 2 mA -
wifi.active Energía adicional que se usa cuando se transmite o recibe a través de Wi-Fi 31 mA -
wifi.scan Energía adicional que se usa cuando Wi-Fi busca puntos de acceso 100 mA -
audio Energía adicional que se usa cuando se decodifica o codifica audio a través de DSP alrededor de 10 mA Se usa para el audio de DSP.
video Energía adicional que se usa cuando se decodifica video a través de DSP alrededor de 50 mA Se usa para el video de DSP.
camera.avg Uso promedio de energía del subsistema de la cámara para una app de cámara típica 600 mA Se pretende que sea una estimación aproximada para una app que ejecuta una vista previa y captura aproximadamente 10 imágenes de resolución completa por minuto.
camera.flashlight Energía promedio que usa el módulo de flash de la cámara cuando está encendido 200 mA -
gps.signalqualitybased Energía adicional que usa el GPS según la intensidad de la señal (esta es una entrada de varios valores, uno por intensidad de la señal, desde la más débil hasta la más fuerte) 30 mA, 10 mA -
gps.on Energía adicional que se usa cuando el GPS adquiere una señal 50 mA -
radio.active Energía adicional que se usa cuando la radio celular transmite o recibe 100 mA-300 mA -
radio.scanning Energía adicional que se usa cuando la radio celular hace una búsqueda de la torre 1.2 mA -
radio.on Energía adicional que se usa cuando la radio celular está encendida (esta es una entrada de varios valores, uno por intensidad de la señal [sin señal, débil, moderada, fuerte]). 1.2 mA Algunas radios aumentan la energía cuando buscan una torre celular y no detectan una señal. Los valores pueden ser los mismos o disminuir con el aumento de la intensidad de la señal. Si proporcionas solo un valor, se usará el mismo para todas las intensidades. Si proporcionas dos valores, el primero se usa para la ausencia de señal, el segundo para todas las demás intensidades, y así sucesivamente.
bluetooth.controller.idle Consumo de corriente promedio (mA) del controlador de Bluetooth cuando está inactivo - Estos valores no se estiman, sino que se toman de la hoja de datos de el controlador. Si hay varios estados de recepción o transmisión, se toma el promedio de esos estados. Además, el sistema ahora recopila datos para análisis de Bluetooth y de bajo consumo (LE).

Android 7.0 y versiones posteriores ya no usan los valores de energía de Bluetooth para bluetooth.active (que se usa cuando se reproduce audio a través de Bluetooth A2DP) y bluetooth.on (que se usa cuando Bluetooth está activado, pero inactivo).
bluetooth.controller.rx Consumo de corriente promedio (mA) del controlador de Bluetooth cuando recibe -
bluetooth.controller.tx Consumo de corriente promedio (mA) del controlador de Bluetooth cuando transmite -
bluetooth.controller.voltage Voltaje de funcionamiento promedio (mV) del controlador de Bluetooth -
modem.controller.sleep Consumo de corriente promedio (mA) del controlador de módem cuando está inactivo 0 mA Estos valores no se estiman, sino que se toman de la hoja de datos del controlador. Si hay varios estados de recepción, se toma el promedio de esos estados. Si hay varios estados de transmisión, se admite la especificación de un valor para cada estado de transmisión a partir de Android 9.
modem.controller.idle Consumo de corriente promedio (mA) del controlador de módem cuando está inactivo -
modem.controller.rx Consumo de corriente promedio (mA) del controlador de módem cuando recibe -
modem.controller.tx Consumo de corriente promedio (mA) del controlador de módem cuando transmite a diferentes niveles de potencia de RF (esta es una entrada de varios valores, uno por nivel de potencia de transmisión) 100 mA, 200 mA, 300 mA, 400 mA, 500 mA
modem.controller.voltage Voltaje de funcionamiento promedio (mV) del controlador de módem -
wifi.controller.idle Consumo de corriente promedio (mA) del controlador de Wi-Fi cuando está inactivo - Estos valores no se estiman, sino que se toman de la hoja de datos de el controlador. Si hay varios estados de recepción o transmisión, se toma el promedio de esos estados.
wifi.controller.rx Consumo de corriente promedio (mA) del controlador de Wi-Fi cuando recibe -
wifi.controller.tx Consumo de corriente promedio (mA) del controlador de Wi-Fi cuando transmite -
wifi.controller.voltage Voltaje de funcionamiento promedio (mV) del controlador de Wi-Fi -
cpu.speeds Esta es una entrada de varios valores que enumera cada velocidad de CPU posible en KHz. 125000 KHz, 250000 KHz, 500000 KHz, 1000000 KHz, 1500000 KHz La cantidad y el orden de las entradas deben corresponder a las entradas de mA en cpu.active.
cpu.idle Energía total que consume el sistema cuando las CPUs (y el SoC) están en estado de suspensión del sistema 3 mA -
cpu.awake Energía adicional que se usa cuando las CPUs están en estado de inactividad de programación (bucle de inactividad del kernel); el sistema no está en estado de suspensión del sistema 50 mA Es posible que tu plataforma tenga más de un estado de inactividad en uso con diferentes niveles de consumo de energía; elige un estado de inactividad representativo para períodos más largos de inactividad del programador (varios milisegundos). Examina el gráfico de energía en tu equipo de medición y elige muestras en las que la CPU tenga el consumo más bajo, descartando las muestras más altas en las que la CPU salió del estado de inactividad.
cpu.active Energía adicional que usan las CPUs cuando se ejecutan a diferentes velocidades 100 mA, 120 mA, 140 mA, 160 mA, 200 mA El valor representa la energía que usan los rieles de la CPU cuando se ejecutan a diferentes velocidades. Establece la velocidad máxima en el kernel para cada una de las velocidades permitidas y fija la CPU a esa velocidad. La cantidad y el orden de las entradas corresponden a la cantidad y el orden de las entradas en cpu.speeds.
cpu.clusters.cores Cantidad de núcleos que contiene cada clúster de CPU 4, 2 Solo es necesario para dispositivos con arquitecturas de CPU heterogéneas. La cantidad y el orden de las entradas deben coincidir con la cantidad de entradas de clúster para cpu.active y cpu.speeds. La primera entrada representa la cantidad de núcleos de CPU en cluster0, la segunda entrada representa la cantidad de núcleos de CPU en cluster1, y así sucesivamente.
battery.capacity Capacidad total de la batería en mAh 3000 mAh -

Análisis de Bluetooth y de bajo consumo (LE)

En el caso de los dispositivos que ejecutan Android 7.0, el sistema recopila datos para análisis de Bluetooth y de bajo consumo (LE) y tráfico de red de Bluetooth (como RFCOMM y L2CAP) y asocia estas actividades con la app de inicio. Los análisis de Bluetooth se asocian con la app que inició el análisis, pero los análisis por lotes no (y, en cambio, se asocian con la app de Bluetooth). En el caso de una app que analiza durante N milisegundos, el costo del análisis es de N milisegundos de tiempo de rx y N milisegundos de tiempo de tx; todo el tiempo restante del controlador se asigna al tráfico de red o a la app de Bluetooth.