Benchmark
Atualização mais recente | Versão estável atual | Próximo candidato a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
10 de junho de 2020 | 1.0.0 | - | - | 1.1.0-alpha01 |
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.
Adicione as dependências dos artefatos necessários no arquivo build.gradle
para seu app ou módulo:
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.0.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
A biblioteca Benchmark também fornece um plug-in para Gradle para ser usado com seu módulo de comparativo de mercado. Este plug-in define os padrões de configuração para o módulo, configura cópia de saída de comparativo para o host e fornece a tarefa ./gradlew lockClocks
.
Para usar o plug-in, inclua o seguinte classpath
no arquivo build.gradle
de nível superior:
buildscript { repositories { google() } dependencies { classpath "androidx.benchmark:benchmark-gradle-plugin:1.0.0" } }
Em seguida, aplique o plug-in ao arquivo build.gradle
do seu módulo de comparativo de mercado.
apply plugin: "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 existentes (link em inglês) nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.
Consulte a documentação do Issue Tracker para saber mais.
Versão 1.1.0
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 essas confirmações (link em inglês).
Novos recursos da versão 1.1
- Métrica de alocação: os Benchmarks agora executam uma fase adicional 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
- Compatibilidade com criação de perfil: agora é possível capturar dados de criação de perfil para uma execução de Benchmark para inspecionar o motivo da lentidão no código. O 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 para ser lançado 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 Benchmark era artificialmente maior do que as outras. Esse problema era mais pronunciado em Benchmarks muito pequenos (1 microssegundos ou menos) (b/142058671).
- Correção do erro
InstrumentationResultParser
impresso para cada Benchmark ao ser executado na linha de comando (I64988, b/154248456, links em inglês).
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 do 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 de 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 essas confirmações (link em inglês).
Principais recursos da versão 1.0.0
A biblioteca Benchmark permite criar benchmarks de desempenho do código do app e conseguir resultados rapidamente.
Isso evita problemas de configuração de build e de tempo de execução e estabiliza o desempenho do dispositivo para garantir que as medidas sejam precisas e consistentes. Execute os benchmarks 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 de clock
- Priorização automática de linhas de execução
- Compatibilidade com testes de desempenho de IU, por exemplo, na Amostra RecyclerView (link em inglês)
- Aquecimento e looping compatíveis com JIT
- Resultado de benchmark 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 essas confirmações (link em inglês).
Novos recursos
- Inclusão do rastreamento do systrace nos benchmarks
Correções de bugs
- Corrigido 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 essas confirmações (link em inglês).
Novos recursos
- Executa a coleta de lixo antes de cada aquecimento para reduzir a pressão de memória de um benchmarks para o vazamento para o próximo (b/140895105).
Correções de bugs
- Incluída dependência
androidx.annotation:android-experimental-lint
, para que o código Java produza corretamente erros de lint quando a API experimental não for 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 frequência de clock não detectada em JSON para imprimir
-1
(b/141945670) corretamente.
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 essas confirmações (link em inglês).
Novos recursos
- Incluída 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. Agora, o uso da API experimental BenchmarkState#report exige 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 aqui (link em inglês).
Mudanças na API
- A API
BenchmarkState.reportData
agora está marcada como experimental.
Correções de bugs
- Corrigido script de bloqueio de clock, que falhava em dispositivos que não tinham os recursos de shell
cut
ouexpr
. - Corrigido problema com a tarefa
./gradlew lockClocks
, que era mantida em dispositivos com acesso root à versão mais antiga do utilitário su, que não era compatível com a 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 aqui.
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 benchmarks sem o Gradle e Executar benchmarks em integração contínua.
Novos recursos
- Plug-in do Gradle
- Agora, ele desativa automaticamente a cobertura de teste e define o
AndroidBenchmarkRunner
por padrão (b/138374050, link em inglês). - Incluída compatibilidade com nova cópia de dados baseada no AGP, ao executar benchmarks e ao usar AGP 3.6+.
- Agora, ele desativa automaticamente a cobertura de teste e define o
- Adições ao formato JSON
- Tempo total de execução do teste de benchmarks de saída (b/133147694).
- Benchmarks
@Parameterized
que usam uma string de nome (por exemplo,@Parameters(name = "size={0},depth={1}")
) agora emitem nomes e valores de parâmetro por benchmark na saída JSON (b/132578772).
- Modo de simulação b/138785848.
- Adicionado um modo de "simulação" para executar cada loop de benchmark apenas uma vez, para verificar se há erros/falhas sem capturar medições. Isso pode ser útil, por exemplo, para executar benchmarks 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 permitirá que a biblioteca seja compatível com o benchmark 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 benchmarks, 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 aqui (link em inglês).
Novos recursos
- Exposição da duração do modo de espera devido à limitação térmica por benchmark 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 alterações/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:
- Reorganizada a estrutura do objeto de resultado para oferecer compatibilidade com outros grupos de métricas no futuro (b/132713021).
- Adicionadas informações de contexto de execução de teste, como informações do dispositivo e da compilação e se os clocks estão bloqueados, ao objeto de nível superior (b/132711920).
- Os nomes das métricas de tempo agora têm "ns" (b/132714527).
- Adicionadas outras estatísticas por métrica relatada (máxima, mediana, mínima) e remoção de 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
- Correção de
./gradlew lockClocks
que não fixavam em alguns dispositivos com SO recente (b/133424037). - Desativada a detecção de limitação para emulador (b/132880807).
Versão 1.0.0-alpha01
7 de maio de 2019
androidx.benchmark:benchmark:1.0.0-alpha01
é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link (link em inglês).