A biblioteca Jetpack Microbenchmark permite comparar seu código nativo do Android (Kotlin ou Java) no Android Studio. A biblioteca lida com o aquecimento, mede o desempenho do código e as contagens de alocação e gera resultados comparativos no Console do Android Studio e em um arquivo JSON com mais detalhes.
Recomendamos criar um perfil para seu código antes de programar uma comparação. Isso ajuda você a encontrar operações caras que valem a pena otimizar. Ele também pode indicar por que as operações estão lentas, mostrando o que está acontecendo durante a execução, por exemplo, execução em uma linha de baixa prioridade, suspensão devido a acesso ao disco ou chamada inesperada em uma função cara, como a decodificação de bitmap.
As microcomparações são úteis principalmente para trabalhos da CPU executados várias vezes no app,
também conhecidos como caminhos de código quente. Alguns exemplos: rolagem de RecyclerView
com
um item exibido por vez, conversões ou processamento de dados e outros trechos de código
que são usados repetidamente.
Outros tipos de código são mais difíceis de medir com a biblioteca Microbenchmark. Como as comparações são executadas em loop, qualquer código que não seja executado com frequência ou que apresente desempenhos diferentes quando chamado várias vezes pode não funcionar para a comparação.
Para aprender a usar a biblioteca em um ambiente de integração contínua (CI), consulte Executar comparações na integração contínua.
Evitar a medição do cache
Tente evitar medir apenas o cache. Por exemplo, uma comparação para o layout de uma visualização personalizada pode medir apenas o desempenho do cache de layout. Para evitar isso, você pode transmitir diferentes parâmetros de layout em cada loop. Isso pode ser difícil em outros casos, como ao medir a performance do sistema de arquivos, porque o SO armazena o sistema de arquivos em cache durante o loop.
Receber comparações consistentes
Os relógios em dispositivos móveis mudam dinamicamente do estado alto (para maior desempenho) para o estado baixo (para economizar energia ou quando o dispositivo esquenta). Esses relógios variados podem fazer com que os números de comparação variem muito. Por esse motivo, a biblioteca oferece maneiras de lidar com esse problema.
Bloquear os relógios (dispositivo com acesso root necessário)
Bloquear os relógios é a melhor maneira de alcançar um desempenho estável. Isso garante que os
relógios nunca cheguem a um estado alto o suficiente para aquecer o dispositivo ou um estado baixo caso uma comparação não esteja utilizando
a CPU totalmente. O recurso pode ser aplicado com uma tarefa do Gradle
(gradlew lockClocks
) ou manualmente na CI. Embora essa
seja a melhor maneira de ajudar a garantir um desempenho estável, ela não é aceita pela maioria
dos dispositivos, porque exige tecnologia Android com acesso root.
Modo de desempenho sustentado
Window.setSustainedPerformanceMode()
é um recurso oferecido por dispositivos
que permitem que um app opte por uma frequência máxima de CPU mais baixa. Quando executado em dispositivos com
suporte, a biblioteca Microbenchmark usa uma combinação dessa API e inicia
a própria atividade para impedir a limitação térmica e estabilizar os resultados.
Esse recurso é ativado por padrão pelo testInstrumentationRunner
definido
pelo Plug-in do Android para Gradle. Caso queira usar um executor personalizado, é possível
criar uma subclasse AndroidBenchmarkRunner
e usá-la como seu
testInstrumentationRunner
.
O executor lança uma atividade opaca em tela cheia para garantir que a comparação seja executada em primeiro plano e sem qualquer outro app drenando a bateria.
Pausar a execução automática
Se você não usar bloqueio de relógio ou desempenho sustentado, a biblioteca vai realizar a detecção automática de limitação térmica. Quando ativada, a comparação interna é executada periodicamente para determinar quando a temperatura do dispositivo ficou alta o suficiente para diminuir o desempenho da CPU. Quando ele detecta que o desempenho da CPU foi reduzido, a biblioteca pausa a execução para permitir que o dispositivo esfrie e tenta fazer a comparação atual de novo.
Compilação AOT
Microcomparações complexas podem levar muito tempo para se estabilizar e tornar
a estabilização é muito difícil de detectar. Como uma medição consistente e rápida
velocidade de iteração são as principais prioridades, o plug-in androidx.benchmark
totalmente
compila seu apk de microbenchmark por padrão, semelhante a
CompilationMode.Full
em Macrobenchmarks. Esse comportamento exige uma comparação
1.3.0-beta01+
e o Plug-in do Android para Gradle 8.4.0+
. É possível desativar essa opção
comportamento, definindo androidx.benchmark.forceaotcompilation=false
na sua
arquivo gradle.properties
.
Amostras
Confira os seguintes exemplos no repositório do GitHub:
- Amostras de desempenho (link em inglês)
- PagingWithNetworkSample (link em inglês)
- WorkManagerSample (link em inglês)
Outros recursos
- Como combater regressões com comparações em CI (em inglês)
Enviar feedback
Para comunicar problemas ou enviar solicitações de recursos usando a comparação, consulte o rastreador de problemas público.
Recomendados para você
Comparar seu app
Plan to create quality apps and features from the start by understanding best practices and requirements.
Criar perfis de referência
Plan to create quality apps and features from the start by understanding best practices and requirements.
Biblioteca JankStats
Plan to create quality apps and features from the start by understanding best practices and requirements.