Por padrão, as microcomparações fornecem informações sobre o tempo e as alocações do código executado. Se você quiser investigar por que o código medido está sendo executado lentamente, inspecione o rastro do método, capturado por padrão nas versões do SO com suporte, ou selecione outras configurações de criação de perfil.
Para selecionar a configuração do criador de perfil, adicione o argumento androidx.benchmark.profiling.mode
do executor de instrumentação
com um dos argumentos
MethodTracing
(padrão),
StackSampling
ou None
, conforme mostrado no
sequência de comandos abaixo.
Para mais informações sobre as opções, consulte Gravar métodos Java/Kotlin.
MethodTracing
equivale a "Trace" e StackSampling
equivale a
"Sample", conforme definido no documento.
Groovy
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling' } }
Kotlin
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling" } }
Quando você cria um perfil para uma comparação, um arquivo de saída .trace
é copiado para o host no
diretório junto dos resultados JSON. Para inspecionar os resultados da criação de perfil no
Android Studio, selecione o link Method Trace ou Stack Sampling Trace
nos resultados do microbenchmark.
MethodTracing
O rastreamento de métodos é útil quando você está tentando otimizar o código, porque ele pode ajudar a identificar os métodos que demoram mais para serem executados do que outros. Assim, você pode se concentrar na otimização dos métodos que têm maior impacto no desempenho.
A criação de perfil ocorre em sequência após a medição do código. Portanto, o teste gera resultados precisos de tempo e criação de perfil.
O rastreamento de método fica ativado por padrão.
StackSampling
O rastreamento de amostra também pode ajudar a identificar métodos caros sem o overhead de performance do rastreamento de método. No entanto, se o app entrar em um método após a captura de uma pilha de chamadas e o método sair antes da próxima captura, a chamada do método não será registrada. Para rastrear adequadamente métodos com ciclos de vida curtos, use o rastreamento de método em vez do rastreamento de amostra.
Com a amostragem de pilhas, a comparação vai coletar amostras das pilhas de chamadas após a conclusão do aquecimento. É possível controlar o comportamento de amostragem, como a frequência e a duração da amostragem, usando argumentos de instrumentação.
No Android 10 (API 29) e versões mais recentes, a amostragem de pilhas usa o Simpleperf para amostragens de
pilhas de chamadas do app, incluindo o código C++. No Android 9 (API 28) e versões mais antigas, ela usa
Debug.startMethodTracingSampling
para capturar amostras de pilhas.
Você pode configurar esse modo de criação de perfil adicionando outros argumentos de instrumentação:
androidx.benchmark.profiling.sampleFrequency
- Número de amostras de pilhas a serem capturadas por segundo.
- Tipo de argumento: número inteiro
- O padrão é de 1.000 amostras por segundo
androidx.benchmark.profiling.sampleDurationSeconds
- Duração da comparação a ser executada
- Tipo de argumento: número inteiro
- O padrão é de 5 segundos.
androidx.benchmark.profiling.skipWhenDurationRisksAnr
- Pula o rastreamento de método quando é provável que ele cause um ANR. Mantenha essa opção ativada para execuções de CI, já que ANRs podem causar problemas durante execuções longas de CI.
- Tipo de argumento: booleano
- O valor padrão é
true
.
Nenhum
Esse argumento não captura um arquivo de criação de perfil. As informações sobre tempo e alocações ainda são medidas.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado
- Argumentos de instrumentação de Microbenchmark
- Executar comparativos na integração contínua