Comparativo de mercado

Meça a performance do seu código no Android Studio com precisão.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
7 de outubro de 2026 1.5.0 - - 1.6.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.

Macrobenchmark

Para usar a Macrobenchmark no seu projeto, adicione as seguintes dependências ao arquivo build.gradle do módulo de macrobenchmark:

Groovy

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.5.0"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.5.0")
}

Microbenchmark

Para usar o Microbenchmark no seu projeto, adicione as seguintes dependências ao arquivo build.gradle do seu módulo de microbenchmark:

Groovy

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.5.0"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.5.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.5.0' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.5.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.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.6

Versão 1.6.0-alpha01

7 de outubro de 2026

Lançamento de androidx.benchmark:benchmark-*:1.6.0-alpha01. A versão 1.6.0-alpha01 contém estes commits.

Novos recursos

  • A tarefa de benchmark :lockClocks agora usa o modo performance fixo quando disponível, em vez da implementação anterior somente na raiz. Isso significa que você pode bloquear relógios em muito mais dispositivos físicos para resultados estáveis, especialmente para microbenchmarks estáveis. Informe problemas com a limitação térmica com o novo comportamento, se houver. (I0d032).

Mudanças na API

  • Adição de MemoryProfilingConfig a ExperimentalConfig para permitir que as execuções de macrobenchmark usem o perfil de alocação heap do Perfetto. (Ibc931).

Correções de bugs

  • Correção de um bug no Microbenchmark em que a captura de rastreamento de método às vezes era ignorada por excesso de cautela para evitar ANRs. (Ifc307).
  • Correção da captura de perfil de referência para processos que não usam um padrão de nomenclatura :<suffix>. (I512ab).
  • Os links de trace do criador de perfil agora são informados em uma seção separada "Traces de criação de perfil" nos resumos do ambiente de desenvolvimento integrado. (Id639f).
  • Correção de um bug na limpeza de arquivos virtuais que resultava em Unable to flush profiles for <packagename>. (I48ccc).
  • Correção da sincronização em rastreamentos de método incorporados ao rastreamento do sistema. Ifd2e33 b/537688349
  • Plug-in do Gradle para perfis de referência: melhoria em CollectBaselineProfileTask para oferecer suporte à localização de arquivos test-result.pb em subdiretórios, permitindo a compatibilidade com a nova plataforma de teste integrada. Id9c488 b/543799367

Versão 1.5

Versão 1.5.0

9 de setembro de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0. A versão 1.5.0 contém estes commits.

Versão 1.5.0-rc02

26 de agosto de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-rc02. A versão 1.5.0-rc02 contém estes commits.

Versão 1.5.0-rc01

12 de agosto de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-rc01. A versão 1.5.0-rc01 contém estes commits.

Versão 1.5.0-beta01

29 de julho de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-beta01. A versão 1.5.0-beta01 contém estes commits.

Mudanças na API

  • Agora, PerfettoCapture e PerfettoTraceRule podem capturar rastreamentos em andamento e mesclá-los para um pacote de destino. (I9a00b, b/497959820)

Versão 1.5.0-alpha07

1º de julho de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-alpha07. A versão 1.5.0-alpha07 contém estes commits.

Mudanças na API

  • Captura simplificada de rastros do Perfetto no dispositivo. (I48810).
  • Mover as APIs de extensão experimentais TraceProcessor.runServer de androidx.benchmark:benchmark-macro para androidx.benchmark:benchmark-common e para o pacote androidx.benchmark. Isso vai permitir o uso deles em microcomparativos de mercado no futuro. (Ie25bb, b/393640753).

Correções de bugs

  • Atualização da implementação do traceprocessor (e da captura de rastreamento do Perfetto não agrupada) para usar o Perfetto v56.0 (I8fb9d).
  • Defina androidx.benchmark.requireAot e androidx.benchmark.requireAot como "true" por padrão. Esses padrões mais seguros garantem que a compilação seja realizada antes da execução de microcomparativos (ativada por padrão com o plug-in do Gradle de comparativo ao usar o AGP 8.4 ou mais recente) e que measureRepeated não seja usado na linha de execução principal, onde pode causar ANRs. (I1bc3c, b/379115078).
  • Aumento do tempo limite de encerramento do Perfetto de 5 para 30 segundos (somente para sessões do Perfetto capturadas por comparativo de mercado). Adicionamos um registro de erros mais claro quando o problema ocorre. (If188f, b/435589290)

Versão 1.5.0-alpha06

6 de maio de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-alpha06. A versão 1.5.0-alpha06 contém estes commits.

Correções de bugs

  • Os ambientes multiusuário agora são processados de forma adequada ao mover arquivos do diretório de saída de comparativo de mercado para o diretório de saída de teste adicional. (I90da5, b/489358149).

Versão 1.5.0-alpha05

25 de março de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-alpha05. A versão 1.5.0-alpha05 contém estes commits.

Correções de bugs

  • Atualizamos o ArtMetric para considerar pacotes de nível superior, o que é especialmente importante ao usar o AGP/R8 9.1+ ou a opção global -repackageclasses. Antes, o ArtMetric não detectava esses carregamentos de classe nas medições de artClassLoad.... (If8a35, b/487402058)

Novos recursos - Adição de um novo argumento de instrumentação androidx.benchmark.requireLockedClocks que permite ativar uma verificação para saber se os relógios da CPU estão bloqueados para dispositivos com acesso root. (Id82e8, b/468039042).

Versão 1.5.0-alpha04

11 de março de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-alpha04. A versão 1.5.0-alpha04 contém estes commits.

Mudanças na API

  • Adição de JvmOverloads a PowerMetric.Energy e PowerMetric.Power (Iac0d0, b/481371562).

Correções de bugs

  • Atualizamos o ArtMetric para considerar pacotes de nível superior, o que é especialmente importante ao usar o AGP/R8 9.1+ ou a opção global -repackageclasses. Anteriormente, o ArtMetric não detectava esses carregamentos de classe nas medições de artClassLoad.... (I207ca, b/487402058).

Versão 1.5.0-alpha03

11 de fevereiro de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-alpha03. A versão 1.5.0-alpha03 contém estes commits.

  • Atualização para depender do UiAutomator 2.4 Beta.

Versão 1.5.0-alpha02

28 de janeiro de 2026

Lançamento de androidx.benchmark:benchmark-*:1.5.0-alpha02. A versão 1.5.0-alpha02 contém estes commits.

Correções de bugs

  • Adição de suporte parcial para a geração de perfis de referência em módulos multiplataforma do Kotlin. Normalmente, as dependências de perfis podem ser definidas usando a configuração baselineProfile do Gradle no bloco de dependências, mas isso não funciona para módulos KMP no momento.

    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // THIS DOES NOT WORK
          // baselineProfile(":yourProducerProject")
        }
      }
    }
    
  • Em vez disso, defina as dependências usando a extensão baselineProfile **. (Ie19c4).

    plugins {
        id("org.jetbrains.kotlin.multiplatform")
        id("com.android.kotlin.multiplatform.library")
        id("androidx.baselineprofile.consumer")
    }
    
    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // ...
        }
      }
    }
    // Define dependencies
    // This works !
    baselineProfile {
      variants {
        androidMain {
          from(project(":yourProducerProject"))
        }
      }
    }
    

Versão 1.5.0-alpha01

17 de dezembro de 2025

