Android Embarcado: Análise De Consumo De Bateria Usando Battery Stats

Este artigo tem como objetivo apresentar a ferramenta Battery Stats, para análise de consumo de bateria. Essa ferramenta é disponível pelo AOSP e qualquer dispositivo que utilize Android possivelmente deve ser compatível.

O Android já é o sistema operacional mais presente em dispositivos no mundo como smartphones, tablets, smartwatches, televisões, etc. Mas desde o início o seu foco principal foi os dispositivos embarcados móveis, o que sempre gerou uma grande preocupação com o tempo de duração da bateria. Tendo isso em foco, o projeto AOSP traz diversas ferramentas, funcionalidades, além de várias modificações em sua versão de Kernel Linux para que o usuário tenha um melhor aproveitamento da energia que utiliza em seu dispositivo.

Este artigo tem como objetivo apresentar a ferramenta Battery Stats, disponível pelo Android Open Source Project e que qualquer dispositivo que utilize Android possivelmente deve ser compatível.

Pré-requisitos

Destaco alguns pontos para pré-requisito para esse artigo:

  • As ferramentas apresentadas são implementadas para uso no Android Open Source Projects (AOSP), logo, a não ser que tenham sido modificadas ou removidas pelo fabricante, qualquer dispositivo que contenha Android 5+ e que tenha disponível as opções de desenvolvedor podem utilizar as seguintes informações.
  • É interessante ter noções de uso de linha comando (Windows ou Linux) para usar as ferramentas ADB e Docker.
  • Android Debug Bridge (ADB) instalado para acesso às informações internas do dispositivo.
  • Algum editor de texto que facilite pesquisa em arquivos longos como VIM, Notepad++, VS Code.
  • Conhecimentos básicos de Wake locks do Android.

Ativando o ADB

O Android Debug Bridge ou ADB é uma ferramenta de linha de comando que possibilita a comunicação com o dispositivo Android apenas por conexão USB, abrindo várias possibilidades ao usuário como instalar, remover e depurar aplicativos e até acessar a linha de comando do dispositivo sem qualquer necessidade de uma conexão UART.

Para ativar o ADB, é necessário entrar na seção “Opções do Desenvolvedor”, como um Easter Egg no Android e fica escondida nas Configurações. Você deve seguir os passos abaixo, os quais são também demonstrados na Figura 1:

  1. Abrir as Configurações do Dispositivo e ir na opção “Sobre o Dispositivo”;
  2. Procure onde está o “Número de Compilação”, aperte algumas vezes nessa opção até que apareça um pop-up informando que o modo desenvolvedor foi ativado;
  3. Procure a seção “Opções do Desenvolvedor”, normalmente fica como última opção na tela de Configurações;
  4. Dentro dessa sessão para desenvolvedores existem várias opções de teste que podem ser úteis para testes tanto em aplicativos, quanto verificação de funcionamento de hardware, mas nesse artigo é necessário a ativação somente da opção “Depuração USB
  5. Alguns pop-ups de segurança serão lançados e após aceitá-los o ADB estará ativado.
android embarcado 01
Figura 1: Telas mostrando como habilitar a depuração USB para uso do ADB

Após conectar o dispositivo na porta USB do seu computador é possível confirmar se o ADB está funcionando corretamente, para isso execute o comando adb devices e uma resposta como a da imagem abaixo deve aparecer para indicar que tudo está certo.

Consumo De Bateria
Figura 2: Resultado ao executar o comando “adb devices” após ativar a depuração USB

Wake Locks

Quando a tela de um dispositivo Android é desligada, ele se prepara para entrar em modo de repouso, o que faz com que processos em plano de fundo sejam encerrados e alguns módulos de hardware sejam desligados, tais como GPS e Bluetooth. A partir de então, apenas funcionalidades que mantém o dispositivo ligado ficam ativas, como, por exemplo o chip de gerenciamento de energia. Tendo isso em vista, algumas aplicações podem necessitar executar alguma tarefa enquanto o dispositivo está em modo de repouso e para isso existem as wake locks.

As aplicações são adicionadas a uma lista de wake locks que diz quais processos estão mantendo o dispositivo acordado no momento, como por exemplo um aplicativo de música que continua funcionando mesmo após a tela ser desligada.

Para quem possui um emulador de Android ou um dispositivo que tenha privilégios de root, o comando $ adb shell cat /sys/kernel/debug/wakeup_sources mostra uma lista com todas as wake locks que estão sendo executadas no momento e informações importantes sobre elas.

Battery Stats

Battery Stats é uma ferramenta que coleta todo tipo de informação relacionada a bateria do dispositivo, as organiza em forma de logs e as divide em seções, sendo as principais delas:

  1. Battery History
  2. Per-PID Stats
  3. Statistics Since Last Charge

