Conceitos e implementação do Jetpack Compose
As métricas são o principal tipo de informação extraída 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 de código abaixo captura as métricas de marcação do tempo para a renderização do frame e as da seção de rastros personalizados:
Kotlin
benchmarkRule.measureRepeated(
packageName = TARGET_PACKAGE,
metrics = listOf(
FrameTimingMetric(),
TraceSectionMetric("RV CreateView"),
TraceSectionMetric("RV OnBindView"),
),
iterations = 5,
// ...
)
Java
benchmarkRule.measureRepeated(
TARGET_PACKAGE, // packageName
Arrays.asList( // metrics
new StartupTimingMetric(),
new TraceSectionMetric("RV CreateView"),
new TraceSectionMetric("RV OnBindView"),
),
5, // Iterations
// ...
);
Neste exemplo, RV CreateView e RV OnBindView são os IDs de
blocos rastreáveis definidos em RecyclerView. O código-fonte do método
createViewHolder() é um exemplo de como definir
blocos rastreáveis no seu código.
StartupTimingMetric, TraceSectionMetric e
FrameTimingMetric serão abordadas em mais detalhes posteriormente neste documento. Para uma lista completa de métricas, confira as subclasses de Metric.
Os resultados das comparações são gerados no Android Studio, conforme mostrado na figura 1. Se várias métricas forem definidas, todas serão combinadas na saída.
TraceSectionMetric e
FrameTimingMetric.StartupTimingMetric
A StartupTimingMetric captura métricas de tempo de inicialização do app com os
seguintes valores:
timeToInitialDisplayMs: tempo total entre o momento em que o sistema recebe uma intent de inicialização e a renderização do primeiro frame daActivityde destino.timeToFullDisplayMs: tempo total entre o momento em que o sistema recebe uma intent de inicialização e o momento em que o app é totalmente renderizado usando o métodoreportFullyDrawn(). A medição é interrompida quando a renderização do primeiro frame após (ou que contém) a chamadareportFullyDrawn()é concluída. Essa medição pode não estar disponível no Android 10 (nível 29 da API) e versões anteriores.
A StartupTimingMetric gera os valores mínimos, medianos e máximos das
iterações de inicialização. Para avaliar a melhoria da inicialização, concentre-se sempre nos valores medianos, porque eles oferecem a melhor estimativa dos tempos normais de inicialização do usuário. Para
mais informações sobre o que contribui para o tempo de inicialização do app, consulte Tempo de inicialização
do app.
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 perdeu o prazo. Números positivos indicam uma queda de frame acompanhada de instabilidade ou travamento perceptíveis. Números negativos indicam a velocidade de renderização de um frame em relação ao prazo do hardware do subsistema. Observação: essa métrica está disponível apenas no Android 12 (nível 31 da API) e versões mais recentes.frameDurationCpuMs: o tempo necessário para que o frame seja produzido na CPU na linha de execução de interface e naRenderThread.
Essas medidas são coletadas em uma distribuição de percentis 50, 90, 95 e 99.
Para mais informações sobre como identificar e melhorar frames lentos, consulte Renderização lenta.
FrameTimingMetric.TraceSectionMetric
TraceSectionMetric captura o número de vezes que uma seção de trace específica
ocorre e o tempo absoluto necessário para a execução. Para o rastreamento de tempo,
ela gera os tempos mínimo, mediano e máximo em milissegundos.
A seção de rastreamento de destino é definida pela chamada de função
trace(sectionName) ou pelos limites de bloco de nível mais baixo 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. Por padrão, ele só exibe seções de rastreamento do pacote. Para incluir processos fora do pacote, defina targetPackageOnly =
false.
Para mais informações sobre rastreamento, consulte Visão geral do rastreamento do sistema e Definir eventos personalizados.
TraceSectionMetric.Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Criar perfis de referência {:#creating-profile-rules}
- Como criar uma comparação da Macrobenchmark
- Otimização e análise de inicialização do app {:#app-startup-analysis-optimization}