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ê
- Observação: o texto do link aparece quando o JavaScript está desativado
- Comparar seu app
- Criar perfis de referência {:#creating-profile-rules}
- Biblioteca JankStats