Cada uma das seções ditas serão detalhadas em subseções mais a frente no artigo.

Para acessar o Battery Stats, o dispositivo deve estar conectado ao computador em modo depuração, como já explicado na seção 2, e em seguida deve ser o comando adb shell dumpsys batterystats, o resultado é mostrado na Figura 3.

Consumo De Bateria
Figura 3: Comando adb shell dumpsys batterystats sendo executado seguido pelo comando more  para mostrar as informações que aparecem no início

O comando citado mostra em tela todas as informações capturadas pelo Battery Stats. Para ajudar na análise, alguns comandos adicionais podem ser usados para filtrar as seções e até resetar as informações que são capturadas. Essas opções  podem ser vistas em adb shell dumpsys batterystats -h, como mostra a figura 4.

Consumo De Bateria
Figura 4: Comando de ajuda para opções do Battery Stats

Como são muitas as informações disponibilizadas, recomenda-se salvá-las em um arquivo de texto de forma integral ou divida em seções e utilizar uma ferramenta que tenha algum facilitador para buscas em texto, como demonstrado na Figura 5.

Consumo De Bateria
Figura 5: Salvando as informações do Battery Stats em um arquivo de texto

As informações guardadas no Battery Stats são redefinidas todas as vezes que o dispositivo é desconectado a um carregador e esse está bem próximo do carregamento completo.

Battery History

Logo que abrirmos o Battery Stats, a primeira seção que vemos é a Battery History e de imediato já se pode tirar inúmeras informações interessantes, como apresentado na figura abaixo, ela também pode ser encontrada com o comando adb shell dumpsys batterystats –history.

Consumo De Bateria
Figura 6: Tela inicial da seção Battery History

Esta seção mostra uma linha do tempo de tudo que aconteceu com o seu dispositivo desde o último momento que o Battery Stats foi redefinido até o momento que o comando foi executado.  

As duas primeiras linhas do Battery History sempre mostram as seguintes informações:

Consumo De Bateria
Figura 7: Descrição das duas primeiras linhas do Battery History

Após as duas primeiras linhas, o Battery History mostra o que de fato veio acontecendo com o celular em tempo de execução e quais processos estão consumindo mais bateria.

Consumo De Bateria
Figura 8: Descrição da linha de execução do Battery History

Este formato é organizado por tags que podem indicar situações como: momentos em que a tela foi ligada, processos que ativaram wake locks, temperatura da bateria, entre outros. Essas tags sempre iniciam com um sinal de mais ou menos (+/-) para indicar se a tag foi iniciada ou finalizada. Segue abaixo uma tabela com algumas das tags que aparecem no Battery History:

TAGDescrição
runningCPU está executando algo
wake_lockWake lock que mantém a CPU ocupada
gpsGPS executando
screenMomento que a tela ligou
audioAudio executando
wifi_radioWifi sendo usada
mobile_radioRede móvel sendo usada
Tabela 1: 7 exemplos de tags que podem aparecer na seção Battery History 

Esses são alguns exemplos de uma extensa lista de tags que podem ser encontradas no código fonte do Battery Stats.

PER-PID STATS

Esta seção organiza as wake locks que apareceram na seção anterior por PID e o tempo que elas permaneceram segurando a CPU acordada. Abaixo podemos ver um exemplo:

Consumo De Bateria
    Figura 9: PID 1866 como pacote com.sec.imsservice