Lançamento de androidx.benchmark:benchmark-*:1.5.0-alpha01. A versão 1.5.0-alpha01 contém estes commits.

  • A Macrobenchmark 1.5 usa o UiAutomator 2.4 para simplificar a interação com o aplicativo medido. O objeto MacrobenchmarkScope agora estende UiAutomatorTestScope, o que permite usar as APIs UiAutomator modernas, como onElement { ... }.click().
  • Para mais informações sobre o UiAutomator 2.4, consulte a documentação.

Novos recursos

  • O plug-in do Gradle para perfis de referência não exige mais newDsl=false no AGP 9.0 (Iaaac7, b/443311090).
  • Estendemos a configuração de rastreamento para incluir o tamanho do núcleo (por exemplo, pequeno/grande) em rastreamentos do sistema/Perfetto capturados pelo comparativo de mercado. (I8e397, b/457469959).

Mudanças na API

  • (No UiAutomator) Mudança de startActivity para aguardar uma nova janela. (I35da6, b/440021797).
  • Estabilização das APIs BlackHole em androidx.benchmark. (I2b67e, b/451749438).
  • Adição de @JvmOverloads para construtores de conveniência para PerfettoTraceRule. (I1510a, b/443763207).

Versão 1.4

Versão 1.4.1

10 de setembro de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.1. A versão 1.4.1 contém estes commits.

Correções de bugs

  • Foi corrigido o problema em que perfettoSdkTracing=true (por exemplo, ao rastrear o Compose em um microbenchmark) encerrava o processo de destino se ele já estivesse em execução e um StartupMode não fosse especificado. (Ib2c1f).

Versão 1.4.0

30 de julho de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0. A versão 1.4.0 contém estes commits.

Mudanças importantes desde a versão 1.3.0

Microbenchmark

  • As tarefas do Gradle lockClocks e unlockClocks foram movidas para projetos de comparativo de mercado, em vez de ficarem no nível superior, para respeitar o isolamento do projeto do Gradle.
  • Refatoração de BenchmarkRule para ser criado com base em corrotinas e oferecer suporte a um comportamento melhor de yield(). Isso deve reduzir significativamente o risco de ANRs durante execuções de comparativo, especialmente execuções longas de CI. Observação: os comparativos de mercado de interface precisam ser executados com measureRepeatedOnMainThread.

Macrobenchmark

  • Adicionamos uma solução alternativa na API 34+ para que o CompilationMode.None() não tenha um desempenho inconsistente devido à verificação do ART, que agora compila parcialmente os apps após a primeira inicialização.
  • Recurso experimental: os insights de inicialização podem destacar alguns problemas comuns em uma Macrobenchmark de inicialização transmitindo MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))).
  • Adição de ArtMetric, que pode ser usado para detectar a compilação JIT e o carregamento de classes não otimizado. Ambos são úteis para validar as otimizações do perfil de referência.

Perfis de referência

  • O BaselineProfileRule agora coleta perfis para apps de vários processos.

Outras mudanças

  • O TraceProcessor foi extraído para a própria biblioteca (androidx.benchmark:benchmark-traceprocessor) para que possa ser usado fora das métricas do Macrobenchmark, em outros casos. Também é possível executá-lo na JVM de desktop definindo seu próprio ServerLifecycleManager.

Versão 1.4.0-rc01

18 de junho de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0-rc01. A versão 1.4.0-rc01 contém estas confirmações.

Correções de bugs

  • Adição de uma solução alternativa para imagens de ambiente de execução que faziam com que o CompilationMode.None() não medisse o pior desempenho após a primeira iteração. Infelizmente, essa solução alternativa exige um atraso de 5 segundos para corromper intencionalmente a imagem de tempo de execução no início de cada conjunto de macrobenchmarks (I4a4f1).

Versão 1.4.0-beta02

4 de junho de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0-beta02. A versão 1.4.0-beta02 contém estes commits.

Mudanças na API

  • Adição de um BaselineProfileConfig.Builder para facilitar a chamada de BaselineProfileRule.collectWithResults() para desenvolvedores Java. (I94905).

Versão 1.4.0-beta01

7 de maio de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0-beta01. A versão 1.4.0-beta01 contém estes commits.

Mudanças na API

  • Adição da variante do construtor PerfettoTraceRule, que aceita um PerfettoConfig (Ie53ba).

Correções de bugs

  • Atualizamos o formato do link de insight de inicialização do TraceProcessor para usar o plug-in correto e um delimitador mais claro (: é mais curto que %3A, e ambos são compatíveis) (Ie18ef).
  • Sempre use a parada forçada para encerrar processos, mesmo com acesso root e encerrando apps do sistema. Corrige exceções do formato: Expected no stdout/stderr from killall ... No such process. (Idca2c)

Contribuição externa

  • Adição do gerenciador de exceções de proxy para TraceProcessorHttpServer (I480f5).

Versão 1.4.0-alpha11

9 de abril de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha11. A versão 1.4.0-alpha11 contém estes commits.

Mudanças na API

  • Mudança no argumento timeout de TraceProcessor: Duration para timeoutMs para melhorar a usabilidade do caller Java. (I9fbb5).
  • Marcar o construtor TraceProcessor como interno. Os autores de chamadas precisam usar TraceProcessor.startServer ou TraceProcessor.runServer. (Ia8c5b).

Correções de bugs

  • Ao encerrar o aplicativo com MacrobenchmarkScope.killProcess, valide os resultados do comando de encerramento para evitar falhas silenciosas e erros de tempo limite. (I84555)

Atualizações de dependência

  • Esta biblioteca agora é destinada ao nível de linguagem Kotlin 2.0 e requer o KGP 2.0.0 ou mais recente. (Idb6b5).

Versão 1.4.0-alpha10

26 de março de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha10. A versão 1.4.0-alpha10 contém estes commits.

Mudanças na API

  • Aumento do tempo limite padrão para carregamento e consulta do servidor TraceProcessor para 120 segundos (antes era 60/30) e configuração de ambos com um parâmetro de tempo limite. (Ifec87).

Correções de bugs

  • Correção de alguns problemas que ocorriam ao comparar ou capturar perfis de um app sem profileinstaller, e o BroadcastReciever incluído. Isso afeta apenas execuções em dispositivos com acesso root. (Ied308).

Versão 1.4.0-alpha09

12 de março de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha09. A versão 1.4.0-alpha09 contém estas confirmações.

Mudanças na API

  • Adicionamos TraceProcessor e a API Session com identificadores que podem ser fechados, para facilitar o uso com ciclos de vida personalizados. Essa também é uma etapa para facilitar o uso de corrotinas e da API Java. As funções de extensão para TraceProcessor.runServer {} agora estão marcadas como experimentais, já que provavelmente serão movidas e se tornarão não experimentais no futuro. (I358b4).

Correções de bugs

  • Correção da captura de perfis de referência e de comparativo de mercado que não funcionava com a API 36 devido a uma mudança no toybox pgrep, que agora exige que -a mostre a linha de comando completa. (Idc991).
  • Filtre a configuração de rastreamento padrão para reduzir o risco de perda de dados em rastreamentos em níveis da API mais recentes. (I54e8a).
  • Adição do argumento de instrumentação experimental androidx.benchmark.killExistingPerfettoRecordings, que pode ser definido como false para permitir que a captura de rastreamento do Perfetto preexistente continue. Por padrão, as capturas de trace do Perfetto preexistentes no dispositivo são encerradas para evitar interferências. (I02a3c).
  • O campo JSON context.osCodenameAbbreviated agora será REL para versões do SO lançadas na API 35 e em versões mais recentes, já que os codinomes não numéricos não são mais compatíveis com a plataforma. (Ib17fd).
  • Correção de uma falha em FrameTimingMetric quando ocorrem frames ressincronizados. (I7c6f4, b/394610806).
  • Não presumir mais que Choreographer#doFrame é o topo do frame de pilha na linha de execução principal para FrameTimingQuery. (Iee0e0, b/340206285)

