Criar um perfil de Microbenchmark

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, faça a comparação com o CPU Profiler anexado.

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, StackSampling ou None, conforme mostrado no snippet abaixo.

Para mais informações sobre as opções, consulte Escolher uma configuração de gravação. MethodTracing equivale a "Trace Java Methods" e StackSampling equivale a "Sample Java Methods", conforme definido neste 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 CPU Profiler no Android Studio, selecione File > Open. Para saber mais sobre como ler e entender rastros, consulte Inspecionar rastros.

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.

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. Você pode controlar a frequência e 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.

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.