Os fabricantes de dispositivos precisam fornecer um perfil de energia do componente em
/frameworks/base/core/res/res/xml/power_profile.xml
.
Para determinar valores para perfis de potência, use um hardware que meça a energia usada pelo dispositivo e execute as diversas operações para as quais as informações são necessárias. Meça o uso de energia durante essas operações e calcule os valores (extraindo diferenças de outros usos de energia de referência, conforme apropriado).
Como o objetivo de um perfil de energia é estimar o consumo de bateria de maneira adequada, os valores do perfil de energia são fornecidos em corrente (amps). O framework do Android multiplica a corrente pelo tempo em que o subsistema estava ativo e calcula o valor mAh, que é usado para estimar a quantidade de bateria usada pelo app ou subsistema.
Dispositivos com controladores Bluetooth, modem e Wi-Fi com o Android 7.0 e versões mais recentes podem fornecer valores de energia adicionais obtidos a partir de dados do chipset.
Dispositivos com CPUs heterogêneas
O perfil de energia para dispositivos com núcleos de CPU de arquitetura heterogênea precisa incluir os seguintes campos:
- Número total de CPUs para cada cluster, expresso em cpu.clusters.cores.
- Velocidades de CPU com suporte em cada cluster.
- Consumo de energia da CPU ativa para cada cluster.
Para diferenciar entre o consumo de energia da CPU ativa e as velocidades de CPU com suporte dos clusters, anexe o número do cluster ao nome da matriz. Os números de cluster são atribuídos na ordem dos núcleos da CPU na árvore de dispositivos do kernel. Por exemplo, em uma arquitetura heterogênea com dois (2) clusters de quatro (4) núcleos:
- cluster0 consiste em cpu0-3
- cluster1 consiste em cpu4-7
O framework do Android usa esses números de núcleo de CPU quando lê estatísticas
dos arquivos sysfs
em:
/sys/devices/system/cpu/cpu<number>/cpufreq/stats
.
Exemplo de CPUs e velocidades do 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>
Valores de energia
A tabela a seguir descreve as configurações de valor de energia disponíveis. Para conferir o arquivo de exemplo no AOSP, consulte power_profile.xml.
Nome | Descrição | Valor de exemplo | Observações |
---|---|---|---|
ambient.on | Energia extra usada quando a tela está no modo de suspensão/ambiente/sempre ativado em vez de desligada. | cerca de 100 mA | - |
screen.on | Energia extra usada quando a tela está ligada no brilho mínimo. | 200 mA | Inclui o controlador touchscreen e a luz de fundo da tela. Com 0% de brilho, não o mínimo do Android, que tende a ser de 10% ou 20%. |
screen.full | Energia adicional usada quando a tela está com brilho máximo em comparação com a tela com brilho mínimo. | 100 mA-300 mA | Uma fração desse valor (com base no brilho da tela) é adicionada ao valor de screen.on para calcular o uso de energia da tela. |
wifi.on | Energia adicional usada quando o Wi-Fi está ativado, mas não recebe, transmite ou procura. | 2 mA | - |
wifi.active | Energia adicional usada ao transmitir ou receber por Wi-Fi. | 31 mA | - |
wifi.scan | Energia extra usada quando o Wi-Fi está procurando pontos de acesso. | 100 mA | - |
vários idiomas | Energia extra usada na decodificação/codificação de áudio pelo DSP. | cerca de 10 mA | Usado para áudio DSP. |
vídeo | Energia extra usada na decodificação de vídeo por DSP. | cerca de 50 mA | Usado para vídeo DSP. |
camera.avg | Uso médio de energia pelo subsistema de câmera para um app de câmera típico. | 600 mA | Prevê uma estimativa aproximada para um app executando uma visualização e capturando aproximadamente 10 imagens de resolução máxima por minuto. |
camera.flashlight | Energia média usada pelo módulo de flash da câmera quando ativado. | 200 mA | - |
gps.signalqualitybased | Energia extra usada pelo GPS com base na intensidade do sinal. Essa é uma entrada com vários valores, uma por intensidade de sinal, da mais fraca para a mais forte. | 30 mA, 10 mA | - |
gps.on | Energia extra usada quando o GPS está adquirindo um sinal. | 50 mA | - |
radio.active | Energia adicional usada quando o rádio celular está transmitindo/recebendo. | 100 mA-300 mA | - |
radio.scanning | Energia extra usada quando o rádio celular está chamando a torre. | 1,2 mA | - |
radio.on | Energia extra usada quando o rádio celular está ativado. Essa é uma entrada com vários valores, um por intensidade de sinal (sem sinal, fraco, moderado, forte). | 1,2 mA | Alguns rádios aumentam a potência quando procuram uma torre de celular e não detectam um sinal. Os valores podem ser iguais ou diminuir com o aumento da intensidade do sinal. Se você fornecer apenas um valor, o mesmo valor será usado para todos os pontos fortes. Se você fornecer dois valores, o primeiro será usado para nenhum sinal, o segundo será usado para todos os outros níveis de intensidade e assim por diante. |
bluetooth.controller.idle | Consumo médio de corrente (mA) do controlador Bluetooth quando ocioso. | - | Esses valores não são estimados, mas retirados da folha de dados do
controlador. Se houver vários estados de recebimento ou transmissão, a média
desses estados será usada. Além disso, o sistema agora coleta dados para
buscas de Bluetooth e de baixa energia (LE). O Android 7.0 e versões mais recentes não usam mais os valores de energia do Bluetooth para bluetooth.active (usado ao reproduzir áudio por Bluetooth A2DP) e bluetooth.on (usado quando o Bluetooth está ativado, mas inativo). |
bluetooth.controller.rx | Consumo médio de corrente (mA) do controlador Bluetooth ao receber. | - | |
bluetooth.controller.tx | Consumo médio de corrente (mA) do controlador Bluetooth durante a transmissão. | - | |
bluetooth.controller.voltage | Tensão de operação média (mV) do controlador Bluetooth. | - | |
modem.controller.sleep | Consumo médio de corrente (mA) do controlador do modem em modo de suspensão. | 0 mA | Esses valores não são estimados, mas retirados da folha de dados do controlador. Se houver vários estados de recebimento, a média deles será usada. Se houver vários estados de transmissão, a especificação de um valor para cada estado de transmissão será aceita a partir do Android 9. |
modem.controller.idle | Consumo médio de corrente (mA) do controlador do modem quando ocioso. | - | |
modem.controller.rx | Consumo médio de corrente (mA) do controlador do modem ao receber. | - | |
modem.controller.tx | Consumo médio de corrente (mA) do controlador do modem ao transmitir em diferentes níveis de potência de RF. Essa é uma entrada com vários valores, com um valor por nível de potência de transmissão. | 100 mA, 200 mA, 300 mA, 400 mA e 500 mA | |
modem.controller.voltage | Tensão de operação média (mV) do controlador do modem. | - | |
wifi.controller.idle | Consumo médio de corrente (mA) do controlador Wi-Fi quando ocioso. | - | Esses valores não são estimados, mas retirados da folha de dados do controlador. Se houver vários estados de recebimento ou transmissão, a média desses estados será usada. |
wifi.controller.rx | Consumo médio atual (mA) do controle de Wi-Fi ao receber. | - | |
wifi.controller.tx | Consumo médio de corrente (mA) do controlador Wi-Fi ao transmitir. | - | |
wifi.controller.voltage | Tensão média de operação (mV) do controlador Wi-Fi. | - | |
cpu.speeds | Essa é uma entrada de vários valores que lista cada velocidade de CPU possível em KHz. | 125.000 KHz, 250.000 KHz, 500.000 KHz, 1.000.000 KHz, 1.500.000 KHz | O número e a ordem das entradas precisam corresponder às entradas de mA em cpu.active. |
cpu.idle | Energia total extraída pelo sistema quando as CPUs (e o SoC) estão no estado de suspensão do sistema. | 3 mA | - |
CPU.awake | Energia extra usada quando as CPUs estão na programação do estado inativo (loop ocioso do kernel). O sistema não está no estado de suspensão do sistema. | 50 mA | Sua plataforma pode ter mais de um estado inativo em uso com níveis diferentes de consumo de energia. Escolha um estado inativo representativo para períodos mais longos de inatividade do programador (vários milissegundos). Examine o gráfico de energia no equipamento de medição e escolha amostras em que a CPU está no menor consumo, descartando amostras mais altas em que a CPU saiu do modo inativo. |
cpu.active | Energia adicional usada por CPUs ao executar em velocidades diferentes. | 100 mA, 120 mA, 140 mA, 160 mA, 200 mA | O valor representa a potência usada pelos trilhos da CPU ao serem executados em velocidades diferentes. Defina a velocidade máxima no kernel para cada uma das velocidades permitidas e fixe a CPU nessa velocidade. O número e a ordem das entradas correspondem ao número e à ordem das entradas em cpu.speeds. |
cpu.clusters.cores | Número de núcleos que cada cluster de CPU contém. | 4, 2 | Obrigatório apenas para dispositivos com arquiteturas de CPU heterogêneas. O número de entradas e a ordem precisam corresponder ao número de entradas de cluster para cpu.active e cpu.speeds. A primeira entrada representa o número de núcleos de CPU em cluster0, a segunda entrada representa o número de núcleos de CPU em cluster1 e assim por diante. |
battery.capacity | Capacidade total da bateria em mAh. | 3.000 mAh | - |
Buscas de Bluetooth de baixa energia (LE) e Bluetooth
Para dispositivos com o Android 7.0, o sistema coleta dados de verificações de Bluetooth Low Energy (LE) e de tráfego de rede Bluetooth (como RFCOMM e L2CAP) e associa essas atividades ao app que iniciou a verificação. As verificações de Bluetooth são associadas ao app que iniciou a verificação, mas as verificações em lote não são. Elas são associadas ao app Bluetooth. Para um app que procura por N milissegundos, o custo da verificação é de N milissegundos de tempo de rx e N milissegundos de tempo de tx. Todo o tempo restante do controlador é atribuído ao tráfego de rede ou ao app Bluetooth.