Versão 1.4.0-alpha08

12 de fevereiro de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha08. A versão 1.4.0-alpha08 contém estes commits.

Mudanças na API

  • As APIs de extensão TraceProcessor.runSession() foram movidas para serem experimentais, já que provavelmente serão movidas para construtores concretos no Android. (Ib0528, b/393640753)
  • A maior parte da implementação do Startup Insights agora é pública/experimental e passa para o artefato TraceProcessor. Consulte StartupInsights. (I0aa00).
  • Descontinuar BenchmarkRule.runWithTimingDisabled {} em favor de BenchmarkRule.runWithMeasurementDisabled {}, que descreve mais claramente o comportamento: todas as métricas são pausadas. Além disso, exponha a superclasse MicrobenchmarkScope, já que não é possível redeclarar a função runWithMeasurementDisabled para abrir o acesso, porque ela é inline. (I9e23b, b/389149423, b/149979716).
  • As bibliotecas de comparativo de mercado foram migradas para o Kotlin 2.0. (I9d1e0)
  • O argumento de instrumentação androidx.benchmark.startupProfiles.enable foi removido. Ele não é mais útil, já que pode ser controlado pelo argumento includeInStartupProfile em BaselineProfileRule.collect(). (I39eb4).

Correções de bugs

  • Reduzimos a quantidade de chamadas de função internas do Microbenchmark durante o perfil para deixar, por exemplo, rastreamentos de métodos mais claros (Ifaed8).
  • Correção especulativa para falhas: "Falha ao interromper [ProcessPid(processName=perfetto, pid=...)]". Agora, o Benchmark vai registrar uma mensagem em vez de falhar quando um processo em segundo plano do Perfetto não puder ser interrompido antes da execução do comparativo. (I37d3e, b/323601788).
  • Correção de IllegalStateExceptions com o rótulo "Expected pm dump-profiles stdout" que foram causados por uma verificação de formato de saída excessivamente rigorosa. (I358dc).

Versão 1.4.0-alpha07

29 de janeiro de 2025

Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha07. A versão 1.4.0-alpha07 contém estes commits.

Novos recursos

  • O BaselineProfileRule agora apresenta uma API collectWithResults(...) que inclui uma lista de caminhos para os perfis calculados. (I056f8).
  • Adição do argumento de instrumentação androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline, que pode ser definido como "false" para desativar o comportamento de geração de exceção no prazo de measureRepeatedOnMainThread para testes locais. Não é recomendado, porque aumenta a probabilidade de ANRs durante os testes. (Idbeec, b/353226476).

Mudanças na API

  • Adição de @JvmOverloads ao construtor MicrobenchmarkConfig. (I13fd3).
  • Refatoração de BenchmarkRule para ser criado com base em corrotinas e oferecer suporte a um comportamento melhor de yield(). Essa refatoração removeu várias APIs BenchmarkState experimentais, mas elas serão substituídas conforme necessário. Além disso, adicionamos runWithMeasurementDisabled para esclarecer o comportamento (toda a medição é pausada). No futuro, o runWithTimingDisabled será descontinuado. (I19837, b/389149423, b/311242861).
  • Mover PerfettoTraceProcessor para TraceProcessor em um novo artefato androidx.benchmark:benchmark-traceprocessor e tornar a maior parte da API não experimental. Qualquer TraceMetric personalizado ou qualquer coisa que leia os traces precisará ser atualizado para a nova importação de TraceProcessor. A nova API TraceProcessor funciona exatamente como a antiga, mas é uma biblioteca de interface independente (um pouco análoga à camada androidx.sqlite do Room) com uma implementação específica do Android integrada ao macrobenchmark. O novo artefato também pode ser usado na JVM, mas, no momento, você precisa iniciar sua própria cópia do binário TraceProcessor e oferecer uma porta para se conectar a ele. (I3a767, I62563, b/381134564)

Correções de bugs

  • Uma mensagem de erro mais clara é mostrada quando o MacrobenchmarkScope.startActivityAndWait não inicia o processo de destino (possivelmente devido a uma falha no processo de destino), em vez da mensagem mais ambígua "Não foi possível confirmar a conclusão do lançamento da atividade" (I3539b).
  • Correção de vários erros de sintaxe em exemplos do Kotlin e destaque de sintaxe em vários exemplos de Java / build.gradle. (Ib3808).
  • Esclarecemos os documentos dos parâmetros ArtMetric e CaptureInfo. (I96e60).

Versão 1.4.0-alpha06

11 de dezembro de 2024

Lançamento de androidx.benchmark:benchmark-*:1.4.0-alpha06. A versão 1.4.0-alpha06 contém estes commits.

Mudanças na API

  • Uso removido de @Language("sql") em PerfettoTraceProcessor.Session.query(), já que o destaque/análise do Studio está corrompido. (Idc2fa, b/377733398).

Correções de bugs

  • Essa biblioteca agora usa as anotações de nulidade do JSpecify, que são de uso de tipo. Os desenvolvedores Kotlin precisam usar o seguinte argumento do compilador para garantir o uso correto: -Xjspecify-annotations=strict (esse é o padrão a partir da versão 2.1.0 do compilador Kotlin). (I46810, b/326456246).
  • Corrigimos ArtMetric para informar o carregamento da classe (não init) e melhoramos os documentos para esclarecer o comportamento do ambiente de execução. (I9915c)
  • No Android Multiuser, execute comandos como raiz apenas em dispositivos com acesso root. (I88b44).

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 estes commits.

Correções de bugs

  • Foi corrigido um problema na API 34+ em que o CompilationMode.None() tinha um desempenho inconsistente que não representava o desempenho inicial no pior caso. Isso contorna uma mudança na plataforma que permite que o estado de compilação verify do ART compile parcialmente os apps (afetando apenas o carregamento de classes) logo após o primeiro lançamento. (Ie48d0).
  • Foi corrigido um problema em que rastreamentos (especialmente curtos) podiam ser capturados sem informar a medição das métricas de macrobenchmark integradas devido ao truncamento do nome do processo no rastreamento do Perfetto. Agora, o macrobenchmark contorna esse problema procurando o nome do pacote truncado em todas as consultas integradas, além do nome esperado. Implementações personalizadas de TraceMetric ou outros chamadores diretos de PerfettoSession.query podem implementar esse mesmo comportamento mudando process.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 estes commits.

Novos recursos

  • (Experimental) Ative a geração de perfil de referência e o comparativo de mercado em apps instalados em um usuário secundário, por exemplo, qualquer app em dispositivos Android Auto sem tela. Esse suporte foi testado em alguns cenários, mas avise com um bug se não funcionar para você. (I9fcbe, b/356684617, b/373641155).

