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

Observação:em algumas versões do Android OS e do ART, a gravação de método fica desativada por padrão. Nesses casos, o Android Studio vai mostrar 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 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.