Capturar métricas de Macrobenchmark

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

As métricas são o principal tipo de informação extraído das comparações. Elas são transmitidas para a função measureRepeated como um List, permitindo especificar várias métricas medidas de uma só vez. Pelo menos um tipo de métrica é necessário para que a comparação seja executada.

O snippet a seguir captura o tempo para a renderização do frame e as métricas da seção de rastros personalizados.

Kotlin

benchmarkRule.measureRepeated(
    packageName = TARGET_PACKAGE,
    metrics = listOf(
        FrameTimingMetric(),
        TraceSectionMetric("RV CreateView"),
        TraceSectionMetric("RV OnBindView"),
    ),
    // ...
)

Java

benchmarkRule.measureRepeated(
    /* packageName */ TARGET_PACKAGE,
    /* metrics */ Arrays.asList(
        new StartupTimingMetric(),
        new TraceSectionMetric("RV CreateView"),
        new TraceSectionMetric("RV OnBindView"),
    ),
    /* iterations */ 5,
    // ...
);

Os resultados da comparação são gerados no Android Studio, conforme mostrado na imagem a seguir. Se várias métricas forem definidas, todas vão ser combinadas na saída.

Resultados de TraceSectionMetric e FrameTimingMetric

StartupTimingMetric

A StartupTimingMetric captura métricas de tempo de inicialização do app com estes valores:

  • timeToInitialDisplayMs: tempo do sistema entre receber uma intent de inicialização e renderizar o primeiro frame da atividade de destino.
  • timeToFullDisplayMs: tempo do sistema entre receber uma intent de inicialização e desenhar o aplicativo usando o método reportFullyDrawn. A medição é interrompida na conclusão da renderização do primeiro frame após (ou contendo) a chamada reportFullyDrawn(). Essa medição pode não estar disponível no Android 10 (API de nível 29) e versões mais antigas.

Para ver mais informações sobre a contribuição para o tempo de inicialização do app, consulte a página de tempo de inicialização do app.

Resultados da StartupTimingMetric

FrameTimingMetric

A FrameTimingMetric captura informações de tempo de frames produzidos por uma comparação (por exemplo, uma rolagem ou animação) e gera os valores abaixo:

  • frameOverrunMs: por quanto tempo um frame específico excedeu o prazo. Números positivos indicam uma queda de frame e instabilidade / renderização lenta visíveis, enquanto números negativos indicam a rapidez de um frame em relação ao prazo. Disponível apenas no Android 12 (nível 31 da API) e mais recente.
  • frameDurationCpuMs: quanto tempo o frame levou para ser produzido na CPU, tanto na linha de execução de IU quanto na RenderThread.

Essas medidas são coletadas na distribuição: porcentagens 50, 90, 95 e 99.

Para ver mais informações sobre a identificação e melhoria de frames lentos, consulte Renderização lenta.

Resultados da FrameTimingMetric

TraceSectionMetric (experimental)

A TraceSectionMetric captura o tempo gasto por uma seção de rastreamento correspondente ao sectionName fornecido e gera tempos mínimo, médio e máximo em milissegundos. A seção de rastreamento é definida pela chamada de função trace(sectionName){} ou pelo código entre Trace.beginSection(sectionName) e Trace.endSection() (ou suas variantes assíncronas). Ela sempre seleciona a primeira instância de uma seção de rastreamento capturada durante uma medição.

Para ver mais informações sobre rastreamento, consulte Visão geral do rastreamento do sistema e Definir eventos personalizados.

Resultados da TraceSectionMetric

PowerMetric (experimental)

PowerMetric captura a mudança no consumo de bateria durante o teste de categories fornecidas. Cada categoria selecionada é dividida em subcomponentes que podem ser medidos, e as categorias não selecionadas são adicionadas à métrica "não selecionada". As métricas avaliam o consumo em todo o sistema, e não apenas o consumo por app. No momento, elas estão limitadas aos dispositivos Pixel 6 e Pixel 6 Pro.

  • power<category>Uw: quantidade de energia consumida durante o teste da categoria.
  • energy<category>Uws: quantidade de energia transferida por unidade de tempo durante o teste da categoria.

As categorias incluem: CPU, DISPLAY, GPU, GPS, MEMORY, MACHINE_LEARNING, NETWORK e UNCATEGORIZED.

Em algumas categorias, como CPU, pode ser difícil separar o trabalho executado por outros processos do executado pelo próprio app. Para tentar minimizar a interferência, remova ou restrinja apps e contas desnecessários.

Resultados de PowerMetric