Benchmark
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
13 de novembro de 2024 | 1.3.3 | - | - | 1.4.0-alpha05 |
Declarar dependências
Para adicionar uma dependência à biblioteca Benchmark, é preciso adicionar o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.
Macrobenchmark
Para usar o Macrobenchmark
no seu projeto, adicione as seguintes dependências ao arquivo build.gradle
do
módulo macrobenchmark:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.0") }
Microbenchmark
Para usar o Microbenchmark
no seu projeto, adicione as seguintes dependências ao arquivo build.gradle
do
módulo microbenchmark:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
A biblioteca Microbenchmark também fornece um plug-in para Gradle que será usado com seu módulo de Microbenchmark.
Esse plug-in define os padrões de configuração do build para o módulo, configura a
cópia de saída do comparativo para o host e fornece
a
tarefa ./gradlew lockClocks
.
Para usar o plug-in, inclua a seguinte linha no bloco "plugins" no seu arquivo build.gradle
de nível superior:
Groovy
plugins { id 'androidx.benchmark' version '1.3.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.0" apply false }
Em seguida, aplique o plug-in ao arquivo build.gradle
do seu módulo de comparações.
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Feedback
Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.
Consulte a documentação do Issue Tracker para saber mais.
Versão 1.4
Versão 1.4.0-alpha05
13 de novembro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha05
. A versão 1.4.0-alpha05 contém estas confirmações.
Correções de bugs
- Correção de um problema na API 34+ em que o
CompilationMode.None()
tinha um desempenho inconsistente que não representava o desempenho inicial, o pior cenário Isso funciona em torno de uma mudança na plataforma que permite que o estado de compilaçãoverify
do ART compile parcialmente os apps (afetando apenas o carregamento de classes) logo após o primeiro lançamento. (Ie48d0). - Correção de um problema em que era possível capturar rastros (principalmente curtos) que não relatavam a medição das métricas de Macrobenchmark integradas, devido ao nome do processo ser truncado no rastro do Perfetto. Agora, o macrobenchmark contorna esse problema procurando o nome do pacote truncado em todas as consultas integradas, além do nome do pacote esperado. Implementações personalizadas de
TraceMetric
ou outros autores de chamada diretos dePerfettoSession.query
podem implementar esse mesmo comportamento mudandoprocess.name LIKE "$packageName"
em uma consulta do Perfetto para(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
. (I5bf01, b/377565760).
Versão 1.4.0-alpha04
30 de outubro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha04
. A versão 1.4.0-alpha04 contém estas confirmações.
Novos recursos
- (Experimental) Ative a geração de perfil de referência e a comparação de benchmarks em apps instalados para um usuário secundário, por exemplo, qualquer app em dispositivos Android Auto sem cabeça. Esse suporte foi testado em alguns cenários, mas informe um bug se ele não funcionar para você. (I9fcbe, b/356684617, b/373641155).
Correções de bugs
- O
isProfileable
agora é sempre substituído em builds de referência, e oisDebuggable
também é sempre substituído em builds de referência enonMinified
(captura de perfil de referência). (I487fa, b/369213505). - Correção da detecção de compilação em alguns dispositivos físicos anteriores à API 28. Isso afeta o
context.compilationMode
do JSON, bem como o comportamento doandroidx.benchmark.requireAot=true
, que não é mais gerado incorretamente (Ic3e08, b/374362482). - Nas métricas
CpuEventCounter
, gerar uma exceção se medições inválidas forem observadas (por exemplo, instructions/cpucycles==0) (I8c503).
Versão 1.4.0-alpha03
16 de outubro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha03
. A versão 1.4.0-alpha03 contém estas confirmações.
Mudanças na API
- Macrobenchmark: adiciona
ArtMetric
, que pode ser usado para inspecionar a cobertura do perfil ou o desempenho geral do Android RunTime. Registra o número e a duração total de JIT, inicialização de classe (quando disponível) e verificação de classe. Além disso,CaptureInfo
foi alterado para incluir a versão principal opcional do ART por padrão. (I930f7). - Adicione
coefficientOfVariation
à saída JSON do comparativo de mercado para mostrar a estabilidade em uma determinada execução de comparativo de mercado. (Ib14ea).
Correções de bugs
- Correção de
CollectBaselineProfileTask
quando o dispositivo AVD tem espaços. (Ia0225, b/371642809). - Correção especulativa para erros de exceções
StartupMode.COLD
:Package <packagename> must not be running prior to cold start!
. Agora,MacrobenchmarkScope.killProcess()
(incluindo a execução antes de cada iteração, usada para implementar o comportamentoStartupMode.COLD
) vai aguardar para verificar se todos os processos do app pararam de ser executados. (I60aa6, b/351582215). - Correção do problema em que o erro UNLOCKED_ aparecia em alguns emuladores com acesso root. (Ic5117).
- Essa biblioteca agora usa anotações de nulidade JSpecify, que são de uso de tipo. Os desenvolvedores do Kotlin precisam usar os seguintes argumentos do compilador para aplicar o uso correto:
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
(I7104f, b/326456246).
Versão 1.4.0-alpha02
2 de outubro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha02
. A versão 1.4.0-alpha02 contém estas confirmações.
Mudanças na API
- As tarefas do Gradle
lockClocks
eunlockClocks
foram movidas para projetos de comparação, em vez de estarem disponíveis no nível principal. Essa mudança foi necessária porque não há como registrar essas ações como ações de nível superior sem quebrar o isolamento do projeto. (I02b8f, b/363325823).
Correções de bugs
- Agora,
BaselineProfileRule
coleta perfis para apps de vários processos, sinalizando cada processo em execução no final do bloco para despejar perfis. Se uma compilação baseada em perfil nunca encontrar um processo para transmitir, a compilação vai falhar, porque não é esperado que haja dados de perfil. Além disso, foi adicionado um argumento de instrumentação para controlar a duração de espera do despejo:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469). - Do Benchmark
1.3.2
: corrigimos o Firebase Test Lab (FTL) que não conseguia extrair arquivos de resultado do perfil de referência ou da Macrobenchmark do plug-in do perfil de referência para Gradle. (I2f678, b/285187547).
Para usar o FTL, aplique o plug-in ao módulo de perfil de referência no bloco de plug-ins com:
plugins {
...
id("com.google.firebase.testlab")
}
e configure o Firebase Test Lab com:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Além disso, o dispositivo FTL criado precisa ser adicionado à extensão do perfil de referência:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Versão 1.4.0-alpha01
18 de setembro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha01
. A versão 1.4.0-alpha01 contém estas confirmações.
Novo recurso: insights de inicialização de apps
- A versão inicial dos insights de inicialização do app pode ser ativada na Macrobenchmark. (09fae38).
Para ativar em uma comparação de mercado de inicialização:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
Em seguida, a execução do comparativo de inicialização vai analisar o rastro para procurar problemas comuns e imprimi-los após as métricas na saída do teste do Studio na guia de comparativo, por exemplo:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
Esse recurso ainda está em andamento, com melhorias na documentação e na extensibilidade, mas seu feedback é bem-vindo.
Novos recursos
- Adição da propriedade gradle
androidx.baselineprofile.suppressWarnings
para suprimir todos os avisos de perfil de referência. (314153a). - As métricas do microbenchmark agora são mostradas nos rastros do Perfetto como contadores. (3214854).
- Adição de scripts experimentais para desativar o JIT (requer root / reinicialização do ambiente de execução) e redefinir o estado de desempenho/teste do dispositivo. No momento, elas não são publicadas como tarefas do Gradle. (7c3732b).
- Foi adicionado um argumento de comparação para pular testes ao executar no emulador. Quando o build
automaticGenerationDuring
está ativado, os comparativos de mercado também acionam a geração de perfis de referência. Isso vai falhar se os emuladores forem usados. Com o novo argumentoskipBenchmarksOnEmulator
, podemos pular o teste. (0c2ddcd). - A lógica de ativação de eventos de desempenho foi alterada para ser executada na API 23 e versões mais recentes (2550048).
Mudanças na API
- O argumento
PerfettoConfig
experimental paraMacrobenchmarkRule.measureRepeated()
foi movido para o novo objetoExperimentalConfig
.
Correções de bugs
- Aumento da contagem de repetições de
lockClocks.sh
(99e9dac). - Não crie
nonMinified
e tipos de build de comparação de mercado se eles existirem. Devido a um bug, mesmo quenonMinified
e os tipos de build de comparação estivessem presentes, eles seriam recriados. (e75f0a5). - Ignorar fatias não terminais dos resultados de
TraceSectionMetric
. (a927d20). - Melhoria na verificação do emulador para considerar o prefixo
sdk_
. (1587de8). - Os pacotes que não estão em execução são tratados como limpos em
FrameTimingGfxInfoMetric
. (35cc79c). - Correção de
androidx.benchmark.cpuEventCounter
que gera valores corrompidos para eventos que não são de instrução. (06edd59). - Correção de
resumeTiming/runWithTimingDisabled
para respeitar a ordem de prioridade das métricas e reduzir significativamente o impacto da pausa/retomada de métricas de prioridade mais baixa nos resultados de métricas de prioridade mais alta. Por exemplo, se você usar contadores de desempenho de CPU pelo argumento de instrumentaçãocpuEventCounter.enable
, o timeNs não será mais reduzido significativamente quando ocorrer a pausa/retomada. (5de0968).
Versão 1.3
Versão 1.3.3
16 de outubro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.3
. A versão 1.3.3 contém estas confirmações.
Correções de bugs
- Correção de
CollectBaselineProfileTask
quando o dispositivo AVD tem espaços (Ia0225, b/371642809).
Versão 1.3.2
2 de outubro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.2
. A versão 1.3.2 contém estas confirmações.
Correções de bugs
- Correção de um problema no Firebase Test Lab (FTL) que não conseguia extrair arquivos de resultado do perfil de referência ou do Macrobenchmark do plug-in do perfil de referência para Gradle. (I2f678, b/285187547).
Para usar o FTL, aplique o plug-in ao módulo de perfil de referência no bloco de plug-ins com:
plugins {
...
id("com.google.firebase.testlab")
}
e configure o Firebase Test Lab com:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Além disso, o dispositivo FTL criado precisa ser adicionado à extensão do perfil de referência:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Versão 1.3.1
18 de setembro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.1
. A versão 1.3.1 contém estas confirmações.
Correções de bugs
- Adição da propriedade
androidx.baselineprofile.suppressWarnings
do Gradle para suprimir todos os avisos de perfil de referência (I7c36e, b/349646646). - O plug-in do perfil de referência para Gradle foi corrigido para usar
nonMinified…
ebenchmark…
preexistentes, se criados pelo app, em vez de criar wrappers. (Ia8934, b/361370179). - Correção de
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
quandoautomaticGenerationDuringBuild
está ativado em emuladores. Um novo argumento é usado para pular o teste. (If3f51, b/355515798). - Minimização de microcomparativo: mantenha subclasses de
org.junit.runner.notification.RunListener
no proguard da biblioteca de comparativo de mercado (Ic8ed5, b/354264743). - Correção de
TraceSectionMetric
para ignorar fatias que não terminam. Antes, eles eram considerados com duração -1, por exemplo, durante a soma ou a busca da duração mínima. (If74b7). - Correção de um problema no
FrameTimingGfxInfoMetric
em que a inicialização da métrica falhava se o processo não estivesse em execução (I6e412).
Versão 1.3.0
21 de agosto de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0
. A versão 1.3.0 contém estas confirmações.
Mudanças na comparação de Microbenchmark desde a versão 1.2.0
- O rastreamento de método fica ativado por padrão em microbenchmarks quando executado na maioria dos dispositivos
- O rastreamento de método é executado como uma fase separada, após as medições. Isso permite que medições precisas e rastreamentos de método sejam a saída de uma única execução de comparativo de mercado.
- O rastreamento de método em algumas versões do Android OS e do ART vai afetar as fases de medição posteriores. Nessas versões, o rastreamento de método está desativado por padrão, e um aviso é impresso na saída do Studio.
- Principais comparativos de mercado e ANRs da linha de execução
- Adição de
measureRepeatedOnMainThread
para comparativos de mercado de linhas de execução da interface (por exemplo, aquelas que interagem com as interfaces do Compose/View) para evitar ANRs ao executar por muitos segundos. - Os rastros de método são pulados se for esperado que ultrapassem o prazo de prevenção de ANR. Defina
androidx.benchmark.profiling.skipWhenDurationRisksAnr
como falso para desativar esse comportamento. Isso não é recomendado para execuções de CI, porque ANRs podem causar problemas em execuções de CI longas.
- Adição de
- Minificação
- Regras de proguard incorporadas para melhorar o microbenchmarking com a minificação ativada
- A minificação/R8 em um módulo de biblioteca exige o AGP 8.3 e pode ser ativada usando
android.buildTypes.release.androidTest.enableMinification
nobuild.gradle
- A API experimental
BlackHole.consume()
foi adicionada para evitar a eliminação de código inativo (If6812, b/286091643).
- Métricas
- Recurso experimental de contador de eventos da CPU (métricas de
perf_event_open
, que exigem raiz na maioria das versões da plataforma). O acesso é feito porInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(pode ser definido comotrue
) eandroidx.benchmark.cpuEventCounter.events
pode ser definido, por exemplo, como (Instructions,CpuCycles
). Isso deve ser compatível com alguns emuladores de userdebug, mas o suporte não foi testado em todos os emuladores disponíveis.
- Recurso experimental de contador de eventos da CPU (métricas de
Mudanças na MACRObenchmark desde a versão 1.2.0
- Revisão do rastreamento de método para macrobenchmarks.
- Agora, os rastros de método são limitados à duração do
measureBlock
e podem capturar várias sessões se o processo for iniciado várias vezes. - Anteriormente, o rastreamento de método só funcionava para comparativos de mercado
StartupMode.COLD
e não capturava nada parameasureBlocks
que não reiniciava o processo de destino. - Correção de flush de rastros de método no macrobenchmark, para que os rastros de método sejam totalmente capturados e válidos, mesmo em dispositivos mais lentos. (I6349a, b/329904950).
- Agora, os rastros de método são limitados à duração do
- O perfil do ART é descartado corretamente durante iterações individuais de
warmUp
quando o processo é encerrado para que as medições deCompilationMode.Partial(warmup=N)
sejam mais precisas. (I17923). - Mensagem de falha de transmissão do shader descartada
- Foram adicionadas sugestões de depuração para descartar a mensagem de falha na transmissão do sombreador.
- Adicionamos dois argumentos de instrumentação para substituir o comportamento de descarte de sombreador e contornar falhas ao comparar apps sem o
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: pode ser usado para pular todas as quedas de sombreador (incluindo as feitas em lançamentos deStartupMode.Cold
), especialmente quando se faz a comparação de apps que ainda não usam o profileinstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: pode ser usado para tolerar falhas ao tentar descartar shaders, por exemplo, ao comparar apps sem o profileinstaller 1.3 (I4f573).
- Adicionamos uma variante experimental de
MacrobenchmarkRule#measureRepeated
que usa umPerfettoConfig
personalizado para a gravação de rastros do Perfetto totalmente personalizada. Configurações incorretas podem causar falhas nas classes de métricas integradas. (Idfd3d, b/309841164, b/304038384). - Cancele os jobs dexopt em segundo plano antes de executar um Macrobenchmark para reduzir a interferência. (I989ed).
- Agora, a Macrobenchmark espera 1 segundo para que o aplicativo de destino limpe um perfil do ART (antes, ela esperava 500 ms). (I85a50, b/316082056).
- Reestruturação de TraceSectionMetric
- Observação: as mudanças de
TraceSectionMetric
abaixo podem afetar as saídas no uso da CI e criar descontinuidades ou interromper a análise - A soma agora é o padrão, já que a maioria do uso dessa métrica é para eventos repetidos, e os dados seriam descartados primeiro nesses casos.
- Foi alterado para ser mais personalizável, com mais modos disponíveis
- Os nomes de modo agora são incorporados ao nome da saída da métrica (no Studio e no JSON).
- Agora oferece suporte a fatias criadas usando
Trace.{begin|end}AsyncSection
.
- Observação: as mudanças de
- Métricas
- Liga/desliga: adição de
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
ePowerMetric.deviceSupportsPowerEnergy()
Metric.getResult
foi renomeado comogetMeasurements
para corresponder ao tipo de retorno- Adição de rótulos de log.w / exceção a todas as falhas de detecção de inicialização. Isso não muda o comportamento atual (alguns erros são gerados e outros não conseguem detectar a inicialização), apenas o torna mais compreensível. Geralmente, os que
Log.w()
e não conseguem informar as métricas de inicialização são aqueles em que os eventos não relacionados a frames estão ausentes, exceções são geradas quando a inicialização é detectada, exceto para informações de tempo de frame (de fatias de interface/RT). (Id240f, b/329145809). - Adição da medição
frameCount
aoFrameTimingMetric
para ajudar na descoberta de cenários em que as medições mudam porque o número de frames produzidos mudou (novas animações adicionadas, problemas de invalidação corrigidos). (I1e5aa). - Foi esclarecido que
frameOverrunMs
é a métrica preferida para rastreamento quando disponível nos documentos e por quê. (I18749, b/329478323). - Correção de um problema em que frames não encerrados no início e no fim do rastro podiam ser agrupados, o que resultava em um único frame extremamente longo. (I39353, b/322232828).
- Melhoria do erro
FrameTimingMetric
quando os frames não são produzidos e sempre gera um link para o rastreamento quando a análise de métricas falha para ajudar a diagnosticar o problema. (I956b9). - Correção de falha no
FrameTimingMetric
ao analisar o ID do frame, especialmente em determinados dispositivos OEM (Ia24bc, b/303823815, b/306235276). - As verificações em
FrameMetrics
ficaram menos rígidas, e mais detalhes foram adicionados às mensagens de erro. (Iadede).
- Liga/desliga: adição de
Mudanças na captura de perfis de referência / plug-in do Gradle desde a versão 1.2.0
- Aumento da versão máxima recomendada do AGP para 9.0.0-alpha01.
- As tarefas
mergeArtProfile
emergeStartupProfile
sempre aguardam a geração do perfil de referência. (I623d6, b/343086054). - A geração de um perfil de referência vai gerar um resumo do que mudou (I824c8, b/269484510).
- Adição de DSL para desativar avisos (Ic4deb, b/331237001).
- Correção para garantir que os comparativos usem perfis de referência gerados quando o
automaticGenerationDuringBuild
estiver desativado (Ic144f, b/333024280). - Correção de substituições de propriedade do plug-in do Gradle
BaselineProfile
para permitir a geração de perfis de referência e a comparação de mercado ao personalizar um tipo de buildnonMinified
ou comparativo de mercado. (Ib8f05, b/324837887). - Correção para incluir perfis de referência de biblioteca no AAR antes do AGP 8.3.0-alpha15. (I1d2af, b/313992099).
- O URL de saída do perfil de referência e de inicialização foi corrigido no final da tarefa de geração. (I802e5, b/313976958).
Outras mudanças significativas desde a versão 1.2.0
- Captura de trace
- Redução do erro EXITCODE 2 ao iniciar o perfetto de um erro para um aviso registrado
- Ativação do rastreamento AIDL por padrão nos comparativos de mercado(requer a API 28) (Ia0af2, b/341852305).
- Ativar o rastreamento de tags porter por padrão nos comparativos de mercado. Isso captura, por exemplo, pontos de rastreamento de wakelock. (Icfe44, b/286551983).
- O tempo limite de início da captura de rastros foi aumentado para evitar falhas ao iniciar o rastreamento em dispositivos mais lentos (I98841, b/329145808).
- Foram adicionadas APIs públicas
PerfettoTraceProcessor.Session.queryMetrics
com variantes JSON, textproto e proto binário (não decodificado). Isso permite consultar métricas integradas aoTraceProcessor
(I54d7f, b/304038382). - Ativação da inicialização de bloqueio no registro de rastreamento do Perfetto para reduzir o risco de dados ausentes no início do rastreamento. Suporte apenas na API 33 ou mais recente (Ie6e41, b/310760059).
- Saída JSON
- Adicionamos mais informações no contexto de comparação na saída JSON:
context.artMainlineVersion
: versão inteira do módulo principal do Art (se presente no dispositivo,-1
, caso contrário)context.build.id
: igual a android.os.Build.IDcontext.build.version.codename
: igual a android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
: corresponde à primeira letra do codinome de pré-lançamento (incluindo nos builds de lançamento) (Ie5020).
- A lista
profilerOutput
foi adicionada à saída JSON para facilitar o uso de ferramentas de rastreamento de perfil (por exemplo, Perfetto, rastros de método) (I05ddd, b/332604449). - Adicionamos um aviso quando o Android Test Orchestrator é usado em módulos de comparação, porque isso faz com que os arquivos JSON de saída por módulo sejam substituídos repetidamente. (Ia1af6, b/286899049).
- Erros são gerados quando os nomes de arquivos têm mais de 200 caracteres para evitar falhas não claras ao gravar ou processar arquivos. (I4a5ab).
- Adicionamos mais informações no contexto de comparação na saída JSON:
Versão 1.3.0-rc01
7 de agosto de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0-rc01
. A versão 1.3.0-rc01 contém estas confirmações.
Correções de bugs
- Correção de
androidx.benchmark.cpuEventCounter
que gera valores corrompidos para eventos que não são de instrução (I7386a, b/286306579). - Correção de
resumeTiming
/runWithTimingDisabled
para respeitar a ordem de prioridade das métricas e reduzir significativamente o impacto da pausa/retomada de métricas de menor prioridade nos resultados de métricas de maior prioridade. Por exemplo, se você usar contadores de desempenho de CPU pelo argumento de instrumentaçãocpuEventCounter.enable
, o timeNs não será mais reduzido significativamente quando ocorrer a pausa/retomada. (I39c2e, b/286306579, b/307445225). - Reduzimos a chance de a amostragem de pilhas causar o tempo limite rígido da linha de execução principal
measureRepeatedOnMainThread
movendo a conversão da amostragem de pilhas para fora da linha de execução principal. (I487a8, b/342237318). - O contorno manual de acesso a novas APIs da plataforma foi removido, já que isso acontece automaticamente pelo modelagem de API ao usar o R8 com o AGP 7.3 ou mais recente (por exemplo, o R8 versão 3.3) e para todos os builds ao usar o AGP 8.1 ou mais recente (por exemplo, o D8 versão 8.1). Os clientes que não estão usando o AGP precisam fazer upgrade para a versão 8.1 ou mais recente do D8. Veja mais detalhes neste artigo. (I9496c, b/345472586).
- Foi adicionada uma verificação de versão do agp para enviar o nome do pacote como parâmetro de instrução. Antes do AGP 8.4.0, o nome do pacote do app de destino não podia ser enviado ao app de instrumentação por argumentos de instrumentação. (0c72a3f).
Versão 1.3.0-beta02
10 de julho de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0-beta02
. A versão 1.3.0-beta02 contém estas confirmações.
Correções de bugs
- Processe EXITCODE
2
com cuidado ao iniciar o Perfetto para registrar um aviso, mas continue.
Versão 1.3.0-beta01
12 de junho de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0-beta01
. A versão 1.3.0-beta01 contém estas confirmações.
Mudanças na API
MethodTracing.affectsMeasurementOnThisDevice
foi renomeado comoAFFECTS_MEASUREMENT_ON_THIS_DEVICE
para manter a consistência (I1bdfa).- Adição da API experimental
BlackHole.consume()
para evitar a eliminação de código inativo em microbenchmarks. (If6812, b/286091643). - O Microbenchmark agora será lançado corretamente para evitar que o rastreamento de método interfira nas medições. Isso ocorre em determinados dispositivos quando o rastreamento de método é forçado (por argumentos de instrumentação ou
MicrobenchmarkConfig
) e se uma medição for tentada após um rastreamento de método. Os dispositivos afetados estão executando a API 26-30 ou determinadas versões do módulo principal do ART afetadas por essa interferência e podem ser detectadas no momento da execução porProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. (Iafb92, b/303660864).
Correções de bugs
- A versão máxima do AGP recomendada foi alterada para 9.0.0-alpha01. (I5bbb0).
- O modo de compilação foi adicionado ao contexto de comparação (If5612, b/325512900).
- O rastreamento AIDL foi ativado por padrão (requer a API 28) (Ia0af2, b/341852305).
- Adicionamos mais informações no contexto de comparação na saída JSON:
context.artMainlineVersion
: versão inteira do módulo principal do Art (se presente no dispositivo, -1, caso contrário)context.build.id
: igual aandroid.os.Build.ID
context.build.version.codename
: igual aandroid.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
: corresponde à primeira letra do codinome de pré-lançamento (mesmo em builds de lançamento) (Ie5020).
- Correção de
StackSampling
para respeitarandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53). - Mude a dependência macro->common para
api()
, para que seja mais fácil de usar, por exemplo,PerfettoTrace
ePerfettoConfig
. (Icdae3, b/341851833). - As tarefas
mergeArtProfile
emergeStartupProfile
sempre aguardam a geração do perfil de referência. (I623d6, b/343086054). - Considere o estado de ativação da variante ao decidir se ela deve ser ativada. (I5d19e, b/343249144).
- Aumento do tempo limite de início padrão para o processador de rastros do perfetto. (I87e8c, b/329145808).
Versão 1.3.0-alpha05
14 de maio de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0-alpha05
. A versão 1.3.0-alpha05 contém estas confirmações.
Correções de bugs
- Exceção mais clara quando a métrica de macrobench retorna valores zero para todas as iterações (Iab58f, b/314931695).
- Regras de solução alternativa adicionais foram adicionadas às regras de proguard do microbench, incluindo suporte a regras de listener e outros avisos / erros observados. (I14d8f, b/329126308, b/339085669).
- O rastreamento de método é executado como uma fase separada durante um Macrobenchmark e não afeta mais as medições. (If9a50, b/285912360, b/336588271).
- Foram adicionadas sugestões de depuração extras para descartar a mensagem de falha de transmissão do sombreador. (I5efa6, b/325502725).
Versão 1.3.0-alpha04
1º de maio de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0-alpha04
. A versão 1.3.0-alpha04 contém estas confirmações.
Mudanças na API
- Adicionamos uma variante experimental de
MacrobenchmarkRule#measureRepeated
que usa umPerfettoConfig
personalizado para a gravação de rastros do Perfetto totalmente personalizada. Configurações incorretas podem causar falhas nas classes de métricas integradas. (Idfd3d, b/309841164, b/304038384). - Renomeação de
PowerMetric.deviceSupportsPowerEnergy
comoPowerMetric.deviceSupportsHighPrecisionTracking
para maior clareza (I5b82f). - Foram adicionados
PowerMetric.deviceBatteryHasMinimumCharge()
ePowerMetric.deviceSupportsPowerEnergy()
para permitir a mudança ou a omissão de comparativos de mercado com base na capacidade de medição de energia do dispositivo. (I6a591, b/322121218).
Correções de bugs
- Adição de comparação com o perfil de referência anterior (I824c8, b/269484510).
- Adição de DSL para desativar avisos (Ic4deb, b/331237001).
- A exceção foi alterada para registro de informações quando as variantes de comparação são desativadas (I8a517, b/332772491).
- A captura de rastros de método de uma Macrobenchmark é simplificada para a duração da
measureBlock()
. Anteriormente, ele era iniciado na inicialização do processo de destino e só aceitava inicializações a frio (Iee85a, b/300651094). - Evita falhas quando o processador de rastros do perfetto demora para iniciar (I98841, b/329145808).
Versão 1.3.0-alpha03
17 de abril de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0-alpha03
. A versão 1.3.0-alpha03 contém estas confirmações.
Novos recursos
- Adiciona APIs públicas
PerfettoTraceProcessor.Session.queryMetrics
com variantes JSON, textproto e proto binário (não decodificado). Isso permite consultar as métricas integradas ao TraceProcessor (I54d7f, b/304038382). profilerOutput
foi adicionado à saída JSON para facilitar a criação de ferramentas relacionadas a rastros de perfil (por exemplo, perfetto, rastros de método). (I05ddd, b/332604449).- A tag de energia foi adicionada ao comparativo de mercado da Perfetto Config. Isso captura, por exemplo, pontos de rastreamento de wakelock. (Icfe44, b/286551983).
- O argumento inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
foi adicionado. Ele pode ser definido como "false" para evitar a omissão de rastros de método quando a duração esperada pode causar um ANR. É altamente recomendável evitar isso em execuções de CI. - Foi adicionado o argumento inst experimental
androidx.benchmark.profiling.perfCompare.enable
. Defina como verdadeiro para executar o tempo de comparação entre as fases de medição e de criação de perfil. Útil, por exemplo, para avaliar a sobrecarga da geração de rastros de método. (I61fb4, b/329146942).
Mudanças na API
- A
TraceSectionMetric.Mode
foi alterada para uma classe selada para permitir a expansão futura sem interromper instruções "when" exaustivas (I71f7b). - Foram adicionados
TraceSectionMetric.Mode.Average
e.Count
, e os argumentos foram reordenados para que o argumento mais comum (modo) ficasse mais cedo na lista de argumentos, reduzindo a necessidade de especificar nomes de parâmetros. (Ibf0b0, b/315830077, b/322167531). Metric.getResult
foi renomeado comogetMeasurements
para corresponder ao tipo de retorno (I42595).
Correções de bugs
- Correção para garantir que os comparativos usem perfis de referência gerados quando o
automaticGenerationDuringBuild
estiver desativado (Ic144f, b/333024280). - Correção de substituições de propriedade do plug-in do Gradle
BaselineProfile
para permitir a geração de perfis de referência e a comparação de mercado ao personalizar um tipo de buildnonMinified
ou comparativo de mercado. (Ib8f05, b/324837887). - Correção de flush de rastros de método no macrobenchmark, para que os rastros de método sejam totalmente capturados e válidos, mesmo em dispositivos mais lentos. (I6349a, b/329904950).
- Ativação da inicialização de bloqueio no registro de rastreamento do Perfetto para reduzir o risco de dados ausentes no início do rastreamento. Suporte apenas na API 33 ou mais recente (Ie6e41, b/310760059).
- Adicionamos um aviso quando o Android Test Orchestrator é usado em módulos de comparação, porque isso faz com que os arquivos JSON de saída por módulo sejam substituídos repetidamente. (Ia1af6, b/286899049).
- Os separadores de milhares "," (vírgula) são forçados para consistência na saída do Studio, ignorando a localidade do dispositivo (I3e921, b/313496656).
- A
TraceSectionMetric
agora oferece suporte a fatias criadas usandoTrace.{begin|end}AsyncSection
. (I91b32, b/300434906). - Adição de rótulos de log.w / exceção a todas as falhas de detecção de inicialização. Isso não muda o comportamento atual (alguns erros são gerados e outros não conseguem detectar a inicialização), apenas o torna mais compreensível. Geralmente, os que
Log.w()
e não conseguem informar as métricas de inicialização são aqueles em que os eventos não relacionados a frames estão ausentes, exceções são geradas quando a inicialização é detectada, exceto para informações de tempo de frame (de fatias de interface/RT). (Id240f, b/329145809). - Cancele os jobs dexopt em segundo plano antes de executar um Macrobenchmark para reduzir a interferência. (I989ed).
- Adição da medição
frameCount
aoFrameTimingMetric
para ajudar na descoberta de cenários em que as medições mudam porque o número de frames produzidos mudou (novas animações adicionadas, problemas de invalidação corrigidos). (I1e5aa). - Foi esclarecido que
frameOverrunMs
é a métrica preferida para rastreamento quando disponível nos documentos e por quê. (I18749, b/329478323).
Versão 1.3.0-alpha02
20 de março de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0-alpha02
. A versão 1.3.0-alpha02 contém estas confirmações.
Novos recursos
Suporte experimental do R8 no microbench por regras de ProGuard incorporadas. Esse suporte é experimental e requer o AGP 8.3 para a minificação de testes de módulo de biblioteca. Use o seguinte para ativar a minificação/otimização do R8 no
build.gradle
do módulo de comparação, o que deve levar a um aumento significativo no desempenho, dependendo da carga de trabalho. (I738a3, b/184378053).android { buildTypes.release.androidTest.enableMinification = true }
Correções de bugs
- O aviso de rastreamento de método é corrigido para estar em uma linha separada da saída do microbenchmark. (I0455c, b/328308833).
Versão 1.3.0-alpha01
21 de fevereiro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.3.0-alpha01
. A versão 1.3.0-alpha01 contém estas confirmações.
Mudanças na API
- Os parâmetros booleanos
MicrobenchmarkConfig
foram renomeados para evitar a palavra desnecessária "should" (Ia8f00, b/303387299). - Adição de
BenchmarkRule.measureRepeatedOnMainThread
para que os comparativos de mercado da linha de execução principal (por exemplo, os que tocam em visualizações ou interfaces do Compose) possam evitar o acionamento de ANRs, especialmente durante grandes pacotes na CI. (I5c86d). - Adição de
FrameTimingGfxInfoMetric
, uma implementação alternativa experimental deFrameTimingMetric
com medições provenientes diretamente da plataforma, em vez de extraídas do rastro do Perfetto. (I457cb, b/322232828). - Foi adicionada a capacidade de despejar um perfil do ART durante iterações individuais de
warmUp
(I17923). - Várias mudanças na API
TraceSectionMetric
:- Adiciona
Mode.Min
,Mode.Max
- Adicionar argumento de rótulo para substituir o nome da seção como rótulo de métrica
- O nome do modo foi adicionado à saída para esclarecer o significado da métrica.
- O padrão foi alterado para "soma", já que a maioria do uso dessa métrica é para eventos repetidos. Fique atento a essas mudanças no uso da CI, já que elas podem criar descontinuidades ou interromper a análise. (Ic1e82, b/301892382, b/301955938).
- Adiciona
Correções de bugs
- Melhoria na mensagem de erro no plug-in do Gradle do perfil de referência quando o dispositivo gerenciado especificado não existe (Idea2b, b/313803289).
- Correção para incluir perfis de referência de biblioteca no AAR antes do AGP 8.3.0-alpha15 (I1d2af, b/313992099).
- Correção do URL de saída do perfil de referência e de inicialização no final da tarefa de geração (I802e5, b/313976958).
- Os tempos limite da fonte de dados foram ajustados para tentar corrigir
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788). - Adicionamos dois argumentos de instrumentação para substituir o comportamento de descarte de sombreador e contornar falhas ao comparar apps sem o
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: pode ser usado para pular todas as quedas de sombreador (incluindo as feitas em lançamentos deStartupMode.Cold
), especialmente quando se faz a comparação de apps que ainda não usam o profileinstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: pode ser usado para tolerar falhas ao tentar descartar shaders, por exemplo, ao comparar apps sem o profileinstaller 1.3 (I4f573).
- O rastreamento de método é ignorado na linha de execução da interface quando se espera que demore mais do que alguns segundos, e o rastreamento de método de limpeza é ignorado ao gerar. (I6e768).
- Erros são gerados quando os nomes de arquivos têm mais de 200 caracteres para evitar falhas não claras ao gravar ou processar arquivos. (I4a5ab).
- Correção de um problema em que frames não encerrados no início e no fim do rastro podiam ser agrupados, o que resultava em um único frame extremamente longo. (I39353, b/322232828).
- Use
--skip verification
na API 30 ou mais recente ao reinstalar um pacote na API 30-33 para limpar os perfis do ART em builds do usuário. Isso ajuda a contornar os avisos do Play Protect que causam falhas em algumas classes de dispositivos. (Ic9e36). - Use
am force-stop
para encerrar apps que não são do sistema, como a interface do sistema ou a tela de início. (I5e028). - A Macrobenchmark agora aguarda
1 second
para que o aplicativo de destino limpe um perfil do ART (antes, ela aguardava500 ms
). (I85a50, b/316082056). - Melhoria do erro
FrameTimingMetric
quando os frames não são produzidos e sempre gera um link para o rastreamento quando a análise de métricas falha para ajudar a diagnosticar o problema. (I956b9). - Correção de falha no
FrameTimingMetric
ao analisar o ID do frame, especialmente em determinados dispositivos OEM (Ia24bc, b/303823815, b/306235276). - As verificações em
FrameMetrics
ficaram menos rígidas, e mais detalhes foram adicionados às mensagens de erro. (Iadede).
Versão 1.2
Versão 1.2.4
17 de abril de 2024
Lançamento de androidx.benchmark:benchmark-*:1.2.4
. A versão 1.2.4 contém estas confirmações.
Correções de bugs
- Correção do srcset do perfil de referência que não estava sendo configurado nas variantes de comparação. Também corrige
automaticGenerationDuringBuild
em bibliotecas que causam uma dependência circular. (I28ab7, b/333024280). - Use
am force-stop
para encerrar apps que não são do sistema, como a interface do sistema ou a tela de início. Isso corrige as comparações de mercadoStartupMode.COLD
que falham em "O pacote $package não pode ser executado antes da inicialização a frio!" devido ao processo de eliminação não ter sido totalmente bem-sucedido. (I5e028).
Versão 1.2.3
24 de janeiro de 2024
Lançamento de androidx.benchmark:benchmark-*:1.2.3
. A versão 1.2.3 contém estas confirmações.
Correções de bugs
- A exceção foi removida do plug-in do perfil de referência para Gradle quando a versão do AGP é 8.3.0 ou mais recente.
- Correção para incluir perfis de referência de biblioteca no AAR antes do AGP 8.3.0-alpha15.
Versão 1.2.2
1 de dezembro de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.2
. A versão 1.2.2 contém estas confirmações.
Perfis de referência
- Os registros de execução vão mostrar o caminho do arquivo de saída do perfil de referência como um URI de arquivo local (aosp/2843918, aosp/2853665, b/313976958).
Versão 1.2.1
15 de novembro de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.1
. A versão 1.2.1 contém estas confirmações.
Novos recursos
- Melhoramos a mensagem de erro quando o usuário desativa as variantes de teste (b/307478189).
- Adição de propriedades para oferecer suporte à integração de execução de teste do AS (b/309805233), (b/309116324).
Versão 1.2.0
18 de outubro de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0
. A versão 1.2.0 contém estas confirmações.
Mudanças importantes desde a 1.1.0
Perfis de referência
- O novo plug-in do perfil de referência para Gradle automatiza a captura e a inclusão de perfis de referência no fluxo de trabalho de teste e build.
BaselineProfileRule.collect
agora é estável, uma versão simplificada e simplificada da APIBaselineProfileRule.collectBaselineProfile
experimental anterior- Basta especificar
packageName
e direcionar seu app
- Basta especificar
- Para bibliotecas que geram perfis de referência, agora é possível filtrar as regras geradas no código (argumento
BaselineProfileRule.collect
) ou de forma ainda mais simples no plug-in do Gradle. - Correções
- Correção da coleta de perfil de referência no Android U+ (Id1392, b/277645214).
Macrobenchmark
- Compilação
- O Macrobenchmark agora redefine totalmente o estado de cada compilação. Isso exige a reinstalação do APK antes do Android 14. Portanto, o benchmarking no Android 14 ou versões mais recentes é altamente recomendado se você quiser manter o estado (como o login do usuário) no que está sendo medido.
- Você também pode controlar a compilação do app separadamente e pular a compilação com
CompilationMode.Ignore()
ou argumento de instrumentação.
Argumentos de instrumentação
- Suporte ao argumento de instrumentação
androidx.benchmark.dryRunMode.enable
(já disponível em microbenchmark) para execuções de validação mais rápidas (por exemplo, ao criar o comparativo de mercado ou no pré-envio) - Suporte para
androidx.benchmark.profiling.mode=StackSampling
eMethodTracing
. - Adição de
androidx.benchmark.enabledRules
para permitir a filtragem de perfil de referência em tempo de execução em comparação com testes de regra de Macrobenchmark - O argumento
androidx.benchmark.perfettoSdkTracing.enable
foi adicionado para ativar o rastreamento com o tracing-perfetto, por exemplo, o rastreamento de recomposição do Compose. Quando usado comStartupMode.COLD
, o tempo é afetado significativamente, já que a biblioteca de rastreamento é carregada e ativada durante a inicialização do app.
- Suporte ao argumento de instrumentação
Requisitos
- Agora, o Macrobenchmark exige o
ProfileInstaller
1.3.0 ou mais recente no app de destino para ativar a captura / redefinição de perfil e a limpeza do cache do sombreador.
- Agora, o Macrobenchmark exige o
Novas APIs de métricas experimentais
- Foi adicionado o
TraceSectionMetric
experimental, que permite extrair o tempo simples de blocostrace("") {}
no app ou TraceMetric para aproveitar o recurso de consulta completo do PerfettoTraceProcessor
. - Adição de
PowerMetric
experimental para capturar informações de uso de energia - Adição de
MemoryCountersMetric
experimental para contar falhas de página - A API experimental
PerfettoTraceProcessor
foi adicionada. Ela é usada internamente para extrair métricas de rastros do sistema (também conhecidos como rastros do Perfetto).
- Foi adicionado o
Correções
- Correção de falhas ao instalar ou extrair perfis de um app instalado de vários APKs (por exemplo, de um pacote de apps).
FrameTimingMetric
foi corrigido para ignorar frames com IDs de frame inconsistentes (geralmente, frames durante ondulações na API 31+). (I747d2, b/279088460).- Correção de erros de análise em rastros com mais de 64 MB (Ief831, b/269949822).
- Os erros foram esclarecidos quando a imagem do SO do dispositivo (principalmente do emulador) não estava configurada corretamente para rastreamento ou compilação.
- A verificação do nível de bateria é ignorada em dispositivos sem bateria (micro e macro).
- Saída de arquivo aprimorada, com erros mais claros para diretórios de saída inválidos e padrões mais seguros
- Melhoria na estabilidade de
StartupMode.COLD
com a eliminação consistente do cache de sombreador (também exposto porMacrobenchmarkScope.dropShaderCache
) - Correção do substituto do Leanback para
startActivityAndWait
.
Microbenchmark
- Recursos
- A criação de perfil foi movida para uma fase separada, após outras métricas, para que uma execução de teste possa mostrar resultados precisos de tempo e de criação de perfil.
- APIs experimentais
- Adição da API experimental
MicrobenchmarkConfig
para definir métricas personalizadas e configurar o rastreamento e o perfil. Pode ser usado para capturar rastros de método ou pontos de rastreamento (mas esteja ciente da sobrecarga de rastreamento). - Foram adicionadas APIs experimentais para controlar o
BenchmarkState
separadamente doBenchmarkRule
, sem o JUnit - Foi adicionado um registro experimental
PerfettoTrace
para permitir a captura de rastros do Perfetto com configuração personalizada, separada das APIs de comparação.
- Adição da API experimental
- Correções
- Solução alternativa para espaços em branco iniciais ausentes na saída de comparação do Android Studio.
- Correção do problema em que os avisos não eram impressos na saída de comparativo de mercado do Android Studio.
- Correção da falha
SampledProfiling
no Android 13 (nível 33 da API) e mais recentes. - Melhoria significativa no desempenho de
dryRunMode
com a exclusão deIsolationActivity
e do rastreamento do Perfetto (modo de teste até 10 vezes mais rápido em versões mais antigas do SO).
Versão 1.2.0-rc02
6 de outubro de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-rc02
. A versão 1.2.0-rc02 contém estas confirmações.
Correções de bugs
- A saída do arquivo de comparação de mercado foi corrigida para não interromper mais a cópia de arquivos de plug-in
BaselineProfile
. Os arquivos foram gerados e copiados do dispositivo, mas foram renomeados para que o plug-in do Gradle não os encontrasse. (I8dbcc, b/303034735, b/296453339). - As mensagens de erro de carregamento
tracing-perfetto
foram esclarecidas ao injetar do módulo macrobenchmark no aplicativo de destino.
Versão 1.2.0-rc01
20 de setembro de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-rc01
. A versão 1.2.0-rc01 contém estas confirmações.
Correções de bugs
- Uma exceção (com instruções de correção) agora é gerada quando o rastreamento do SDK do Perfetto não consegue ser inicializado em um comparativo de mercado. (I6c878, b/286228781).
- Correção de falha de OOM ao converter o formato de rastro de método do ART para o formato do Perfetto. (I106bd, b/296905344).
- (Macrobenchmark) O rótulo de rastreamento de método foi esclarecido quando vinculado à saída do teste do Studio, e os nomes de arquivo de rastreamento de método foram corrigidos para serem exclusivos no dispositivo/host, para que não sejam substituídos quando mais de um comparativo de mercado for executado. (I08e65, b/285912360).
- Garante que o dispositivo esteja ativo ao capturar um perfil de referência. (I503fc).
Versão 1.2.0-beta05
30 de agosto de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-beta05
. A versão 1.2.0-beta05 contém estas confirmações.
Novos recursos
- O Plug-in do perfil de referência para Gradle agora oferece suporte ao Plug-in do Android para Gradle 8.3. (aosp/2715214).
Versão 1.2.0-beta04
23 de agosto de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-beta04
. A versão 1.2.0-beta04 contém estas confirmações.
Novos recursos
- O plug-in do perfil de referência para Gradle agora oferece suporte ao Plug-in do Android para Gradle 8.3. (aosp/2715214).
Correções de bugs
- Correção de falhas na gravação / movimentação e extração de arquivos (principalmente aqueles de testes parametrizados) limpando ainda mais os nomes dos arquivos de saída, evitando "=" e ":" nos nomes dos arquivos de saída. (I759d8).
Versão 1.2.0-beta03
9 de agosto de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-beta03
. A versão 1.2.0-beta03 contém estas confirmações.
Mudanças na API
- Foi adicionado um argumento para filtrar
TraceSectionMetric
apenas para o pacote de destino, ativado por padrão (Ia219b, b/292208786).
Correções de bugs
- O argumento de instrumentação
fullTracing.enable
foi renomeado comoperfettoSdkTracing.enable
para consistência com o nome do artefato e outras referências.fullTracing.enable
vai continuar funcionando como uma alternativa. (I7cc00). - Os pontos de rastreamento internos da biblioteca de referência (incluindo o rastreamento de fase/ciclo de microbenchmark) agora aparecem no visualizador de rastreamento do sistema do Studio e são aninhados no processo correto no Perfetto. (I6b2e7, b/293510459).
- O erro NOT-PROFILEABLE do macrobenchmark foi removido da API 31 e versões mais recentes, e a verificação de perfil foi pulada em dispositivos enraizados eng/userdebug. (I2abac, b/291722507).
- Ao usar as otimizações de layout DEX, as regras de perfil de inicialização também são consideradas como regras de perfil de referência. (aosp/2684246, b/293889189).
Versão 1.2.0-beta02
26 de julho de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-beta02
. A versão 1.2.0-beta02 contém estas confirmações.
Mudanças na API
- Foram adicionadas APIs experimentais para métricas e configuração personalizadas de microbench (por exemplo, perfilador e rastreamento). (I86101, b/291820856).
Correções de bugs
- Erro de relatório em macrobench quando o SO está configurado incorretamente para rastreamento, como foi corrigido recentemente nos emuladores ARM64 da API 26/28. (I0a328, b/282191686).
- Adicionamos detalhes à falha de redefinição de compilação para sugerir a atualização do emulador, já que alguns emuladores corrigiram esse problema recentemente. (I8c815, b/282191686).
- Faça
androidx.test.uiautomator:uiautomator:2.2.0
ser uma dependênciaapi
em vez deimplementation
. (I1981e).
Versão 1.2.0-beta01
18 de julho de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-beta01
. A versão 1.2.0-beta01 contém estas confirmações.
Correções de bugs
- Correção de avisos que às vezes eram suprimidos na saída de comparação no Studio e solução alternativa para espaços em branco iniciais da saída de comparação que não apareciam no Studio (Ia61d0, b/227205461, b/286306579, b/285912360).
- Correção do comentário para
FrameTimingMetric
. A submétrica é chamada deframeDurationCpuMs
. (Ib097f, b/288830934).
Versão 1.2.0-alpha16
21 de junho de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha16
. A versão 1.2.0-alpha16 contém estas confirmações.
Mudanças na API
- A API
BaselineProfileRule.collectBaselineProfile()
foi renomeada comoBaselineProfileRule.collect()
. (I4b665).
Correções de bugs
- Suporte da Macrobenchmark para
androidx.benchmark.profiling.mode = MethodTracing
. (I7ad37, b/285912360). - O perfil de microbenchmark foi movido para uma fase separada, portanto, ocorre na sequência após a medição, em vez de substituí-la. As seções de rastro
MethodTracing
também são incluídas no rastro do Perfetto capturado, se presentes. (I9f657, b/285014599). - Adicione a medição de contagem a
TraceSectionMetric
comMode.Sum
. (Ic121a, b/264398606).
Versão 1.2.0-alpha15
7 de junho de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha15
. A versão 1.2.0-alpha15 contém estas confirmações.
Novos recursos
- Adição de
MemoryUsageMetric
experimental para rastrear o uso de memória de um aplicativo de destino. (I56453, b/133147125, b/281749311). - Adição de suporte a configurações do Perfetto totalmente personalizadas com
PerfettoTrace.record
(If9d75, b/280460183). - Foi adicionada uma propriedade para pular a geração de perfis de referência. Uso:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020).
Mudanças na API
- A API
collectBaselineProfile
sempre gera perfis de referência estáveis. A APIcollectStableBaselineProfile
foi removida, ecollectBaselineProfile
deve ser usada. (I17262, b/281078707). - O argumento
filterPredicate
deBaselineProfileRule
foi alterado para não nulo, com um valor padrão equivalente, para que o comportamento padrão do filtro fique mais claro nos documentos. (I3816e).
Correções de bugs
- Desative o rastreamento
IsolationActivity
e Perfetto emdryRunMode
para melhorar significativamente o desempenho, já que eles eram a maioria do tempo de execução. (Ie4f7d). - Suporte a amostragem de pilha de chamadas em Macrobenchmarks usando argumentos de teste de instrumentação
androidx.benchmark.profiling.mode=StackSampling
eandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489). - Correção de falha ao soltar shaders no Android U (API 34) e em emuladores. (I031ca, b/274314544).
Versão 1.2.0-alpha14
3 de maio de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha14
. A versão 1.2.0-alpha14 contém estas confirmações.
Correções de bugs
- Correção de
FrameTimingMetric
ignorando frames com IDs de frame inconsistentes. Isso faria com que algumas animações em versões recentes da plataforma (API 31+) ignorassem muitos frames enquantoRenderThread
estivesse animando (por exemplo, durante uma ondulação). (I747d2, b/279088460). - Correção da análise do processador de rastreamento para rastros maiores que 64 MB. (Ief831, b/269949822).
- Correção da geração de perfil de referência no Android U com falha devido à saída diferente do comando
pm dump-profiles
. (Id1392, b/277645214). - Correção do script de bloqueio do relógio da GPU para comparar strings corretamente (I53e54, b/213935715).
Versão 1.2.0-alpha13
5 de abril de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha13
. A versão 1.2.0-alpha13 contém estas confirmações.
Mudanças na API
- Foi adicionado um parâmetro de tipo de perfil ao gerar perfis de referência para oferecer suporte ao próximo recurso de perfil de inicialização (Ie20d7, b/275093123).
- Adicionamos uma nova API
TraceMetric
experimental para definir métricas totalmente personalizadas com base no conteúdo de um rastro do Perfetto. (I4ce31, b/219851406). - Adicione uma métrica experimental para determinar o número de falhas de página durante uma comparação. (I48db0).
Versão 1.2.0-alpha12
22 de março de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha12
. A versão 1.2.0-alpha12 contém estas confirmações.
Novos recursos
- O novo plug-in do Gradle para perfil de referência foi lançado na versão Alfa, facilitando a geração de um perfil de referência e simplificando o fluxo de trabalho do desenvolvedor.
Mudanças na API
- O suporte ao rastreamento do Perfetto foi removido das APIs 21 e 22, o que inclui microbenchmarks e as APIs
PerfettoTrace
experimentais. Antes desta versão, as conexõesUiAutomation
não eram confiáveis em alguns dispositivos. (I78e8c). - Foi adicionada uma API experimental pública para
PerfettoTraceProcessor
para permitir a análise do conteúdo do rastro. Essa é uma etapa para métricas totalmente personalizadas com base nos dados de rastro do Perfetto. (I2659e, b/219851406).
Versão 1.2.0-alpha11
8 de março de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha11
. A versão 1.2.0-alpha11 contém estas confirmações.
Correções de bugs
- Correção de falhas em
MacrobenchmarkRule
eBaselineProfileRule
ao reinstalar ou extrair perfis de um pacote de apps com vários APKs. (I0d8c8, b/270587281).
Versão 1.2.0-alpha10
22 de fevereiro de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha10
. A versão 1.2.0-alpha10 contém estas confirmações.
Novos recursos
- Graças a um novo recurso da plataforma, o Macrobenchmark não reinstala mais os apps de destino para redefinir o estado de compilação no Android 14 e mais recentes. Antes, era necessário ter um dispositivo com acesso root ou lidar com a remoção de todo o estado do aplicativo (por exemplo, o login do usuário) antes da execução de cada comparativo de mercado (I9b08c, b/249143766).
Correções de bugs
DryRunMode
foi corrigido para não falhar mais com o perfil vazio devido à ação de pular a compilação. Em vez disso, ele executa uma única iteração e extrai o perfil para garantir que algo seja capturado (I2f05d, b/266403227).- Foi corrigida a falha de
PowerMetric
ao verificar a presença de powerstats em níveis antigos da API (5faaf9, b/268253898).
Versão 1.2.0-alpha09
11 de janeiro de 2023
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha09
. A versão 1.2.0-alpha09 contém estas confirmações.
Correções de bugs
- É permitida a transmissão de
None
paraandroidx.benchmark.enabledRules
a fim de desativar a geração de comparativos de mercado ou de perfis de referência (I3d7fd, b/258671856). - Correção da captura de
PerfettoTrace
em módulos de apps, ou seja, APKs de teste sem autoinstrumentação (I12cfc). - Correção da ordem para argumentos de extração adb do perfil de referência na saída do Studio (I958d1, b/261781624).
- Agora, a API 33 do emulador Arm é reconhecida corretamente quando tenta executar uma Macrobenchmark e mostra o aviso corretamente (69133b,b/262209591).
- A verificação de nível de carga em dispositivos sem bateria é ignorada na Macrobenchmark (fe4114, b/232448937).
Versão 1.2.0-alpha08
7 de dezembro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha08
. A versão 1.2.0-alpha08 contém estas confirmações.
Mudanças na API
- As novas APIs experimentais
PerfettoTrace.record {}
ePerfettoTraceRule
foram adicionadas para capturar rastros do Perfetto, também conhecidos como rastreamentos do sistema, como parte de um teste para inspecionar o comportamento e a performance (I3ba16). BaselineProfileRule
agora aceita um predicado de filtro em vez de uma lista de prefixos de pacote. Isso dá ao teste controle total sobre a filtragem (I93240).- Foi adicionada uma API experimental
BaselineProfileRule.collectStableBaselineProfile
que aguarda até que um perfil de referência esteja estável para N iterações (I923f3). - Foi adicionada a capacidade de especificar um prefixo de nome de arquivo de saída ao gerar perfis de referência usando
BaselineProfileRule
(I7b59f, b/260318655).
Correções de bugs
- Melhora da segurança da gravação de saída de arquivos, o que deve impedir que os arquivos de saída sejam gravados / anexados de forma silenciosa, especialmente na API 21/22 (If8c44, b/227510293).
- O resultado de rastreamento
simpleperf
foi corrigido para criar e posicionar o arquivo corretamente. Isso também deve resolver problemas mais gerais em que um arquivo não é extraído pelo Gradle (I12a1c, b/259424099). - Melhoria na mensagem de erro de profileinstaller quando o profileinstaller é muito antigo. Agora, você precisa atualizar a versão do profileinstaller (1.2.1) para medir os perfis de referência na API 31 a 33, em vez de dizer que não há suporte para ela (Ia517f, b/253519888).
- Correção de várias falhas de comando de shell na mensagem de erro API de impressão necessária <=23, incluindo falhas na configuração do perfetto para capturar binários e falhas na captura de rastros (Ib6b87, b/258863685).
- Ordenação automática das regras de perfil geradas para minimizar o número de mudanças ao longo do tempo (ao verificar regras de perfil no controle de origem) (Ie2509).
- Correção de uma falha em builds sem acesso root abaixo do Android 13 (API 33) com a mensagem
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
(I6c245, b/259508183).
Problemas conhecidos:
- MacrobenchmarkScope.dropShaderCache()
pode falhar devido a um registro de transmissão ausente no manifesto do profileinstaller, que ainda não foi lançado (I5c728, b/258619948). Para resolver o problema em profileinstaller:1.3.0-alpha02
, adicione o código abaixo ao arquivo AndroidManifest.xml do aplicativo, não o do comparativo:
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Versão 1.2.0-alpha07
9 de novembro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha07
. A versão 1.2.0-alpha07 contém estas confirmações.
Mudanças na API
- A API
PowerMetric
foi adicionada para medir a energia e potência em macrobenchmarks (Ife601, b/220183779). MacrobenchmarkScope.dropShaderCache()
foi corrigido para descartar o cache de sombreador. Isso remove aproximadamente 20 ms de ruído das comparações doStartupMode.COLD
, já que os sombreadores agora são apagados de forma consistente em cada iteração. Anteriormente, a compilaçãoPartial
, usando iterações de aquecimento, informava números rápidos incorretos, já que o armazenamento em cache do sombreador era mais provável de acontecer durante o aquecimento. Essa correção exige um dispositivo com acesso root ou o uso deprofileinstaller:1.3.0-alpha02
no app de destino. Para ver as mudanças na API da bibliotecaProfileInstaller
, consulte a página ProfileInstaller 1.30-alpha02 (Ia5171, b/231455742).TraceSectionMode("label", Mode.Sum)
foi adicionado para permitir a medição do tempo total gasto em várias seções de rastreamento com o mesmo rótulo. Por exemplo,TraceSectionMetric("inflate", Mode.Sum)
vai informar uma métricainflateMs
pelo tempo total em uma macrobenchmark gasta na inflação. Também removemos o requisito da API de nível 29, já que aTraceSectionMetric
funciona comandroidx.tracing.Trace
de volta aos níveis mais baixos da API, com o uso deforceEnableAppTracing
no app de destino (Id7b68, b/231455742).
Correções de bugs
- A segurança de todos os comandos do shell interno foi melhorada com a validação de todas as saídas/erros (I5984d, b/255402908, b/253094958).
- O dispositivo no comando
adb pull
do perfil de referência foi especificado. Dessa forma, o comando pull poderá ser simplesmente copiado se vários dispositivos estiverem conectados (até no máximo um emulador) (I6ac6c, b/223359380). - Foi adicionado um erro caso o APK de teste de macrobenchmark não esteja configurado para autoinstrumentação. Esse erro impede o processo de macrobenchmark do app de destino. No processo, o macrobench não pode compilar/encerrar/inicializar a frio o app nem controlar as próprias permissões (I4279b).
- Foi corrigido um problema de
measureRepeated()
em queStartupMode.COLD
não encerrava o processo de destino apóssetupBlock
. Agora, a interação desetupBlock
com o app não deixará o processo do app em execução e uma medição inválida de inicialização a frio (I8ebb7).
Versão 1.2.0-alpha06
24 de outubro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha06
. A versão 1.2.0-alpha06 contém estas confirmações.
Mudanças na API
BaselineProfileRule
não exige mais acesso root no Android 13 (nível 33 da API) e não é mais experimental (Ie0a7d, b/250083467, b/253094958).- Essa mudança também corrige como os perfis de um app são transferidos para o disco em dispositivos sem acesso root. Atualize a dependência do profileinstaller no app de destino.
- Para usar
BaselineProfileRule
ouCompilationMode.Partial(warmupIterations)
em um dispositivo sem acesso root, também é necessário atualizar oandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
no app de destino. Isso permite transferir o perfil para o disco corretamente para que ele seja compilado/extraído.
Correções de bugs
- Foi corrigida uma falha de
SampledProfiling
no nível 33 da API ou mais recente (I40743, b/236109374).
Versão 1.2.0-alpha05
5 de outubro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha05
. A versão 1.2.0-alpha05 contém estas confirmações.
Correções de bugs
- Foi corrigido o detalhamento de frames no visualizador de rastreamento do sistema do Studio para rastros de comparação capturados (I3f3ae, b/239677443).
- O
FrameTimingMetric
foi corrigido para listarFrameOverrun
como exigindo a API 31 em vez de 29 (I716dd, b/220702554). - A iteração em
BaselineProfileRule
foi definida, e agora fica claro quando o pacote de destino não está instalado, o que já era feito para MacrobenchmarkRule (Ic09a3, b/227991471)
Versão 1.2.0-alpha04
21 de setembro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha04
. A versão 1.2.0-alpha04 contém estas confirmações.
Novos recursos
Foi adicionado suporte ao argumento de instrumentação
dryRunMode.enable
para macrobenchmark (já disponível em micro). Isso agiliza o desenvolvimento local e ajuda a validar a automação do app, por exemplo, no pré-envio. Essa novidade substitui as iterações para 1, pula a compilação, suprime todos os erros de configuração e desativa a saída do arquivo .json de medição (Ib51b4, b/175149857).Na linha de comando do Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
No build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Correções de bugs
- O
StartupTimingMetric
foi corrigido para não exigir mais que atividades medidas sejam iniciadas porMacrobenchmarkScope.startActivityAndWait()
. Isso significa que a métrica pode detectar lançamentos de notificações,Context.startActivity()
, navegação baseada em atividade no app ou comandos do shell (Ia2de6, b/245414235). - A inflexibilidade da detecção de frames foi reduzida para corrigir o bug em que o
startActivityAndWait
atingia o tempo limite enquanto tentava aguardar o fim da inicialização nos emuladores (Ibe2c6, b/244594339, b/228946895).
Versão 1.2.0-alpha03
7 de setembro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha03
. A versão 1.2.0-alpha03 contém estas confirmações.
Novos recursos
- Foram adicionadas APIs experimentais para usar o
BenchmarkState
de forma independente, semBenchmarkRule
eJUnit4
(Id478f, b/228489614).
Correções de bugs
- Foi adicionado um substituto do Leanback para
startActivityAndWait
(01ed77, b/242899915).
Versão 1.2.0-alpha02
24 de agosto de 2022
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha02
. A versão 1.2.0-alpha02 contém estas confirmações.
Mudanças na API
- O valor padrão de
MacrobenchmarkScope.killProcess()
éam force stop
, mesmo quando tem acesso root, exceto durante a geração de perfis de valor referência. Ele pode ser substituído por um argumento booleano opcional (02cce9, b/241214097).
Correções de bugs
- Suporte para a geração de perfil de valor de referência para apps do sistema (I900b8, b/241214097).
- Verificação de suporte para métricas de energia do ODPM em dispositivos sem acesso root (a38c78, b/229623230).
Versão 1.2.0-alpha01
27 de julho de 2022
Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha01
. A versão 1.2.0-alpha01 contém estas confirmações.
Novos recursos
- Novo componente trace-perfetto-common, que permite que as ferramentas ativem o rastreamento do SDK do Perfetto em um app que o expõe (I2cc7f).
Foi adicionado o argumento de instrumentação
androidx.benchmark.enabledRules
para permitir que a filtragem de Macrobenchmark seja executada apenas para comparativos de mercado ou geração de perfis de referência. Transmita "Macrobenchmark" ou "BaselineProfile" para executar apenas um tipo de teste, por exemplo, ao gerarBaselineProfiles
em um emulador. O argumento também oferece suporte a listas separadas por vírgulas (I756b7, b/230371561).Por exemplo, no build.gradle de macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Ou na linha de comando do Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Mudanças na API
- Foi adicionado um novo
PowerMetric
para medir tarefas de energia e potência em comparativos de mercado (I9f39b, b/220183779). - Foi adicionado um novo modo de compilação
CompilationMode.Ignore
para ignorar a redefinição e compilação de perfis (Ibbcf8, b/230453509). - Foi adicionado um novo parâmetro a
BaselineProfileRule#collectBaselineProfile
para filtrar o arquivo de saída por nome de pacote (If7338, b/220146561). - Permite que o desenvolvedor descarregue o dispositivo para medir o consumo de energia (I6a6cb).
- Foi adicionada a capacidade de limpar o cache de sombreador em
MacrobenchmarkScope
(I32122). - Permite que o desenvolvedor configure a exibição do tipo de métrica e detalhe as categorias de subsistema desejadas (I810c9).
- Anteriormente, um
UnsupportedOperationException
era gerado no comparativo de mercado quando executado em um dispositivo sem suporte. Agora, o UOE só ocorre se a métrica é usada em um dispositivo sem suporte, comoPowerMetric.configure
(I5cf20, b/227229375). TotalPowerMetric
eTotalEnergyMetric
foram adicionados para medir o total de potência e energia em cada categoria do sistema em macrobenchmarks (I3b26b, b/224557371).
Correções de bugs
- Foi corrigido um problema em que métodos compilados não eram redefinidos corretamente entre cada macrobenchmark em builds sem acesso root. Infelizmente, isso exige a reinstalação do APK a cada iteração, o que limpa os dados de cada macrobenchmark no aplicativo (I31c74, b/230665435).
- Foi corrigida uma falha na gravação de rastreamento da API 21/22 (If7fd6, b/227509388., b/227510293., b/227512788.).
- A detecção do fim da inicialização da atividade foi reformulada para corrigir a exceção "Não foi possível ler as métricas" nos macrobenchmarks de inicialização (Ia517c).
Versão 1.1.1
Versão 1.1.1
9 de novembro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.1
. A versão 1.1.1 contém estas confirmações.
Correções de bugs
- Foi corrigido
android.system.ErrnoException: open failed: EACCES
, que ocorria em alguns dispositivos Android 11 (API de nível 30) ou mais recentes. Esse é um detalhe de uma correção de1.2.0-alpha01
(aosp/2072249).
Versão 1.1.0
Versão 1.1.0
15 de junho de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0
. A versão 1.1.0 contém estas confirmações.
- Esta versão é idêntica à
androidx.benchmark:benchmark-*:1.1.0-rc03
.
Mudanças importantes desde a versão 1.0.0
O suporte a Macrobenchmarks do Jetpack permite medir interações de apps inteiros, como inicialização e rolagem, além de possibilitar a captura de rastros e a medição de seções de rastreamento.
Suporte a perfis de referência.
- Uma
CompilationMode.Partial
para medir a eficácia dos perfis de referência. - Uma
@BaselineProfileRule
para gerar perfis de referência automaticamente para uma determinada jornada ideal do usuário.
- Uma
Suporte a métricas de alocação e criação de perfil durante as execuções da Microbenchmark.
Versão 1.1.0-rc03
1º de junho de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-rc03
. A versão 1.1.0-rc03 contém estas confirmações.
Correções de bugs
Evite reinstalar o pacote de destino em cada iteração de comparação (aosp/2093027, b/231976084).
Removemos o atraso de
300ms
do métodopressHome()
(aosp/2086030, b/231322975).Melhorias na velocidade de iteração da Macrobenchmark com a otimização dos comandos do Shell usados em segundo plano (aosp/2086023, b/231323582).
Suporte para dispositivos Gradle gerenciados ao gerar perfis de referência com Macrobenchmarks (aosp/2062228, b/228926421).
Versão 1.1.0-rc02
11 de maio de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-rc02
. A versão 1.1.0-rc02 contém estas confirmações.
- Esta versão inclui uma mudança de comportamento, já que os apps são totalmente reinstalados entre cada comparação para garantir medições precisas.
Correções de bugs/Mudanças de comportamento
Foi corrigido um problema em que a compilação do app não era redefinida corretamente entre macrobenchmarks e não era redefinida em builds sem acesso root. Isso corrige muitos casos em que a execução de vários testes fazia com que o
CompilationMode
tivesse pouco ou nenhum efeito nas medições. Para resolver esse problema, o app de destino reinstala totalmente todos os métodos de teste, o que limpa os dados do app entre cada macrobenchmark (I31c74, b/230665435).Como isso evita que os apps configurem o estado antes dos testes, agora é possível pular a compilação / reinstalação para que seja possível contornar esse problema. Por exemplo, é possível compilar totalmente o destino com um comando do shell
cmd package compile -f -m speed <package>
e, em seguida, ignorar a etapa de compilação de macrobenchmark.Por exemplo, no build.gradle de macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
Ou na linha de comando do Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
Agora é possível compartilhar um módulo entre macrobenchmarks e testes de geração de perfil de referência adicionando o argumento de instrumentação
androidx.benchmark.enabledRules
. Transmita "Macrobenchmark" ou "BaselineProfile" para executar apenas um tipo de teste, por exemplo, ao gerarBaselineProfiles
em um emulador (I756b7, b/230371561).Por exemplo, no build.gradle de macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Ou na linha de comando do Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Versão 1.1.0-rc01
20 de abril de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-rc01
. A versão 1.1.0-rc01 contém estas confirmações.
Correções de bugs
- Os links de saída do perfil de referência no Android Studio agora usam um nome de arquivo exclusivo. Dessa forma, a saída sempre vai refletir os resultados mais recentes do uso de uma
BaselineProfileRule
(aosp/2057008, b/228203086).
Versão 1.1.0-beta06
6 de abril de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-beta06
. A versão 1.1.0-beta06 contém estas confirmações.
Correções de bugs
- Uma falha na gravação de rastreamento foi corrigida na API 21/22 (If7fd6, b/227509388).
- A detecção do fim da inicialização da atividade foi reformulada para corrigir a exceção "Não foi possível ler as métricas" nos macrobenchmarks de inicialização (Ia517c).
- As métricas de inicialização para Macrobenchmarks quando
CompilationMode.None()
é usado foram corrigidas. Antes dessa mudança,CompilationMode.Partial()
parecia mais lento queCompilation.None()
(611ac9).
Versão 1.1.0-beta05
23 de março de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-beta05
. A versão 1.1.0-beta05 contém estas confirmações.
Correções de bugs
- O pacote é encerrado após pular a instalação do perfil ao usar o
CompilationMode.None
(aosp/1991373). - Um problema em que as Macrobenchmarks não conseguiam coletar métricas de inicialização ao usar o
StartupMode.COLD
foi corrigido (aosp/2012227 b/218668335).
Versão 1.1.0-beta04
23 de fevereiro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-beta04
. A versão 1.1.0-beta04 contém estas confirmações.
Correções de bugs
Foram corrigidas as métricas ausentes no Android 10 e a
NoSuchElementException
causada por nomes de processos que não eram capturados corretamente em rastros (Ib4c17, b/218668335).Uso da classe
PowerManager
para detecção de limitação térmica no Q (API de nível 29) e versões mais recentes. Isso reduz significativamente a frequência de falsos positivos na detecção da limitação térmica (nova tentativa de comparativo após 90 segundos de resfriamento) e acelera significativamente os comparativos nos builds de usuário. Essa classe também fornece a detecção de limitações mesmo quando as frequências estão bloqueadas, se o bloqueio é muito alto para o ambiente físico do dispositivo (I9c027, b/217497678, b/131755853).Filtro da criação de perfil de amostragem do simpleperf para a linha de execução
measureRepeated
apenas para simplificar a inspeção (Ic3e12, b/217501939).Suporte às métricas de subprocessos nomeados da interface em apps de vários processos (Ice6c0, b/215988434).
Filtro para as regras do perfil de referência para direcionar ao Android 9 (SDK 28) (aosp/1980331, b/216508418).
A instalação do perfil é ignorada ao usar
Compilation.None()
. Além disso, há avisos quando o app está usando uma versão mais antiga deandroidx.profileinstaller
e do Plug-in do Android para Gradle (aosp/1977029).
Versão 1.1.0-beta03
9 de fevereiro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-beta03
. A versão 1.1.0-beta03 contém estas confirmações.
Mudanças na API
- Adição da classe
AudioUnderrunMetric
à biblioteca Macrobenchmark em uma sinalização experimental para permitir a detecção de underruns de áudio (Ib5972). A
BaselineProfileRule
não aceita mais um blocosetup
, porque ele tinha a mesma função queprofileBlock
(Ic7dfe, b/215536447).Por exemplo:
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
Correções de bugs
- Foi corrigido um problema em que os rastros do criador de perfil do microbench não eram atualizados nas execuções subsequentes quando vinculados na saída do Studio (I5ae4d, b/214917025).
- Comandos de shell de compilação na API 23 (Ice380) foram impedidos.
- Renomeação de
FrameCpuTime
comoFrameDurationCpu
eFrameUiTime
comoFrameDurationUi
para esclarecer que essas são as durações, não as marcações de tempo, e usar prefixos iguais (I0eba3, b/216337830).
Versão 1.1.0-beta02
26 de janeiro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-beta02
. A versão 1.1.0-beta02 contém estas confirmações.
Correções de bugs
- Os resultados da amostragem de pilhas de Microbenchmark e do perfil de rastreamento de método agora são vinculados à saída do Studio, semelhante a outras saídas de criação de perfil, e não suprimem a métrica de alocação (Idcb65, b/214440748, b/214253245).
- Agora, BaselineProfileRule exibe o comando
adb pull
no resultado do logcat e do Studio para extrair o arquivo de texto BaselineProfile gerado (f08811).
Versão 1.1.0-beta01
12 de janeiro de 2022
Lançamento de androidx.benchmark:benchmark-*:1.1.0-beta01
. A versão 1.1.0-beta01 contém estas confirmações.
Correções de bugs
- Correção da possibilidade de que o argumento do criador de perfil seja ignorado (I37373, b/210619998).
- Remoção dos
CompliationModes
descontinuados (I98186, b/213467659). - Mudança no argumento do perfil de referência de
CompilationMode.Partial
para enum para maior clareza (Id67ea).
Versão 1.1.0-alpha13
15 de dezembro de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha13
. A versão 1.1.0-alpha13 contém estas confirmações.
Mudanças na API
- O "Rastreamento do sistema" de baixa sobrecarga foi adicionado para fazer a microcomparação de saídas no Android Q (API 29+). No momento, isso não captura o rastreamento personalizado (usando as APIs
android.os.Trace
ouandroidx.tracing
do Jetpack) para não afetar os resultados. Esse rastreamento é útil para diagnosticar a instabilidade, especialmente de fontes fora da comparação (I298be, b/205636583, b/145598917). - Os
CompilationModes
foram colocados em uma das três classes: Full (completo), None (nenhum), Partial (parcial). Antes, eles eram nomeados de forma inconsistente de acordo com os argumentos da compilação, que agora tratamos como detalhes de implementação, e recursos. Isso deixa as compensações, as possíveis combinações e o comportamento entre as versões da plataforma mais claros (I3d7bf, b/207132597). - A configuração e a medida agora estão sempre em pares e em ordem. Agora, é possível consultar o nome do pacote e a iteração, embora a iteração possa ser
null
em alguns casos de aquecimento (Id3b68, b/208357448, b/208369635).
Correções de bugs
- Correção do
CompilationMode.Speed
tratado incorretamente comoNone
(I01137).
Versão 1.1.0-alpha12
17 de novembro de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha12
. A versão 1.1.0-alpha12 contém estas confirmações.
Novos recursos
- Adicionamos TraceSectionMetric experimental para medições de tempo personalizadas baseadas em rastros (I99db1, b/204572664).
Correções de bugs
- Ativação do dispositivo a cada iteração para garantir que a IU possa ser testada. A tela de bloqueio precisa estar desativada (Ibfa28, b/180963442).
- Correção de várias falhas no modo de criação de perfil do StackSampling em emuladores e dispositivos sem acesso root (Icdbda, b/202719335).
- Remoção da suspensão de 0,5 segundo no final de cada iteração. Se você perceber métricas ausentes com essa mudança, informe um bug (Iff6aa).
- Redução das chances de perda de dados e menor sobrecarga de memória com o rastreamento (Id2544, b/199324831, b/204448861).
- O tamanho do rastro foi reduzido em cerca de 40% ao mudar para o formato compacto de armazenamento programado (Id5fb6, b/199324831).
- Atualização das implementações de métricas de inicialização para que sempre terminem no fim da renderthread. Isso será mais consistente entre as versões da plataforma e mais parecido com as medições no app (Ic6b55).
Versão 1.1.0-alpha11
3 de novembro de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha11
. A versão 1.1.0-alpha11 contém estas confirmações.
Mudanças na API
- A
minSdkVersion
da Macrobenchmark agora é23
(If2655). - Adiciona uma nova
BaselineProfileRule
experimental, que é capaz de gerar perfis de valor de referência para a jornada ideal do usuário do app. A documentação detalhada vai ser publicada em breve (Ibbefa, b/203692160). - A variante da interface measureRepeated, que foi adicionada para autores de chamadas Java, foi removida porque causava ambiguidade na conclusão/solução do método. Os autores das chamadas Java precisarão retornar a Unit.Instance de measureRepeated. Se isso for inconveniente, registre um bug. Poderemos revisar isso em uma versão futura (Ifb23e, b/204331495).
Versão 1.1.0-alpha10
27 de outubro de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha10
. A versão 1.1.0-alpha10 contém estas confirmações.
Mudanças na API
- Backport do StartupTimingMetric para funcionar na API 23. Essa nova implementação também processa melhor o método reportFullyDrawn() para aguardar até que o conteúdo correspondente seja renderizado (If3ac9, b/183129298).
- JvmOverloads foram adicionados a vários métodos do MacrobenchmarkScope para autores de chamada do Java (I644fe, b/184546459).
- Outra função MacrobenchmarkRule.measureRepeated foi fornecida para aplicar um
Consumer<MacrobenchmarkScope>
no uso idiomático da linguagem Java (If74ab, b/184546459).
Correções de bugs
- Rastreamentos que não começavam cedo o suficiente e ignoravam dados de métricas foram corrigidos. Com isso, as exceções "Não foi possível ler métricas durante o benchmark" causadas pela biblioteca foram corrigidas (I6dfcb, b/193827052, b/200302931).
- Mudança do nome do FrameNegativeSlack para FrameOverrun para esclarecer o significado: o frame durou mais tempo do que deveria (I6c2aa, b/203008701).
Versão 1.1.0-alpha09
13 de outubro de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha09
. A versão 1.1.0-alpha09 contém estas confirmações.
Correções de bugs
- Foi adicionado suporte à liberação do cache de páginas do Kernel sem acesso root na API 31/S+, o que aumenta a precisão das inicializações de StartupMode.COLD (Iecfdb, b/200160030).
Versão 1.1.0-alpha08
29 de setembro de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha08
. A versão 1.1.0-alpha08 contém estas confirmações.
Mudanças na API
- Permissão para que MacroBenchmarks de rolagem sejam executados na API 23 (If39c2, b/183129298).
- Adição de novo tipo de métrica de amostra à saída de IU e JSON, com foco em percentis de várias amostras por iteração (I56247, b/199940612).
- Troca para métricas de ponto flutuante em todas as bibliotecas de comparação (truncadas na interface do Studio) (I69249, b/197008210).
Versão 1.1.0-alpha07
1º de setembro de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha07
. A versão 1.1.0-alpha07 contém estas confirmações.
Mudanças na API
- A API mínima agora é a 21 para refletir o nível da API mais baixo que receberá suporte no futuro. A API mínima com suporte continua sendo transmitida por requiredApi() e atualmente é a 29 (I440d6, b/183129298).
Correções de bugs
- O
ProfileInstaller
foi corrigido para facilitar a execução de MacroBenchmarks usando apps com perfis de valor de referência noCompilationMode.BaselineProfile
(I42657, b/196074999). OBSERVAÇÃO: requer a atualização paraandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
ou mais. - As comparações
StartupMode.COLD
+CompilationMode.None
agora estão mais estáveis (I770cd, b/196074999).
Versão 1.1.0-alpha06
18 de agosto de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha06
. A versão 1.1.0-alpha06 contém estas confirmações.
Mudanças na API
- Adição do argumento de instrumentação
androidx.benchmark.iterations
para permitir a substituição manual da contagem de iterações ao fazer testes/criar perfis localmente (6188be, b/194137879).
Correções de bugs
- Mudança para o Simpleperf como criador de perfil de amostragem padrão na API 29 ou mais recente (Ic4b34, b/158303822).
Problemas conhecidos
- O
CompilationMode.BaselineProfile
está em desenvolvimento. Evite usá-lo para determinar a qualidade de um perfil por enquanto.
Versão 1.1.0-alpha05
4 de agosto de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha05
. A versão 1.1.0-alpha05 contém estas confirmações.
O 1.1.0-alpha04
foi cancelado antes do lançamento devido a uma falha esporádica (b/193827052).
Mudanças na API
- O startActivityAndWait foi alterado para invocar a inicialização usando
am start
, o que reduz o tempo de cada iteração de medição em aproximadamente cinco segundos, mas ao custo de não oferecer mais suporte a parcelables de intent (I5a6f5, b/192009149).
Correções de bugs
- Redução da intensidade da detecção de limitação térmica. Reprocessamento dos valores de referência quando limitações são detectadas com frequência (I7327b).
- Correção de FrameTimingMetric para funcionar no Android S Beta (Ib60cc, b/193260119).
- Uso de uma
EmptyActivity
para fazer o app de destino sair de um estado de fechamento forçado, oferecendo mais suporte aCompilationMode.BaselineProfile
(Id7cac, b/192084204). - A extensão de arquivo de rastreamento foi mudada para
.perfetto-trace
a fim de corresponder ao padrão da plataforma (I4c236, b/174663039). - StartupTimingMetric agora gera a métrica "totalDrawnMs" para medir o tempo até que a renderização do aplicativo seja concluída. Para definir essa métrica no app, chame Activity.reportFullyDrawn quando o conteúdo inicial estiver pronto, por exemplo, quando os itens da lista inicial forem carregados do banco de dados ou da rede (método reportFullyDrawn disponível sem verificações de versão de build na ComponentActivity). O teste precisa ser executado por tempo suficiente para capturar a métrica (startActivityAndWait não aguarda "reportFullyDrawn") (If1141, b/179176560).
- Redução do custo de anexação de metadados da IU a rastros em mais de 50 ms (Ic8390, b/193923003).
- A frequência de pesquisa ao interromper o rastreamento foi consideravelmente aumentada, o que pode reduzir o tempo de execução da comparação de inicializações em mais de 30% (Idfbc1, b/193723768).
Versão 1.1.0-alpha03
16 de junho de 2021
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha03
. A versão 1.1.0-alpha03 contém estas confirmações.
Novos recursos
- Um novo
CompilationMode.BaselineProfile
foi adicionado para oferecer suporte a perfis instalados usando a biblioteca Jetpack ProfileInstaller (aosp/1720930).
Correções de bugs
O exemplo de código do Gradle para suprimir erros de comparações foi atualizado para usar uma API não descontinuada, com sintaxe que também oferece suporte a usuários do .gradle.kts.
Por exemplo:
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Versão 1.1.0-alpha02
18 de maio de 2021
A versão 1.1.0-alpha02 da Benchmark fornece um ótimo componente para comparações, o Macrobenchmark. Além de fazer comparações para avaliar repetições da CPU, a macrobenchmark permite medir interações de apps inteiros, como inicialização e rolagem, e capturar rastros. Para saber mais, consulte a documentação da biblioteca.
Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha02
. A versão 1.1.0-alpha02 contém estas confirmações.
Novos recursos
Artefatos Macrobenchmark foram adicionados (androidx.benchmark:benchmark-macro-junit4
e androidx.benchmark:benchmark-macro
)
- Capture métricas de desempenho de inicialização, rolagem/animação do app localmente ou em CI
- Capturar e inspecionar rastros no Android Studio
Correções de bugs
- Solução alternativa de problemas de permissões do shell com diretório de saída no Android 12. Observação: pode ser necessário atualizar o Plug-in do Android para Gradle para a versão 7.0.0 Canary e o Android Studio para o Arctic Fox (2020.3.1) para continuar a captura de arquivos de saída nos dispositivos afetados (Icb039).
- Compatibilidade de armazenamento em cache de configuração no BenchmarkPlugin (6be1c1, b/159804788).
- Saída de arquivo simplificada, ativada por padrão, em um diretório que não requer
requestLegacyExternalStorage=true
(8b5a4d, b/172376362). - Foram corrigidos os avisos de exibição do logcat da biblioteca sobre não encontrar linhas de execução JIT em versões da plataforma em que ele não está presente (I9cc63, b/161847393).
- Correção para leitura da frequência máxima do dispositivo (I55c7a).
Versão 1.1.0-alpha01
10 de junho de 2020
Lançamento de androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
e androidx.benchmark:benchmark-junit4:1.1.0-alpha01
. A versão 1.1.0-alpha01 contém estas confirmações.
Novos recursos da versão 1.1
- Métrica de alocação: os comparativos agora executam uma fase extra após o aquecimento e o tempo, captando as contagens de alocação. As alocações podem causar problemas de desempenho em versões mais antigas da plataforma (140 ns em O se tornaram 8 ns em M, medidos no Nexus5X, com relógios bloqueados). Essa métrica é exibida na saída do console do Android Studio, bem como na
- Suporte à criação de perfil: agora é possível capturar dados de criação de perfil para executar uma comparação e inspecionar o motivo da lentidão no código. A Benchmark é compatível com a captura de rastreamento de método ou com a amostragem de método do ART. Esses arquivos podem ser inspecionados com o criador de perfil do Android Studio usando File > Open.
- O plug-in Benchmark para Gradle agora fornece padrões para uma configuração mais simples:
testBuildType
está definido como a versão de lançamento por padrão para evitar o uso de dependências com cobertura de código integrada. A versão buildType também foi configurada como padrão, o que permite que o Android Studio selecione automaticamente a variante de compilação correta ao abrir um projeto pela primeira vez (b/138808399).signingConfig.debug
é usado como a configuração de assinatura padrão (b/153583269).
** Correções de bugs **
- A sobrecarga da transição de aquecimento foi reduzida significativamente, em que a primeira medição de cada comparativo era artificialmente maior do que as outras. Esse problema era mais pronunciado em comparativos muito pequenos (1 microssegundos ou menos) (b/142058671).
- Correção do erro
InstrumentationResultParser
impresso para cada comparativo ao ser executado na linha de comando (I64988, b/154248456).
Problemas conhecidos
- Invocações do Benchmark para Gradle na linha de comando não imprimem resultados diretamente. Você pode contornar isso executando o Studio ou analisando o arquivo de saída JSON para ver os resultados.
- Os relatórios da Benchmark não extraem o relatório de dispositivos que têm um app instalado com um applicationId que termina com "android" ou "download" (não diferencia maiúsculas e minúsculas). Os usuários com esse problema devem fazer upgrade do Plug-in do Android para Gradle para 4.2-alpha01 ou mais recente.
Versão 1.0.0
Benchmark versão 1.0.0
20 de novembro de 2019
Lançamento de androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
e androidx.benchmark:benchmark-junit4:1.0.0
, sem alterações desde a versão 1.0.0-rc01. A versão 1.0.0 contém estas confirmações.
Principais recursos da versão 1.0.0
A biblioteca Benchmark permite criar comparativos de performance do código do app e conseguir resultados rapidamente.
Isso evita problemas de configuração de build e execução, além de estabilizar o desempenho do dispositivo para garantir que as medições sejam precisas e consistentes. Execute os comparativos diretamente no Android Studio ou em integração contínua para observar o desempenho do código ao longo do tempo e evitar regressões.
Os principais recursos incluem:
- Estabilização do relógio
- Priorização automática de linhas de execução
- Suporte a testes de performance de interface, como no RecyclerView de exemplo (em inglês).
- Aquecimento e looping compatíveis com JIT
- Resultado de comparativo JSON para pós-processamento
Versão 1.0.0-rc01
23 de outubro de 2019
Lançamento de androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
e androidx.benchmark:benchmark-junit4:1.0.0-rc01
. A versão 1.0.0-rc01 contém estas confirmações.
Novos recursos
- Inclusão do rastreamento do systrace nos comparativos
Correções de bugs
- Foi corrigido o problema de instabilidade de métrica em que o JIT não terminava antes do aquecimento devido a não priorização (b/140773023).
- O diretório de saída JSON foi unificado no Plug-in do Android para Gradle 3.5 e 3.6
Versão 1.0.0-beta01
9 de outubro de 2019
Lançamento de androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
e androidx.benchmark:benchmark-junit4:1.0.0-beta01
. A versão 1.0.0-beta01 contém estas confirmações.
Novos recursos
- A coleta de lixo é executada antes de cada aquecimento para reduzir a pressão de memória de um comparativo que vaza para o próximo (b/140895105).
Correções de bugs
- A dependência
androidx.annotation:android-experimental-lint
foi adicionada para que o código Java produza corretamente erros de lint quando a API experimental não é usada, de forma semelhante ao que é oferecido pela anotação experimental Kotlin para os autores de chamada do Kotlin. - Agora o uso do argumento de instrumentação
additionalTestOutputDir
para saída no Plugin do Gradle para Android 3.6 é detectado corretamente, para saber quando o AGP realizará a cópia de dados. - Corrigida a frequência do relógio não detectada em JSON para imprimir
-1
corretamente (b/141945670).
Versão 1.0.0-alpha06
18 de setembro de 2019
Lançamento de androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
e androidx.benchmark:benchmark-junit4:1.0.0-alpha06
. A versão 1.0.0-alpha06 contém estas confirmações.
Novos recursos
- Incluída uma verificação de uso incorreto do pacote antigo para execução de testes, que agora apresenta uma mensagem de erro mais útil.
Mudanças na API
- A anotação experimental
ExperimentalAnnotationReport
agora está pública da forma correta. O uso da API experimental BenchmarkState#report passou a exigir essa anotação.
Versão 1.0.0-alpha05
5 de setembro de 2019
Lançamento de androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
e androidx.benchmark:benchmark-junit4:1.0.0-alpha05
. As confirmações incluídas nessa versão podem ser encontradas neste link.
Mudanças na API
- A API
BenchmarkState.reportData
agora está marcada como experimental.
Correções de bugs
- Corrigido o script de bloqueio do relógio, que falhava em dispositivos que não tinham os recursos de shell
cut
ouexpr
. - Corrigido um problema com a tarefa
./gradlew lockClocks
, que falhava em dispositivos com acesso root à versão mais antiga do utilitário su, que não tinha suporte à sinalização-c
.
Versão 1.0.0-alpha04
7 de agosto de 2019
Lançamento de androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
e androidx.benchmark:benchmark-junit4:1.0.0-alpha04
. As confirmações incluídas nessa versão podem ser encontradas neste link.
Também foi adicionada uma nova documentação sobre como usar a biblioteca Benchmark sem o Gradle, tanto para uso em diferentes sistemas de compilação, como Bazel ou Buck, quanto para execução em CI. Para ver mais informações, consulte Criar comparativos sem o Gradle e Executar comparativos na integração contínua.
Novos recursos
- Plug-in do Gradle
- Agora, ele desativa automaticamente a cobertura de teste e define
AndroidBenchmarkRunner
por padrão (b/138374050). - Foi adicionado suporte a nova cópia de dados baseada no AGP ao executar comparativos e ao usar o AGP 3.6 ou mais recente.
- Agora, ele desativa automaticamente a cobertura de teste e define
- Adições ao formato JSON
- Tempo total de execução do teste de comparativos de saída (b/133147694).
- Comparativos
@Parameterized
que usam uma string de nome, como@Parameters(name = "size={0},depth={1}")
, agora emitem nomes e valores de parâmetro por comparativo na saída JSON (b/132578772).
- Modo de simulação b/138785848.
- Foi adicionado um modo de "teste" para executar cada loop de comparativo apenas uma vez e conferir se há erros/falhas sem capturar medições. Isso pode ser útil, por exemplo, para executar comparativos rapidamente no pré-envio, verificando se eles não estão corrompidos.
Mudanças na API
- A estrutura do módulo mudou, dividindo a biblioteca (b/138451391).
benchmark:benchmark-junit4
contém classes com dependência JUnit:AndroidBenchmarkRunner
eBenchmarkRule
, que foram movidas para o pacoteandroidx.benchmark.junit4
benchmark:benchmark-common
contém o restante da lógica, incluindo a API BenchmarkState.- Essa divisão permiite que a biblioteca ofereça suporte à comparação sem as APIs do JUnit4 no futuro.
- Os avisos de configuração agora são tratados como erros e fazem com que o teste falhe b/137653596.
- Isso é feito para incentivar ainda mais medições precisas, especialmente na integração contínua (CI, na sigla em inglês).
- Esses erros podem ser reduzidos a avisos com um argumento de instrumentação. Por exemplo:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Correções de bugs
- Erros ao gravar no armazenamento externo em dispositivos Q exibem mensagens mais descritivas, com sugestões de como resolver o problema.
- As telas são ativadas automaticamente durante as execuções de comparativos, em vez de falhar quando a tela está desativada.
Contribuições externas
- Agradecemos a Sergey Zakharov pela contribuição para as melhorias da saída JSON e para a correção dos problemas relacionados à tela desativada.
Versão 1.0.0-alpha03
2 de julho de 2019
Lançamento de androidx.benchmark:benchmark:1.0.0-alpha03
e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
. As confirmações incluídas nessa versão podem ser encontradas neste link.
Novos recursos
- A duração do modo de espera foi exposta devido à limitação térmica por comparativo no relatório JSON completo.
Correções de bugs
- O plug-in do Gradle não precisa mais ser aplicado depois dos plug-ins do Android e do bloco do Android.
- Adiciona compatibilidade com relatórios de comparação em dispositivos Android 10 usando armazenamento com escopo
Versão 1.0.0-alpha02
6 de junho de 2019
Lançamento de androidx.benchmark:1.0.0-alpha02
e
androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
. As confirmações incluídas nessa versão podem ser encontradas neste link (link em inglês).
Observe que estamos tratando o esquema JSON como uma API. Pretendemos seguir as mesmas restrições de estabilidade de outras APIs: estável (com raras exceções), uma vez na versão Beta e corrigida na versão final, com apenas algumas adições em versões secundárias e mudanças/remoções nas versões principais.
Mudanças na API
Esquema JSON revisado. É provável que outras mudanças no esquema JSON sejam limitadas a adições:
- A estrutura do objeto de resultado foi reorganizada para oferecer suporte a outros grupos de métricas no futuro (b/132713021).
- Foram adicionadas informações de contexto de execução de teste, como informações do dispositivo e de build e se as frequências estão bloqueadas, ao objeto de nível superior (b/132711920).
- Os nomes das métricas de tempo agora têm "ns" (b/132714527).
- Foram adicionadas outras estatísticas por métrica relatada (máxima, mediana, mínima), e foram removidas estatísticas resumidas "nanos" simplificadas (b/132713851).
Remoção de saída XML (b/132714414).
A detecção da limitação térmica foi removida da API
BenchmarkState.reportData
(b/132887006).
Correções de bugs
- As
./gradlew lockClocks
que não fixavam em alguns dispositivos com um SO recente foram corrigidas (b/133424037). - Desativada a detecção de limitação para emulador (b/132880807).
Versão 1.0.0-alpha01
7 de maio de 2019
Lançamento de androidx.benchmark:benchmark:1.0.0-alpha01
. As confirmações incluídas nessa versão podem ser encontradas neste link.