Neste caso o PID 1866 é um serviço relacionado ao pacote de serviço IMS (IP Multimedia System

STATISTICS SINCE LAST CHARGE

Esta seção gera um relatório estatístico com toda informação bruta de bateria coletada pelo dispositivo e também pode ser encontrada com o comando adb shell dumpsys batterystats –charged

Logo de início são mostradas informações básicas do dispositivo como: capacidade de bateria em mAh, estimativa de quanto de bateria o dispositivo ainda possui em mAh, o tempo de duração total que o dispositivo ficou ligado e ligado com a tela desligada, predominância da força do brilho da tela entre outras informações interessantes, como mostra a Figura 10.

Consumo De Bateria
Figura 10: Figura com parte das informações iniciais da seção Statistics since last Charge

Em seguida, para organizar os dados existem algumas seções para os seguintes tópicos:

  • Seção para consumo relacionado a conectividade;
  • Estimativa de consumo por processo;
  • Wake locks de parciais e de kernel;
  • Todos os motivos para o dispositivo acordar; e
  • Lista de processos.

Conectividade

Dentro do relatório Statistics since last charge, há a seção CONNECTIVITY POWER SUMMARY START, a qual é focada em estatísticas de dados relacionados à conectividade. Esta seção é apresentada mais detalhadamente na Figura 11.

    Pode-se encontrar informações tanto para módulos de rede móvel, quanto para Wifi e Bluetooth. Alguns exemplos são o tempo que o módulo esteve escaneando a rede, o tempo que ele esteve recebendo ou enviando dados na rede e a qualidade do sinal de recebimento de dados categorizados como: very poor, poor, moderate, good, great, variando a potência de acordo com o módulo que está sendo usado.

Consumo De Bateria
Figura 11: Seção CONNECTIVITY POWER SUMMARY START

Estimativa de consumo por processo

image 11
Figura 12: Seção Estimated power use.

Na seção Estimated power use do relatório Statistics since last charge podem ser encontrados todos os processos executados pelo dispositivo e a quantidade de bateria que esse gastou, em ordem do maior ao menor consumidor.

Como exemplo de cálculo de uso de bateria por processo podemos pegar o processo Uid u0a540 representado. Vemos na Figura 12 que ele está consumindo um total de 401 mAh e ao lado são mostrados quais módulos de hardware estão sendo usados pelo processo e quanto de bateria cada um está gastando. Sabendo que a bateria total do dispositivo é 4300 mAh, com uma simples regra de 3 conseguiremos tirar a porcentagem de bateria que o processo Uid u0a540 consumiu, que foi em torno de 9,32%.

image1
image2
image3

Wake locks parciais e de kernel

As seções All partial wake locks e All kernel wake locks  do relatório Statistics since Last Charge mostram todas as wake locks que mantiveram o dispositivo acordado, quantas vezes elas se mantiveram ativas e o tempo total que ficaram ativas, como apresentado nas figuras abaixo.

image 12
Figura 13: Todas as wake locks relacionadas a kernel space 

image 13
Figura 14: Todas as wake locks relacionadas a user space 

Motivos do dispositivo acordar

image 14
Figura 15: Todas os motivos para o dispositivo ter acordado

Após o dispositivo entrar em repouso algo deve fazê-lo acordar para que tudo volte a funcionar normalmente, seja apertar o botão de power, seja um email importante em forma de notificação ou um alarme configurado para lhe acordar às 6 da manhã. Esses motivos são listados na seção All wakeup reasons  do relatório Statistics since Last Charge, o qual guarda a label do motivo, o tempo que ela ficou ativa e quantas vezes ela foi executada.

Lista de Processos

Após todas essas informações estatísticas dadas nas seções anteriores  do relatório Statistics since Last Charge, é apresentada uma lista indicando todos os processos e relacionando dados como o nome do pacote, módulos de hardware que utilizou e quais os momentos exatos que estes foram utilizados.

Na Figura 16 e 17 podemos ver como são organizados os dados para cada processo, usando de exemplo o mesmo processo Uid u0a540 que foi mostrado na seção 4.4.2.

image 15
Figura 16: Dados gerais sobre consumo do processo Uid u0a540

image 16
Figura 17: Nome do Apk que gerou o processo Uid u0a540

Considerações Finais

O sistema operacional Android possui inúmeras ferramentas que facilitam o manuseio pelos desenvolvedores e pelos usuários finais, mas que são pouco divulgadas e documentadas. 

Uma destas ferramentas é o Battery Stats, que pode ser utilizada de várias maneiras, tanto para desenvolvedores de aplicativos que procuram melhorar o desempenho do seu software quanto para desenvolvedores de software embarcado que podem gerenciar o consumo de seus módulos de hardware e se esses estão funcionando de acordo com o esperado.

Este artigo mostrou como analisar o consumo de bateria através da ferramenta Battery Stats. Para isso, vimos como ativar o adb para ter acesso à ferramenta, explicamos o que são wake locks, sendo este um conhecimento essencial para utilizar o Battery Stats. Também explicamos  as principais seções desta ferramenta, como Battery History, a qual mostra em uma linha de tempo todos os processos executados e quanto cada um consumiu de bateria; Per-PID Stats, responsável por organizar as wake locks por processo; e Statistics Since Last Charge, que é um relatório estatístico com toda informação bruta de bateria coletada pelo dispositivo.

Saiba mais

Android Embarcado e zRAM: uso e considerações

Cross-compilação de programas estáticos para Android

Compilando o Android para a BeagleBone Black

Engenheiro de Computação manauara formado pela Universidade Federal do Amazonas (UFAM).
Tenho experiência com sistemas embarcados e sistemas digitais integrados desde 2012 e hoje trabalho com projetos de Linux e Android Embarcado para smartphones.

Para mais informações acesse meu Linkedin do link abaixo:
https://www.linkedin.com/in/alvenan/

Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
THALES SILVA
THALES SILVA
Membro
02/09/2021 11:04

Muito bom! Parabéns Alison pelo excelente artigo!

WEBINAR

Imagens de Ultrassom: Princípios e Aplicações

DATA: 26/10 ÀS 19:30 H