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

Dado que el objetivo de un perfil de energía es estimar el agotamiento de la batería de forma 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 consumió 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 potencia 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 CPU para cada clúster (se expresa en cpu.clusters.cores).
  • Velocidades de CPU admitidas por cada clúster.
  • Consumo de energía de CPU activa para cada clúster.

Para diferenciar entre el consumo de energía de la CPU activa y las velocidades de CPU admitidas para 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 archivos sysfs en /sys/devices/system/cpu/cpu<number>/cpufreq/stats.

Ejemplo de CPU y velocidades del 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 potencia

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

Name Descripción Valor de ejemplo Notas
ambient.on Energía adicional que se usa cuando la pantalla está en modo Doze, ambiente o siempre encendida en lugar de apagada. alrededor de 100 mA -
screen.on Potencia adicional que se usa cuando la pantalla está encendida con el brillo mínimo. 200 mA Incluye el control táctil y la luz de fondo de la pantalla. Con un brillo de 0, no el mínimo de Android, que suele ser del 10 o el 20%.
screen.full Potencia adicional que se usa cuando la pantalla está con el brillo máximo, en comparación con cuando está con el brillo mínimo. 100 mA a 300 mA Una fracción de este valor (según el brillo de la pantalla) se agrega al valor de screen.on para calcular el consumo de energía de la pantalla.
wifi.on Energía adicional que se usa cuando el Wi-Fi está activado, pero no recibe, transmite ni explora. 2 mA -
wifi.active Se usa energía adicional cuando se transmite o recibe contenido a través de Wi-Fi. 31 mA -
wifi.scan Se usa energía adicional cuando el Wi-Fi busca puntos de acceso. 100 mA -
Audio Potencia adicional que se usa cuando se decodifica o codifica audio a través del DSP. alrededor de 10 mA Se usa para el audio del DSP.
video Potencia adicional que se usa cuando se decodifica video a través del DSP. alrededor de 50 mA Se usa para videos de DSP.
camera.avg Uso de energía promedio del subsistema de la cámara para una app de cámara típica. 600 mA Se prevé que sea una estimación aproximada para una app que ejecuta una vista previa y captura aproximadamente 10 fotos en resolución completa por minuto.
camera.flashlight Es la potencia promedio que usa el módulo del flash de la cámara cuando está encendido. 200 mA -
gps.signalqualitybased Potencia 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 Potencia adicional que se usa cuando el GPS adquiere una señal. 50 mA -
radio.active Potencia adicional que se usa cuando la radio celular transmite o recibe datos. 100 mA a 300 mA -
radio.scanning Se usa energía adicional cuando la radio celular está llamando a la torre. 1.2 mA -
radio.on Potencia adicional que se usa cuando la radio celular está encendida. Esta es una entrada de varios valores, uno por cada intensidad de la señal (sin señal, débil, moderada, fuerte). 1.2 mA Algunas radios aumentan la potencia cuando buscan una torre celular y no detectan señal. Los valores pueden ser iguales o disminuir a medida que aumenta la intensidad de la señal. Si proporcionas solo un valor, se usará el mismo valor 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 Es el consumo de corriente promedio (mA) del controlador Bluetooth cuando está inactivo. - Estos valores no son estimados, sino que se toman de la hoja de datos del 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 los análisis de bajo consumo (LE) y Bluetooth.

Android 7.0 y versiones posteriores ya no usan los valores de energía de Bluetooth para bluetooth.active (se usa cuando se reproduce audio a través de Bluetooth A2DP) y bluetooth.on (se usa cuando Bluetooth está activado, pero inactivo).
bluetooth.controller.rx Consumo de corriente promedio (mA) del controlador Bluetooth durante la recepción. -
bluetooth.controller.tx Es el consumo de corriente promedio (mA) del controlador Bluetooth durante la transmisión. -
bluetooth.controller.voltage Es el voltaje de funcionamiento promedio (mV) del control Bluetooth. -
modem.controller.sleep Es el consumo de corriente promedio (mA) del controlador del módem cuando está en suspensión. 0 mA Estos valores no son estimados, 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 Es el consumo de corriente promedio (mA) del controlador del módem cuando está inactivo. -
modem.controller.rx Es el consumo de corriente promedio (mA) del controlador del módem durante la recepción. -
modem.controller.tx Consumo de corriente promedio (mA) del controlador del módem cuando transmite a diferentes niveles de potencia de RF. Esta es una entrada de varios valores con un valor por nivel de potencia de transmisión. 100 mA, 200 mA, 300 mA, 400 mA, 500 mA
modem.controller.voltage Es el voltaje de funcionamiento promedio (mV) del controlador del módem. -
wifi.controller.idle Es el consumo de corriente promedio (mA) del controlador de Wi-Fi cuando está inactivo. - Estos valores no son estimados, sino que se toman de la hoja de datos del controlador. Si hay varios estados de recepción o transmisión, se toma el promedio de esos estados.
wifi.controller.rx Es el consumo de corriente promedio (mA) del controlador de Wi-Fi durante la recepción. -
wifi.controller.tx Es el consumo de corriente promedio (mA) del controlador de Wi-Fi durante la transmisión. -
wifi.controller.voltage Es el 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. 125,000 KHz, 250,000 KHz, 500,000 KHz, 1,000,000 KHz, 1,500,000 KHz La cantidad y el orden de las entradas deben corresponder a las entradas de mA en cpu.active.
cpu.idle Potencia total que consume el sistema cuando las CPUs (y el SoC) están en estado de suspensión del sistema. 3 mA -
cpu.awake Potencia 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. Descarta las muestras más altas en las que la CPU salió del modo de inactividad.
cpu.active Es la energía adicional que usan las CPU 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 en cada una de las velocidades permitidas y fija la CPU en 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 se requiere para dispositivos con arquitecturas de CPU heterogéneas. La cantidad de entradas y el orden deben coincidir con la cantidad de entradas del 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. 3,000 mAh -

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

En los dispositivos que ejecutan Android 7.0, el sistema recopila datos para los análisis de bajo consumo (LE) y el 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 recepción y N milisegundos de tiempo de transmisión. Todo el tiempo restante del controlador se asigna al tráfico de red o a la app de Bluetooth.