Correções de bugs

  • Agora, isProfileable sempre é substituído em builds de comparativo de mercado, e isDebuggable também é substituído em builds de comparativo de mercado e nonMinified (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 json e o comportamento do androidx.benchmark.requireAot=true, que não gera mais erros incorretamente (Ic3e08, b/374362482).
  • Nas métricas CpuEventCounter, gere uma exceção se forem observadas medições inválidas (por exemplo, instruções/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 estes commits.

Mudanças na API

  • Macrobenchmark: adiciona ArtMetric, que pode ser usado para inspecionar a cobertura do perfil ou a performance geral do Android RunTime. Captura 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, muda CaptureInfo para incluir a versão opcional da mainline do ART com o padrão. (I930f7).
  • Adição de coefficientOfVariation à saída JSON do comparativo para mostrar a estabilidade em uma determinada execução. (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 o executado antes de cada iteração, usado para implementar o comportamento StartupMode.COLD) vai esperar 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).
  • Agora, essa biblioteca usa anotações de nulidade do JSpecify, que são de uso de tipo. Os desenvolvedores Kotlin precisam usar o seguinte argumento do compilador para garantir o uso correto: -Xjspecify-annotations=strict (esse é o padrão a partir da versão 2.1.0 do compilador Kotlin). (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 estes commits.

Mudanças na API

  • As tarefas do Gradle lockClocks e unlockClocks foram movidas para projetos de comparativo de mercado, em vez de estarem disponíveis no nível superior. Essa mudança foi necessária porque, infelizmente, não há como registrar essas ações como de nível superior sem quebrar o isolamento do projeto. (I02b8f, b/363325823)

Correções de bugs

  • O BaselineProfileRule agora 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 transmissão, ela vai falhar, já que não é esperado que haja dados de perfil nela. Além disso, adicionamos um argumento de instrumentação para controlar a duração da espera do dump: androidx.benchmark.saveProfileWaitMillis (I0f519, b/366231469).
  • Do Benchmark 1.3.2: foi corrigido o problema em que o Firebase Test Lab (FTL) 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 do 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 estes commits.

Novo recurso: insights de inicialização do app

  • A versão inicial dos insights de inicialização do app pode ser ativada na Macrobenchmark. (09fae38)

Para ativar em uma comparação 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 mercado de inicialização vai analisar o rastro para procurar problemas comuns e mostrá-los após as métricas na saída de teste do Studio na guia de comparativo de mercado, 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 desenvolvimento, com melhorias na documentação e extensibilidade a serem implementadas, mas o feedback é bem-vindo.

Novos recursos

  • Adicionamos a propriedade do Gradle androidx.baselineprofile.suppressWarnings para suprimir todos os avisos de perfil de referência. (314153a).
  • As métricas de microbench agora são mostradas nos rastreamentos do Perfetto como contadores. (3214854).
  • Adição de scripts experimentais para desativar o JIT (requer acesso 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)
  • Adicionado argumento de comparativo de mercado 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 emuladores forem usados. Com o novo argumento skipBenchmarksOnEmulator, podemos pular o teste. (0c2ddcd)
  • Mudança na lógica de ativação de eventos de desempenho para execução na API 23 e versões mais recentes (2550048).

Mudanças na API

  • O argumento experimental PerfettoConfig para MacrobenchmarkRule.measureRepeated() foi movido para o novo objeto ExperimentalConfig.

Correções de bugs

  • Aumentar a contagem de novas tentativas de lockClocks.sh (99e9dac)
  • Não crie nonMinified e tipos de build de comparativo de mercado se eles já existirem. Devido a um bug, mesmo que os tipos de build nonMinified e de comparativo de mercado existissem, eles seriam recriados. (e75f0a5)
  • Ignorar intervalos não finais dos resultados de TraceSectionMetric. (a927d20).
  • Melhoria na verificação do emulador para considerar o prefixo sdk_. (1587de8)
  • Trate pacotes não executados como limpos em FrameTimingGfxInfoMetric. (35cc79c)
  • Correção de androidx.benchmark.cpuEventCounter que produzia valores corrompidos para eventos que não eram 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ê estiver usando contadores de desempenho da CPU com o argumento de instrumentação cpuEventCounter.enable, o timeNs não será mais reduzido significativamente quando ocorrerem pausas/retomadas. (5de0968)

Versão 1.3

Versão 1.3.4

26 de março de 2025

Lançamento de androidx.benchmark:benchmark-*:1.3.4. A versão 1.3.4 contém estas confirmações.

Correções de bugs

  • Correção de incompatibilidades de isolamento de projetos do Gradle no plug-in do Gradle de referência de comparativo. (b/404523257).

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 estes commits.

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 estes commits.

Correções de bugs

  • Correção do problema em que o Firebase Test Lab (FTL) não conseguia extrair arquivos de resultados de perfil de referência ou 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 do 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 do 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 estes commits.

Correções de bugs

  • Adicionada a propriedade do Gradle androidx.baselineprofile.suppressWarnings 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… e benchmark… preexistentes se criados pelo app, em vez de criar wrappers. (Ia8934, b/361370179)
  • Correção de java.lang.AssertionError: ERRORS (not suppressed): EMULATOR quando automaticGenerationDuringBuild está ativado em emuladores. O novo argumento é usado para pular o teste. (If3f51, b/355515798)
  • Minificação de microbenchmarks: mantenha as subclasses de org.junit.runner.notification.RunListener no ProGuard da biblioteca de comparativos de mercado (Ic8ed5, b/354264743).
  • Correção de TraceSectionMetric para ignorar intervalos não finais. Antes, eles eram considerados como tendo duração -1, por exemplo, durante a soma ou a busca pela duração mínima. (If74b7).
  • Correção de um problema em 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 estes commits.

Mudanças na Microbenchmark desde a versão 1.2.0

  • O rastreamento de método é ativado por padrão em microcomparativos de mercado ao serem executados na maioria dos dispositivos
    • O rastreamento de método é executado como uma fase separada, após as medições. Isso permite que medições e rastreamentos de método precisos sejam gerados em uma única execução de comparativo de mercado.
    • O rastreamento de método em algumas versões do SO Android e do ART afeta as fases de medição posteriores. Nessas versões, o rastreamento de método fica desativado por padrão, e um aviso é exibido na saída do Studio.
  • Benchmarks da linha de execução principal e ANRs
    • Adicionamos measureRepeatedOnMainThread para benchmarks de linha de execução de interface (por exemplo, aqueles que interagem com interfaces do Compose/View) para evitar ANRs ao executar por muitos segundos.
    • Os rastreamentos de método são ignorados se excederem o prazo de prevenção de ANR. Defina androidx.benchmark.profiling.skipWhenDurationRisksAnr como falso para desativar esse comportamento (não recomendado para execuções de CI, já que os ANRs podem causar problemas em execuções longas de CI).
  • Minificação
    • Regras Proguard incorporadas para melhorar a microcomparação com a minimização ativada
    • A minificação/R8 em um módulo de biblioteca requer o AGP 8.3 e pode ser ativada usando android.buildTypes.release.androidTest.enableMinification no build.gradle.
    • A API experimental BlackHole.consume() foi adicionada para evitar a eliminação de código morto (If6812, b/286091643).
  • Métricas
    • Recurso experimental de contador de eventos de CPU (métricas de perf_event_open, que exige acesso root na maioria das versões da plataforma), acesso por InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (pode ser definido como true) e androidx.benchmark.cpuEventCounter.events pode ser definido, por exemplo, como (Instructions,CpuCycles). Isso deve ser compatível com alguns emuladores userdebug, mas a compatibilidade não foi testada em todos os emuladores disponíveis.

Mudanças na MACRObenchmark desde a versão 1.2.0

  • Revisão do rastreamento de método para macrobenchmarks.
    • Agora, os rastreamentos de método têm como escopo a 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 para measureBlocks que não reiniciava o processo de destino.
    • Correção da descarga de rastreamentos de métodos na macrobenchmarking para que eles sejam totalmente capturados e válidos, mesmo em dispositivos mais lentos. (I6349a, b/329904950)
  • Despejar corretamente o perfil do ART durante as iterações individuais de warmUp quando o processo é encerrado para que as medições de CompilationMode.Partial(warmup=N) sejam mais precisas. (I17923).
  • Mensagem de falha na transmissão do Drop Shader
    • Adicionamos sugestões de depuração à mensagem de falha de transmissão do sombreador de queda.
    • Adição de dois argumentos de instrumentação para substituir o comportamento de descarte de sombreadores e evitar falhas ao comparar apps sem o ProfileInstaller 1.3:
      • androidx.benchmark.dropShaders.enable=true/false : pode ser usado para pular todo o descarte de sombreadores (incluindo o que é feito em inicializações de StartupMode.Cold), especialmente ao comparar 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 fazer comparativos de apps sem o profileinstaller 1.3 (I4f573).
  • Adicionamos a variante experimental MacrobenchmarkRule#measureRepeated, que usa um PerfettoConfig personalizado para 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 uma Macrobenchmark para reduzir a interferência. (I989ed).
  • A Macrobenchmark agora espera um segundo para que o aplicativo de destino limpe um perfil do ART (antes, esperava 500 ms). (I85a50, b/316082056)
  • Revisão da TraceSectionMetric
    • Observação: as mudanças em TraceSectionMetric abaixo podem afetar as saídas no uso de CI e criar descontinuidades ou interromper a análise.
    • A soma agora é o padrão, já que a maior parte do uso dessa métrica é para eventos recorrentes, e o primeiro descartaria dados nesses casos
    • Mudou para ser mais personalizável, com mais modos disponíveis
    • Os nomes dos modos agora estão incorporados ao nome da saída da métrica (no Studio e em JSON).
    • Agora oferece suporte a intervalos criados com Trace.{begin|end}AsyncSection.
  • Métricas
    • Energia: adicionamos PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge() e PowerMetric.deviceSupportsPowerEnergy()
    • Metric.getResult foi renomeado como getMeasurements para corresponder ao tipo de retorno.
    • Adicionamos rótulos 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 detectam a inicialização), apenas o torna mais compreensível. Geralmente, os que Log.w() e não informam as métricas de inicialização são aqueles em que faltam eventos que não são de frame, e as exceções são geradas quando a inicialização é detectada, exceto para informações de tempo para a renderização do frame (de frações de IU/RT). (Id240f, b/329145809).
    • Adicionamos a medição frameCount a FrameTimingMetric 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).
    • Esclarecemos que frameOverrunMs é a métrica preferencial para acompanhamento quando disponível nos documentos e explicamos o motivo. (I18749, b/329478323)
    • Correção de um problema em que frames não encerrados no início e no fim do rastro podiam ser pareados, o que era informado incorretamente como um único frame extremamente longo. (I39353, b/322232828)
    • Melhoramos o erro FrameTimingMetric quando os frames não são produzidos e sempre geramos um link para rastreamento quando a análise da métrica falha para ajudar no diagnóstico do problema. (I956b9).
    • Correção de uma falha em FrameTimingMetric que impedia a análise do ID do frame, especialmente em determinados dispositivos OEM. (Ia24bc, b/303823815, b/306235276).
    • O rigor das verificações em FrameMetrics foi reduzido, e mais detalhes foram adicionados às mensagens de erro. (Iadede).

