Analisar o consumo de energia com o Battery Historian

A ferramenta Battery Historian oferece informações sobre o consumo de bateria de um dispositivo ao longo do tempo. No nível do sistema, a ferramenta visualiza eventos relacionados à energia a partir dos registros do sistema em uma representação HTML. Em um nível específico do app, a ferramenta mostra diversos dados que podem ajudar a identificar que comportamento do app consome bateria.

Este documento descreve algumas das maneiras de usar o Battery Historian para saber mais sobre padrões de consumo de bateria. O documento começa explicando como ler os dados de todo o sistema disponibilizados pela ferramenta. Em seguida, ele apresenta maneiras de usar o Battery Historian para diagnosticar e resolver problemas de comportamento do seu app relacionados ao consumo de bateria. Por fim, ele traz várias dicas sobre cenários em que o Battery Historian pode ser particularmente útil.

Usar a visualização geral do sistema

A ferramenta Battery Historian oferece uma visualização geral de vários comportamentos do app e do sistema. Além disso, ela mostra a correlação deles com o consumo da bateria ao longo do tempo. Essa visualização, mostrada na Figura 1, ajuda a diagnosticar e identificar problemas de consumo de energia no app.

Figura 1. Tela do Battery Historian com eventos do sistema que afetam o consumo de energia.

É interessante observar nessa figura a linha de tendência preta, horizontal e descendente que representa o nível da bateria (Battery Level), medido no eixo y. Por exemplo, logo no início da linha "Battery Level", aproximadamente às 6h50, a visualização mostra uma queda relativamente íngreme no nível da bateria.

A Figura 2 mostra com mais detalhes essa parte da tela.

Figura 2. Ampliacação da linha do tempo do Battery Historian de aproximadamente 6h50 até 7h20.

No início da linha "Battery Level", à medida que a bateria sofre um declínio significativo, a tela mostra três situações: a CPU está em execução, um app adquiriu um wakelock e a tela está ligada. Dessa forma, o Battery Historian ajuda a entender os eventos que ocorrem quando o consumo da bateria é alto. Em seguida, é possível segmentar esses comportamentos no app e investigar se há otimizações relacionadas a serem feitas.

A visualização do sistema também pode oferecer outras dicas. Por exemplo, se ela mostrar que o rádio móvel é ligado e desligado com muita frequência, pode ser uma oportunidade de otimizar esse comportamento por meio de APIs de programação inteligente, como JobScheduler ou Firebase Job Dispatcher.

A próxima seção explica como investigar comportamentos e eventos específicos do seu app.

Ver dados específicos do app

Além dos dados mais abrangentes oferecidos pela visualização do sistema, o Battery Historian também disponibiliza tabelas e algumas visualizações de dados específicos para cada app em execução no dispositivo. Os dados tabulares incluem:

  • Consumo de energia estimado do app no dispositivo
  • Informações da rede
  • Wakelocks
  • Serviços
  • Informações do processo

As tabelas disponibilizam duas dimensões de dados sobre seu app. Primeiro, é possível pesquisar a classificação do consumo de energia do app em comparação com outros. Para isso, clique na tabela Device Power Estimates em Tables. Este exemplo analisa um app fictício denominado Pug Power.

Figura 3. Análise de quais apps consomem mais energia.

A tabela na Figura 3 mostra que o Pug Power é o nono maior consumidor de bateria nesse dispositivo e o terceiro maior app que não faz parte do SO. Esses dados indicam que esse app precisa de uma análise mais detalhada.

Para pesquisar os dados de um app específico, insira o nome do pacote correspondente no menu suspenso mais abaixo em App Selection, localizado à esquerda na visualização.

Figura 4. Inserção de um app específico cujos dados serão exibidos.

Quando você seleciona um determinado app, as seguintes categorias de visualização de dados são alteradas para exibir dados específicos dele em vez de dados do sistema:

  • SyncManager
  • Foreground process
  • Userspace Wakelock
  • Top app
  • JobScheduler
  • Activity Manager Proc
As visualizações SyncManager e JobScheduler mostram com clareza se o app realiza sincronizações e tarefas com mais frequência que o necessário. Assim, elas podem indicar rapidamente uma oportunidade de otimizar o comportamento do app para melhorar o desempenho da bateria.

Também é possível ver mais uma parte dos dados de visualização específicos do app, o Userspace Wakelock. Para incluir essas informações no relatório do bug, digite este comando na janela de terminal:

    $ adb shell dumpsys batterystats --enable full-wake-history
    

Observação: no Android 6.0 (API nível 23), a plataforma inclui o recurso "Soneca", que impõe certas otimizações em apps. Por exemplo, o "Soneca" agrupa tarefas a serem realizadas durante breves janelas de manutenção, independentemente de como o JobScheduler as programou.

As Figuras 5 e 6 mostram dados do Pug Power: a Figura 5 mostra a visualização de dados específicos do app, e a Figura 6 mostra os dados tabulares correspondentes.

Figura 5. Visualização de dados do app fictício Pug Power.

Figura 6. Dados tabulares do app fictício Pug Power.

Uma rápida olhada na visualização não mostra nada evidente de imediato. A linha do JobScheduler mostra que o app não tem tarefas programadas. A linha do SyncManager mostra que o app não realizou nenhuma sincronização.

No entanto, a análise do segmento Wakelocks dos dados tabulares mostra que o Pug Power adquire wakelocks que totalizam um período superior a uma hora. Esse comportamento incomum e de alto custo pode explicar o alto nível do consumo de energia do app. Essa informação ajuda o desenvolvedor a segmentar uma área em que a otimização pode ajudar muito. Nesse caso, por que o app adquire um tempo tão longo de wakelock e como o desenvolvedor pode melhorar esse comportamento?

Outros casos em que o Battery Historian pode ajudar

Há muitos outros casos em que o Battery Historian pode ajudar a diagnosticar oportunidades para melhorar o comportamento de consumo de bateria. Por exemplo, o Battery Historian pode informar se o app:

  • dispara alarmes de ativação com frequência excessiva (a cada 10 segundos ou menos);
  • mantém continuamente um bloqueio de GPS;
  • programa tarefas a cada 30 segundos ou menos;
  • programa sincronizações a cada 30 segundos ou menos;
  • usa o rádio celular com mais frequência do que o esperado.