O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Comparativo de mercado

Guia do usuário  Amostra de código (link em inglês)
Avalie com precisão o desempenho do seu código no Android Studio.
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.

Criar novo problema (link em inglês)

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, link em inglês).
    • signingConfig.debug é usado como a configuração de assinatura padrão (b/153583269, link em inglês).

** 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, link em inglês).
  • 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, link em inglês)
  • 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, link em inglês)

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, link em inglês) 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 ou expr.
  • 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 (link em inglês).

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+.
  • 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, link em inglês).
  • Modo de simulação b/138785848 (link em inglês)
    • 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 (link em inglês)
    • benchmark:benchmark-junit4 contém classes com dependência JUnit: AndroidBenchmarkRunner e BenchmarkRule, que foram movidas para o pacote androidx.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 (link em inglês).
    • 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 (link em inglês)
    • 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 (link em inglês)
    • Os nomes das métricas de tempo agora têm "ns" b/132714527 (link em inglês)
    • Adicionadas outras estatísticas por métrica relatada (máxima, mediana, mínima) e remoção de estatísticas resumidas "nanos" simplificadas b/132713851 (link em inglês)
  • Remoção de saída XML b/132714414 (link em inglês)

  • A detecção da limitação térmica foi removida da API BenchmarkState.reportData b/132887006 (link em inglês)

Correções de bugs

  • Correção de ./gradlew lockClocks que não fixavam em alguns dispositivos com SO recente b/133424037 (link em inglês)
  • Desativada a detecção de limitação para emulador b/132880807 (link em inglês)

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).