Mudanças na captura do perfil de referência / no plug-in do Gradle desde a versão 1.2.0

  • A versão máxima recomendada do AGP foi aumentada para 9.0.0-alpha01.
  • Garantir que as tarefas mergeArtProfile e mergeStartupProfile sempre aguardem 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 as comparações usem perfis de referência gerados quando automaticGenerationDuringBuild estiver desativado (Ic144f, b/333024280).
  • Correção das substituições de propriedades do plug-in do Gradle BaselineProfile para ativar a geração de perfis de referência e a comparação ao personalizar um tipo de build nonMinified ou de 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).
  • Corrigido o URL de saída do perfil de referência e de inicialização 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 do AIDL por padrão em comparativos de mercado(requer API 28) (Ia0af2, b/341852305).
    • Ativar o rastreamento de tags do Porter por padrão em comparativos de mercado. Isso captura, por exemplo, pontos de rastreamento de wakelock. (Icfe44, b/286551983).
    • Aumentamos o tempo limite de início da captura de rastros para evitar falhas ao iniciar o rastreamento em dispositivos mais lentos (I98841, b/329145808).
    • Adicionamos a API pública PerfettoTraceProcessor.Session.queryMetrics com variantes JSON, textproto e proto binário (não decodificado). Elas permitem consultar métricas integradas ao TraceProcessor (I54d7f, b/304038382).
    • Ative o início do bloqueio no registro de trace do Perfetto para reduzir o risco de perda de dados no início do trace. Compatível apenas com a API 33 ou mais recente (Ie6e41, b/310760059).
  • Saída JSON
    • Adicionamos mais informações ao contexto de comparativo de mercado 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.ID.
      • context.build.version.codename: é igual a android.os.Build.VERSION.CODENAME.
      • context.build.version.abbreviatedCodename: corresponde à primeira letra do codinome de pré-lançamento (incluindo em builds de lançamento) (Ie5020)
    • Adicionamos a lista profilerOutput à saída JSON para facilitar o uso de ferramentas em rastreamentos de criação de perfil (por exemplo, Perfetto, rastreamentos de métodos) (I05ddd, b/332604449).
    • Adicionamos um aviso quando o Android Test Orchestrator é usado em módulos de comparação, já que isso faz com que os arquivos JSON de saída por módulo sejam substituídos repetidamente. (Ia1af6, b/286899049).
    • Gerar exceção quando os nomes de arquivo tiverem mais de 200 caracteres para evitar falhas pouco claras ao gravar ou pós-processar arquivos. (I4a5ab).

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 estes commits.

Correções de bugs

  • Correção de androidx.benchmark.cpuEventCounter que produz 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 prioridade mais baixa nos resultados de métricas de prioridade mais alta. Por exemplo, se você usar contadores de desempenho de CPU com o argumento de instrumentação cpuEventCounter.enable, o timeNs não será mais reduzido significativamente quando ocorrer uma pausa/retomada. (I39c2e, b/286306579, b/307445225).
  • Reduzimos a chance de a amostragem de pilha causar measureRepeatedOnMainThread de atingir o tempo limite fixo da linha de execução principal ao mover a conversão da amostragem de pilha para fora da linha de execução principal. (I487a8, b/342237318).
  • Remoção do contorno manual de acesso a novas APIs de plataforma, já que isso acontece automaticamente pela modelagem de API ao usar o R8 com o AGP 7.3 ou mais recente (por exemplo, R8 versão 3.3) e para todos os builds ao usar o AGP 8.1 ou mais recente (por exemplo, D8 versão 8.1). Os clientes que não usam o AGP precisam atualizar para a versão 8.1 ou mais recente do D8. Veja mais detalhes neste artigo. (I9496c, b/345472586).
  • Adicionamos a verificação de versão do AGP para enviar o nome do pacote como argumento 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 usando 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 estes commits.

