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 uma 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 // ... );
Nesse 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.
As métricas StartupTimingMetric
, TraceSectionMetric
, FrameTimingMetric
e PowerMetric
serão abordadas em detalhes mais adiante 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
StartupTimingMetric
captura métricas de marcação de tempo de inicialização do app com estes valores:
timeToInitialDisplayMs
: tempo total entre o momento em que o sistema recebe uma intent de inicialização e a renderização do primeiro frame daActivity
de 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 será interrompida quando a renderização do primeiro frame após (ou que contém) a chamadareportFullyDrawn()
for 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 nos valores medianos,
porque eles oferecem a melhor estimativa do tempo normal de inicialização. Para mais
informações sobre o que contribui para o tempo de inicialização do aplicativo, consulte Tempo de inicialização
do app.

StartupTimingMetric
.FrameTimingMetric
A FrameTimingMetric
captura informações de marcação de tempo de frames produzidos por uma
comparação (por exemplo, uma rolagem ou animação) e gera estes valores:
frameOverrunMs
: por quanto tempo um frame específico perdeu o prazo. Números positivos indicam uma queda de frame e instabilidade ou travamento perceptíveis. Números negativos indicam a velocidade de renderização de um frame em relação ao prazo. Observação: 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 a identificação e melhoria de frames lentos, consulte Renderização lenta.

FrameTimingMetric
.TraceSectionMetric
TraceSectionMetric
captura o número de vezes que uma seção de trace correspondente ao sectionName
fornecido ocorre e o tempo gasto. Ela gera os tempos mínimo,
mediano 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
as variantes assíncronas deles. 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 trace do pacote.
Para incluir processos fora do pacote, defina
targetPackageOnly = false
.
Para mais informações sobre rastreamento, consulte a Visão geral do rastreamento do sistema e Definir eventos personalizados.

TraceSectionMetric
.PowerMetric
A PowerMetric
captura
a mudança de energia durante o teste para as
categorias de energia fornecidas.
Cada categoria selecionada é dividida em subcomponentes mensuráveis, e as
categorias não selecionadas são adicionadas à métrica "não selecionada".
Essas métricas medem o consumo do sistema, não o consumo por app, e são limitadas aos dispositivos Pixel 6, Pixel 6 Pro e mais recentes:
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
UNCATEGORIZED
Com algumas categorias, como CPU
, pode ser difícil separar o trabalho feito por
outros processos do trabalho feito pelo seu app. Para minimizar a interferência,
remova ou restrinja contas e apps desnecessários.

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