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, inspecione o rastreamento de método, capturado por padrão nas versões compatíveis do SO, ou selecione outras configurações de criação de perfil.

Para selecionar a configuração do criador de perfil, adicione o argumento do executor de instrumentação androidx.benchmark.profiling.mode com um dos argumentos MethodTracing (padrão), StackSampling ou None, conforme mostrado no snippet a seguir.

Para mais informações sobre as opções, consulte Gravar métodos Java/Kotlin. MethodTracing equivale ao rastreamento, e StackSampling equivale à amostragem, conforme definido nesse 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 Rastreamento de método ou Rastreamento de amostragem de pilha 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étodos fica ativado por padrão.

Observação:em algumas versões do SO Android e do ART, o rastreamento de métodos fica desativado por padrão. Nesses casos, o Android Studio mostra um aviso.

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 da 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

    • Ignora o rastreamento de métodos quando é provável que cause um ANR. Mantenha essa opção ativada para execuções de CI, já que os 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.