Correções de bugs

  • Processar normalmente EXITCODE 2 ao iniciar o Perfetto para registrar um aviso, mas continuar.

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 estes commits.

Mudanças na API

  • MethodTracing.affectsMeasurementOnThisDevice foi renomeado como AFFECTS_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 morto em microcomparativos. (If6812, b/286091643).
  • O Microbenchmark agora vai gerar um erro corretamente para evitar que o rastreamento de método interfira nas medições. Isso ocorre em determinados dispositivos quando o rastreamento de métodos é forçado (usando argumentos de instrumentação ou MicrobenchmarkConfig) e se uma medição é tentada após um rastreamento de métodos. Os dispositivos afetados estão executando a API 26 a 30 ou determinadas versões do módulo principal do ART afetadas por essa interferência e podem ser detectados no tempo de execução via ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864).

Correções de bugs

  • A versão máxima recomendada do AGP foi atualizada para 9.0.0-alpha01. (I5bbb0).
  • Adição do modo de compilação ao contexto de comparativo de mercado (If5612, b/325512900).
  • Ativação do rastreamento da AIDL por padrão (requer a API 28) (Ia0af2, b/341852305).
  • Adicionamos mais informações ao contexto de comparativo no resultado JSON:
    • context.artMainlineVersion: versão inteira do módulo principal do Art (se presente no dispositivo, caso contrário, -1)
    • context.build.id - Igual a android.os.Build.ID
    • context.build.version.codename - Igual a android.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 respeitar androidx.benchmark.profiling.sampleDurationSeconds (Ib1d53).
  • Mude a dependência macro->common para api(), facilitando o uso de PerfettoTrace e PerfettoConfig, por exemplo. (Icdae3, b/341851833)
  • Garantir que as tarefas mergeArtProfile e mergeStartupProfile sempre aguardem 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 trace 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 estes commits.

