Los fabricantes de dispositivos deben proporcionar un perfil de energía del componente 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 consumo de energía durante esas operaciones y calcula los valores (deriva las diferencias de otros consumos 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 forma adecuada, los valores del perfil de energía se proporcionan en corriente (amperios). El framework de Android умножает la corriente por el tiempo durante el cual 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 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 CPU heterogéneas
El perfil de energía de los dispositivos con núcleos de CPU de arquitectura heterogénea debe incluir los siguientes campos adicionales:
- Cantidad de CPUs totales para cada clúster (expresada en cpu.clusters.cores).
- Velocidades de CPU compatibles con cada clúster
- Consumo de energía de CPU activo para cada clúster.
Para diferenciar entre el consumo de energía de la CPU activa y las velocidades de CPU compatibles 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 CPUs 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 describe la configuración disponible para los valores de energía. Para ver el archivo de muestra en AOSP, consulta power_profile.xml.
Name | Descripción | Valor de ejemplo | Notas |
---|---|---|---|
ambiente.activado | Energía adicional que se usa cuando la pantalla está en modo de suspensión, ambiente o siempre activo en lugar de apagada. | alrededor de 100 mA | - |
screen.on | Es la 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 0 de brillo, no el mínimo de Android, que suele ser del 10 o 20%. |
pantalla.completo | Energía adicional utilizada cuando la pantalla tiene el brillo máximo en comparación con la pantalla con el brillo mínimo. | De 100 mA a 300 mA | Se agrega una fracción de este valor (según el brillo de la pantalla) al valor screen.on para calcular el consumo de energía de la pantalla. |
wifi.on | Es la energía adicional que se usa cuando la red Wi-Fi está activada, pero no recibe, transmite ni escanea. | 2 mA | - |
Wi-Fi.activo | Energía adicional que se utiliza cuando transmites o recibes por Wi-Fi. | 31 mA | - |
wifi.scan | Es la energía adicional que se usa cuando el Wi-Fi busca puntos de acceso. | 100 mA | - |
Audio | Potencia adicional utilizada al decodificar o codificar audio a través de la DSP. | alrededor de 10 mA | Se utiliza para el audio DSP. |
video | Energía adicional que se usa cuando se decodifica video a través de 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 | Diseñado como 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 energía promedio que usa el módulo del flash de la cámara cuando está encendido. | 200 mA | - |
gps.signalqualitybased | Energía adicional que consume el GPS según la intensidad de la señal. Esta es una entrada de varios valores, de uno por intensidad de la señal, de menor a mayor. | 30 mA, 10 mA | - |
gps.on | Es la energía adicional que se usa cuando el GPS adquiere una señal. | 50 mA | - |
radio.active | Energía adicional utilizada cuando la radio móvil está transmitiendo o recibiendo. | De 100 mA a 300 mA | - |
radio.scanning | Energía adicional que se usa cuando la radio móvil está paginando la torre. | 1.2 mA | - |
radio.on | Es la 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 de telefonía celular y no detectan una señal. Los valores pueden ser los mismos o disminuir a medida que aumenta la intensidad de la señal. Si solo proporcionas un valor, se usará el mismo valor para todas las fortalezas. Si proporcionas dos valores, el primero se usa para la falta de señal, el segundo se usa para todas las demás intensidades y así sucesivamente. |
Bluetooth.controlador.idle | Consumo de corriente promedio (mA) del control Bluetooth cuando está inactivo. | - | Estos valores no se estiman, 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 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 | Es la cantidad promedio de corriente (mA) que consume el controlador Bluetooth cuando recibe. | - | |
Bluetooth.controlador.tx | Es la cantidad de corriente promedio (mA) que consume el controlador Bluetooth durante la transmisión. | - | |
bluetooth.controller.voltage | Es el voltaje de funcionamiento promedio (mV) del controlador Bluetooth. | - | |
modem.controller.sleep | Es la cantidad promedio de corriente (mA) que consume el controlador del 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 especificar un valor para cada uno a partir de Android 9. |
modem.controller.idle | Consumo de corriente promedio (mA) del controlador del módem cuando está inactivo. | - | |
modem.controller.rx | Es la cantidad promedio de corriente (mA) que consume el controlador del módem cuando recibe. | - | |
módem.controlador.tx | Es la cantidad promedio de corriente (mA) que consume el 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 la cantidad promedio de corriente (mA) que consume el controlador de Wi-Fi cuando está inactivo. | - | Estos valores no se estiman, 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 la cantidad de corriente promedio (mA) que consume el controlador de Wi-Fi cuando recibe. | - | |
wifi.controller.tx | Es la cantidad promedio de corriente (mA) que consume el controlador de Wi-Fi cuando transmite. | - | |
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 | Es la energía total que consume el sistema cuando las CPUs (y el SoC) están en estado de suspensión. | 3 mA | - |
cpu.awake | Es la energía adicional que se usa cuando las CPUs están en estado inactivo de programación (bucle inactivo del kernel). El sistema no está en estado de suspensión. | 50 mA | Es posible que tu plataforma tenga más de un estado inactivo en uso con diferentes niveles de consumo de energía. Elige un estado inactivo 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 se encuentre en su consumo más bajo, descartando las muestras más altas en las que la CPU quedó inactiva. |
cpu.active | Es la 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 en 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 | Es la cantidad de núcleos que contiene cada clúster de CPU. | 4, 2 | Solo es obligatorio para dispositivos con arquitecturas de CPU heterogéneas. La cantidad de entradas y el orden debe 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 el clúster 0, la segunda entrada representa la cantidad de núcleos de CPU en el clúster 1, y así sucesivamente. |
capacidad.batería | Es la capacidad total de la batería en mAh. | 3,000 mAh | - |
Análisis de bajo consumo (LE) y Bluetooth
En los dispositivos que ejecutan Android 7.0, el sistema recopila datos para análisis de bajo consumo (LE) y el tráfico de red Bluetooth (como RFCOMM y L2CAP) y asocia estas actividades con la app que inició el análisis. Los análisis de Bluetooth se asocian con la app que inició el análisis, pero los análisis por lotes no (y, en su lugar, se asocian con la app de Bluetooth). Para una app que escanea durante N milisegundos, el costo del escaneo 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.