Correções de bugs

  • Gera uma exceção mais clara quando a métrica de macrobench retorna valores zero para todas as iterações (Iab58f, b/314931695).
  • Mais regras de solução alternativa foram adicionadas às regras do ProGuard do Microbenchmark, incluindo suporte para regras de listener e outros avisos / erros observados. (I14d8f, b/329126308, b/339085669).
  • O rastreamento de métodos é executado como uma fase separada durante um macrobenchmark e não afeta mais as medições. (If9a50, b/285912360, b/336588271).
  • Adicionamos mais sugestões de depuração à mensagem de falha de transmissão do sombreador de descarte. (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 estes commits.

Mudanças na API

  • Adicionamos a variante experimental MacrobenchmarkRule#measureRepeated, que usa um PerfettoConfig personalizado para 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 como PowerMetric.deviceSupportsHighPrecisionTracking para fins de esclarecimento (I5b82f).
  • Adicionamos PowerMetric.deviceBatteryHasMinimumCharge() e PowerMetric.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

  • Adicionamos uma 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 o registro de informações quando as variantes de comparativo de mercado estão desativadas (I8a517, b/332772491).
  • Simplifique a captura de rastreamentos de métodos para uma Macrobenchmark no escopo da duração do measureBlock() real. Antes, ele começava na inicialização do processo de destino e só oferecia suporte a inicializações a frio (Iee85a, b/300651094).
  • Evita falhas quando o processador de rastreamento 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 estes commits.

Novos recursos

  • Adiciona APIs públicas PerfettoTraceProcessor.Session.queryMetrics com variantes JSON, textproto e proto binárias (não decodificadas). Com elas, é possível consultar métricas integradas ao TraceProcessor (I54d7f, b/304038382).
  • Adicionamos profilerOutput à saída JSON para facilitar o uso de ferramentas em torno de rastreamentos de criação de perfil (por exemplo, perfetto, rastreamentos de métodos). (I05ddd, b/332604449).
  • Adicionamos a tag de energia à configuração do Perfetto de comparativo de mercado. Isso captura, por exemplo, tracepoints de wakelock. (Icfe44, b/286551983).
  • Adicionamos o argumento de inst androidx.benchmark.profiling.skipWhenDurationRisksAnr, que pode ser definido como falso para evitar que os rastreamentos de método sejam ignorados quando a duração esperada puder causar um ANR. É altamente recomendável evitar isso em execuções de CI.
  • Adicionamos o argumento experimental de inst 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 do rastreamento de métodos. (I61fb4, b/329146942).

Mudanças na API

  • A TraceSectionMetric.Mode foi alterada para uma classe selada para permitir expansões futuras sem quebrar instruções "when" exaustivas (I71f7b).
  • Adicionamos TraceSectionMetric.Mode.Average e .Count e reordenamos os argumentos para que o mais comum (modo) ficasse no início da lista, reduzindo a necessidade de especificar nomes de parâmetros. (Ibefe0, b/315830077, b/322167531).
  • Metric.getResult foi renomeado como getMeasurements para corresponder ao tipo de retorno (I42595).

Correções de bugs

  • Correção para garantir que as comparações usem perfis de referência gerados quando automaticGenerationDuringBuild estiver desativado (Ic144f, b/333024280).
  • Correção das substituições de propriedade do plug-in do Gradle BaselineProfile para permitir a geração de perfis de referência e a comparação ao personalizar um tipo de build nonMinified ou de comparativo de mercado. (Ib8f05, b/324837887)
  • Correção da limpeza de rastreamentos de método na macrocomparação, para que eles sejam totalmente capturados e válidos, mesmo em dispositivos mais lentos. (I6349a, b/329904950)
  • Ative o bloqueio de início no registro de rastreamento do Perfetto para reduzir o risco de perda de dados no início do rastreamento. Compatível apenas com a API 33 ou mais recente (Ie6e41, b/310760059).
  • Adicionamos um aviso quando o Android Test Orchestrator é usado em módulos de comparativo de mercado, já que isso faz com que os arquivos JSON de saída por módulo sejam substituídos repetidamente. (Ia1af6, b/286899049).
  • Forçamos o uso de "," (vírgula) como separador de milhares para manter a consistência na saída do Studio, ignorando a localidade do dispositivo (I3e921, b/313496656).
  • TraceSectionMetric agora oferece suporte a frações criadas usando Trace.{begin|end}AsyncSection. (I91b32, b/300434906).
  • Adicionamos 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 detectam a inicialização), apenas torna o processo mais compreensível. Em geral, os que Log.w() e não informam métricas de inicialização são aqueles em que faltam eventos não relacionados a frames. Exceções são geradas quando a inicialização é detectada, exceto para informações de tempo para a renderização do frame (de slices de UI/RT). (Id240f, b/329145809).
  • Cancele os jobs dexopt em segundo plano antes de executar uma Macrobenchmark para reduzir a interferência. (I989ed).
  • Adicionamos a medição frameCount a FrameTimingMetric para ajudar a descobrir 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).
  • Esclarecemos que frameOverrunMs é a métrica preferencial para acompanhamento quando disponível nos documentos e explicamos o motivo. (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 estes commits.

Novos recursos

  • Suporte experimental ao R8 no microbenchmark usando regras incorporadas do ProGuard. Esse suporte é experimental e requer o AGP 8.3 para a minimização de testes de módulos de biblioteca. Use o seguinte para ativar a minificação/otimização do R8 no build.gradle do módulo de comparativo de mercado, o que deve levar a um aumento significativo de 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 foi corrigido para ficar 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 "deve" (Ia8f00, b/303387299).
  • Adicionamos BenchmarkRule.measureRepeatedOnMainThread para que os comparativos de mercado da linha de execução principal (por exemplo, aqueles 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 de FrameTimingMetric com medições que vêm diretamente da plataforma, em vez de serem extraídas do rastro do Perfetto. (I457cb, b/322232828).
  • Adicionamos a capacidade de despejar um perfil do ART durante as iterações individuais de warmUp. (I17923)
  • Várias mudanças na API TraceSectionMetric:
    • Adicionar Mode.Min, Mode.Max
    • Adicione o argumento de rótulo para substituir o nome da seção como rótulo da métrica
    • Adicionamos o nome do modo à saída para esclarecer o significado da métrica.
    • Mudamos o padrão para soma, já que a maior parte do uso dessa métrica é para eventos recorrentes. Esteja ciente dessas mudanças no uso de CI, pois elas podem criar descontinuidades ou interromper a análise. (Ic1e82, b/301892382, b/301955938)

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 inicialização e de referência no final da tarefa de geração (I802e5, b/313976958).
  • Ajuste dos tempos limite da fonte de dados para tentar corrigir java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788).
  • Adição de dois argumentos de instrumentação para substituir o comportamento de descarte de sombreadores e evitar falhas ao comparar apps sem o ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : pode ser usado para pular todo o descarte de sombreadores (incluindo o que é feito em inicializações de StartupMode.Cold), especialmente ao comparar 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 sombreadores, por exemplo, ao comparar apps sem o profileinstaller 1.3 (I4f573).
  • Pule o rastreamento de método na linha de execução da interface quando a duração esperada for maior que alguns segundos e limpe os rastreamentos de método ao gerar exceções. (I6e768).
  • Lança uma exceção quando os nomes de arquivos têm mais de 200 caracteres para evitar falhas pouco claras ao gravar ou pós-processar arquivos. (I4a5ab).
  • Correção de um problema em que frames não encerrados no início e no fim do rastro podiam ser pareados, o que era informado incorretamente como um único frame extremamente longo. (I39353, b/322232828)
  • Use --skip verification na API 30+ ao reinstalar um pacote na API 30-33 para limpar os perfis do ART em builds de usuário. Isso ajuda a evitar avisos do Play Protect que causam falhas em alguns tipos de dispositivos. (Ic9e36)
  • Use am force-stop para encerrar apps que não sejam 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 ART (antes, aguardava 500 ms). (I85a50, b/316082056)
  • Melhoria do erro FrameTimingMetric quando os frames não são produzidos e sempre saída do link para rastrear quando a análise de métricas falha para ajudar a diagnosticar o problema. (I956b9).
  • Correção de uma falha em FrameTimingMetric que não analisava o ID do frame, especialmente em determinados dispositivos OEM. (Ia24bc, b/303823815, b/306235276).
  • Reduzimos a rigidez das verificações em FrameMetrics e adicionamos mais detalhes à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 estes commits.

Correções de bugs

  • Correção do srcset do perfil de referência que não estava sendo configurado em variantes de comparativo de mercado. Também corrige o 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 o acesso rápido. Isso corrige as falhas de comparativos de mercado de StartupMode.COLD em "O pacote $package não pode estar em execução antes da inicialização a frio!" devido à falha parcial do encerramento do processo. (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

  • Remoção da exceção 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 em AARs 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

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

  • Melhoria na mensagem de erro quando o usuário desativa variantes de teste (b/307478189).
  • Adicionamos propriedades para oferecer suporte à integração de execução de testes 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 Gradle do perfil de referência 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 da API experimental anterior BaselineProfileRule.collectBaselineProfile
    • Basta especificar packageName e controlar o app
  • 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

Macrobenchmark

  • Compilação
    • A Macrobenchmark agora redefine totalmente o estado de cada compilação. Isso exige a reinstalação do APK antes do Android 14. Portanto, recomendamos fazer a comparação no Android 14 ou mais recente se você quiser manter o estado (como o login do usuário) no que está sendo medido.
    • Também é possível contornar esse problema controlando a compilação do app separadamente e pulando a compilação com CompilationMode.Ignore() ou o 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 e MethodTracing.
    • Adição de androidx.benchmark.enabledRules para permitir a filtragem em tempo de execução de testes de regras de perfil de referência x macrobenchmark
    • Adição do argumento androidx.benchmark.perfettoSdkTracing.enable para ativar o rastreamento com o tracing-perfetto, por exemplo, o rastreamento de recomposição do Compose. Quando usado com StartupMode.COLD, o tempo será significativamente afetado, já que a biblioteca de rastreamento é carregada e ativada durante a inicialização do app.
  • Requisitos

    • Agora, a 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.
  • Novas APIs de métricas experimentais

    • Adicionamos a TraceSectionMetric experimental, que permite extrair a medição de tempo simples de blocos trace("") {} no seu app ou TraceMetric para aproveitar toda a capacidade de consulta do Perfetto TraceProcessor.
    • Adição do PowerMetric experimental para capturar informações de uso de energia.
    • Adição do MemoryCountersMetric experimental para contar falhas de página
    • Adicionamos a API experimental PerfettoTraceProcessor, que é usada internamente para extrair métricas de rastreamentos do sistema (também conhecidos como rastreamentos do Perfetto).
  • 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 app).
    • Foi corrigido o problema em que FrameTimingMetric ignorava frames com IDs inconsistentes (geralmente, frames durante ondulações na API 31 ou mais recente) (I747d2, b/279088460).
    • Correção de erros de análise em rastreamentos > 64 MB (Ief831, b/269949822).
    • Erros esclarecidos quando a imagem do SO do dispositivo (especialmente o emulador) não está configurada corretamente para rastreamento ou compilação.
    • Ignorar a verificação do nível de bateria 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 do StartupMode.COLD ao descartar de forma consistente o cache de sombreador (também exposto por MacrobenchmarkScope.dropShaderCache)
    • Correção do fallback do modo leanback para startActivityAndWait.

Microbenchmark

  • Recursos
    • A criação de perfil foi movida para uma fase separada, depois de 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 rastreamento e criação de perfis. Pode ser usado para capturar rastreamentos de métodos ou pontos de rastreamento (mas esteja ciente da sobrecarga de rastreamento).
    • Adicionamos APIs experimentais para controlar BenchmarkState separadamente de BenchmarkRule, sem o JUnit.
    • Adicionamos o registro experimental PerfettoTrace para permitir a captura de rastreamentos do Perfetto, com configuração personalizada, separada das APIs de comparativo de mercado.
  • Correções
    • Solução alternativa para espaços em branco ausentes na saída de comparativo de mercado do Android Studio.
    • Correção de um problema em que os avisos não eram impressos na saída de comparativo de desempenho do Android Studio.
    • Correção de uma falha de SampledProfiling no Android 13 (API 33) e versões mais recentes.
    • Melhoria significativa no desempenho de dryRunMode ao pular o rastreamento de IsolationActivity e 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

  • Correção da saída do arquivo de comparativo de mercado para não interromper mais a cópia de arquivos do plug-in BaselineProfile. Os arquivos foram gerados e copiados do dispositivo, mas foram renomeados para que o plug-in do Gradle não os visse. (I8dbcc, b/303034735, b/296453339).
  • Esclarecemos as mensagens de erro de carregamento de tracing-perfetto ao injetar do módulo de 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

  • Agora, uma exceção (com instruções de correção) é gerada quando o rastreamento do SDK do Perfetto não é inicializado em um comparativo de mercado. (I6c878, b/286228781).
  • Correção de uma falha de OOM ao converter o rastreamento de método ART para o formato do Perfetto. (I106bd, b/296905344).
  • (Macrobenchmark) Esclarecemos o rótulo de rastreamento de método quando vinculado à saída de teste do Studio e corrigimos os nomes de arquivos de rastreamento de método para serem exclusivos no dispositivo/host. Assim, eles não serão substituídos quando mais de um comparativo for executado. (I08e65, b/285912360).
  • Garante que o dispositivo esteja ativado 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 estes commits.

Novos recursos

  • O plug-in do perfil de referência para Gradle agora é compatível com o 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 estes commits.

Novos recursos

  • O plug-in do perfil de referência para Gradle agora é compatível com o 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 (especialmente aqueles de testes parametrizados) ao limpar 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

  • Adição de 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 como perfettoSdkTracing.enable para manter a consistência com o nome do artefato e outras referências. fullTracing.enable vai continuar funcionando como substituto. (I7cc00)
  • Os pontos de rastreamento internos da biblioteca de comparativos de mercado (incluindo rastreamento de fase/loop 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 da macrobenchmark na API 31+ foi removido, e a verificação de perfil em dispositivos com acesso root eng/userdebug foi ignorada. (I2abac, b/291722507).
  • Ao usar as otimizações de layout DEX, as regras de perfil de inicialização agora também são consideradas 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ções personalizadas de microbench (por exemplo, criação de perfil e rastreamento). (I86101, b/291820856)

Correções de bugs

  • Relata um erro na macrobench quando o SO está mal configurado para rastreamento, como foi corrigido recentemente nos emuladores ARM64 da API 26/28. (I0a328, b/282191686)
  • Adicionamos detalhes à falha na redefinição da compilação para sugerir a atualização do emulador, já que alguns emuladores corrigiram esse problema recentemente. (I8c815, b/282191686).
  • Transforme androidx.test.uiautomator:uiautomator:2.2.0 em uma dependência api em vez de implementation. (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 do Benchmark no Studio e solução alternativa para espaços em branco à esquerda da saída do Benchmark que não apareciam no Studio (Ia61d0, b/227205461, b/286306579, b/285912360).
  • Comentário corrigido para FrameTimingMetric. A submétrica é chamada de frameDurationCpuMs. (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 como BaselineProfileRule.collect(). (I4b665).

Correções de bugs

  • Suporte da Macrobenchmark para androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • A criação de perfil de microbenchmarks foi movida para uma fase separada. Portanto, ela ocorre em sequência após a medição, em vez de substituí-la. As seções de rastreamento MethodTracing também estão incluídas no rastreamento do Perfetto capturado, se presentes. (I9f657, b/285014599).
  • Adicione a medição de contagem a TraceSectionMetric com Mode.Sum. (Ic121a, b/264398606).

Versão 1.2.0-alpha15

7 de junho de 2013

Lançamento de androidx.benchmark:benchmark-*:1.2.0-alpha15. A versão 1.2.0-alpha15 contém estas confirmações.

Novos recursos

  • Adicionamos o 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 totalmente personalizadas do Perfetto com PerfettoTrace.record (If9d75, b/280460183).
  • Adição de 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 API collectStableBaselineProfile foi removida. Use collectBaselineProfile. (I17262, b/281078707).
  • Mudança do argumento filterPredicate de BaselineProfileRule para não nulo, com um valor padrão equivalente para que o comportamento do filtro padrão fique mais claro na documentação. (I3816e).

Correções de bugs

  • Desative IsolationActivity e o rastreamento do Perfetto em dryRunMode para melhorar significativamente a performance, já que eles representavam a maior parte do tempo de execução. (Ie4f7d).
  • Suporte à amostragem de pilha de chamadas em macrobenchmarks usando argumentos de teste de instrumentação androidx.benchmark.profiling.mode=StackSampling e androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489).
  • Correção de uma falha ao descartar sombreadores 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 que ignorava frames com IDs inconsistentes. Isso fazia com que algumas animações em versões recentes da plataforma (API 31+) ignorassem muitos frames enquanto RenderThread estava em animação (por exemplo, durante um efeito de ondulação). (I747d2, b/279088460).
  • Correção da análise do processador de trace para traces maiores que 64 MB. (Ief831, b/269949822).
  • Correção da geração de perfis de referência no Android U, que falhava devido à saída diferente do comando pm dump-profiles. (Id1392, b/277645214).
  • Correção do script de bloqueio de clock 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

  • Adição de um parâmetro de tipo de perfil ao gerar perfis de referência para oferecer suporte ao recurso de perfil de inicialização (Ie20d7, b/275093123).
  • Adicionamos uma nova API experimental TraceMetric para definir métricas totalmente personalizadas com base no conteúdo de um rastreamento do Perfetto. (I4ce31, b/219851406)
  • Adição de 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 nas APIs 21 e 22, o que inclui os Microbenchmarks e as APIs experimentais PerfettoTrace. Antes dessa versão, as conexões UiAutomation não eram confiáveis em alguns dispositivos. (I78e8c).
  • Adição de uma API experimental pública para PerfettoTraceProcessor que permite analisar o conteúdo do rastreamento. Essa é uma etapa para métricas totalmente personalizadas com base nos dados de rastreamento 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 e BaselineProfileRule ao reinstalar ou extrair perfis de um pacote de app 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 para androidx.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 {} e PerfettoTraceRule 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 do StartupMode.COLD, já que os sombreadores agora são apagados de forma consistente em cada iteração. Anteriormente, a compilação Partial, 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 de profileinstaller:1.3.0-alpha02 no app de destino. Para ver as mudanças na API da biblioteca ProfileInstaller, 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étrica inflateMs pelo tempo total em uma macrobenchmark gasta na inflação. Também removemos o requisito da API de nível 29, já que a TraceSectionMetric funciona com androidx.tracing.Trace de volta aos níveis mais baixos da API, com o uso de forceEnableAppTracing 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 que StartupMode.COLD não encerrava o processo de destino após setupBlock. Agora, a interação de setupBlock 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 ou CompilationMode.Partial(warmupIterations) em um dispositivo sem acesso root, também é necessário atualizar o androidx.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 listar FrameOverrun 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 por MacrobenchmarkScope.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, sem BenchmarkRule e JUnit4 (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 gerar BaselineProfiles 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, como PowerMetric.configure (I5cf20, b/227229375).
  • TotalPowerMetric e TotalEnergyMetric 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 de 1.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

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

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 gerar BaselineProfiles 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 que Compilation.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

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 de androidx.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 bloco setup, porque ele tinha a mesma função que profileBlock (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 como FrameDurationCpu e FrameUiTime como FrameDurationUi 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 ou androidx.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 como None (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 no CompilationMode.BaselineProfile (I42657, b/196074999). OBSERVAÇÃO: requer a atualização para androidx.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 a CompilationMode.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

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 ou expr.
  • 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.
  • 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 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 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.