Benchmark

Misura con precisione le prestazioni del codice in Android Studio.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Alpha Release
30 luglio 2025 1.4.0 - - -

Dichiarazione di dipendenze

Per aggiungere una dipendenza a Benchmark, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.

Macrobenchmark

Per utilizzare Macrobenchmark nel tuo progetto, aggiungi le seguenti dipendenze al file build.gradle per il tuo modulo macrobenchmark:

Groovy

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

Kotlin

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

Microbenchmark

Per utilizzare Microbenchmark nel tuo progetto, aggiungi le seguenti dipendenze al file build.gradle per il tuo modulo microbenchmark:

Groovy

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

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

Kotlin

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

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

La libreria Microbenchmark fornisce anche un plug-in Gradle da utilizzare con il modulo di microbenchmark. Questo plug-in imposta i valori predefiniti della configurazione di build per il modulo, configura la copia dell'output del benchmark sull'host e fornisce l' attività ./gradlew lockClocks.

Per utilizzare il plug-in, includi la seguente riga nel blocco "plugins" del file build.gradle di primo livello:

Groovy

plugins {
  id 'androidx.benchmark' version '1.4.0' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.4.0" apply false
}

Applica il plug-in al file build.gradle del modulo di benchmark

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa libreria. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa libreria. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Creare un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 1.4

Versione 1.4.0

30 luglio 2025

androidx.benchmark:benchmark-*:1.4.0 viene ritirata. La versione 1.4.0 contiene questi commit.

Modifiche importanti dalla versione 1.3.0

Microbenchmark

  • Le attività Gradle lockClocks e unlockClocks sono state spostate nei progetti di benchmark, anziché a livello principale, per rispettare l'isolamento dei progetti Gradle.
  • È stato eseguito il refactoring di BenchmarkRule per essere basato su coroutine e supportare un comportamento migliore di yield(). In questo modo si dovrebbe ridurre notevolmente il rischio di errori ANR durante l'esecuzione dei benchmark, in particolare delle lunghe esecuzioni di integrazione continua. Nota: i benchmark della UI devono essere eseguiti con measureRepeatedOnMainThread

Macrobenchmark

  • È stata aggiunta una soluzione alternativa all'API 34+ per CompilationMode.None(), che avrebbe prestazioni incoerenti a causa della compilazione parziale delle app da parte di ART dopo il primo avvio.
  • Funzionalità sperimentale: Startup Insights può evidenziare alcuni problemi comuni in una macrobenchmark di avvio passando MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))).
  • È stato aggiunto ArtMetric, che può essere utilizzato per rilevare la compilazione JIT e il caricamento di classi non ottimizzato, entrambi utili per convalidare le ottimizzazioni del profilo di base.

Profili di base

  • BaselineProfileRule ora raccoglie i profili per le app multiprocesso.

Altre modifiche

  • TraceProcessor è stato estratto in una libreria separata (androidx.benchmark:benchmark-traceprocessor) in modo che possa essere utilizzato al di fuori delle metriche Macrobenchmark, in altri casi. Può essere eseguito anche su JVM desktop definendo un ServerLifecycleManager personalizzato.

Versione 1.4.0-rc01

18 giugno 2025

androidx.benchmark:benchmark-*:1.4.0-rc01 viene ritirata. La versione 1.4.0-rc01 contiene questi commit.

Correzioni di bug

  • È stata aggiunta una soluzione alternativa per le immagini di runtime che impediscono a CompilationMode.None() di misurare le prestazioni nel caso peggiore dopo la prima iterazione. Purtroppo questa soluzione alternativa richiede un ritardo di 5 secondi per danneggiare intenzionalmente l'immagine di runtime all'inizio di ogni suite di macrobenchmark (I4a4f1).

Versione 1.4.0-beta02

4 giugno 2025

androidx.benchmark:benchmark-*:1.4.0-beta02 viene ritirata. La versione 1.4.0-beta02 contiene questi commit.

Modifiche alle API

  • È stato aggiunto un BaselineProfileConfig.Builder per semplificare la chiamata di BaselineProfileRule.collectWithResults() per gli sviluppatori Java. (I94905)

Versione 1.4.0-beta01

7 maggio 2025

androidx.benchmark:benchmark-*:1.4.0-beta01 viene ritirata. La versione 1.4.0-beta01 contiene questi commit.

Modifiche alle API

  • Aggiunta della variante del costruttore PerfettoTraceRule che accetta un PerfettoConfig (Ie53ba)

Correzioni di bug

  • È stato aggiornato il formato del link agli approfondimenti sull'avvio di TraceProcessor per utilizzare il plug-in corretto e un delimitatore più chiaro (: è più breve di %3A ed entrambi sono supportati) (Ie18ef)
  • Utilizza sempre l'interruzione forzata per terminare i processi, anche quando il dispositivo è sottoposto a rooting e vengono interrotte le app di sistema. Corregge le eccezioni del modulo: Expected no stdout/stderr from killall ... No such process. (Idca2c)

Contributo esterno

  • Aggiunto gestore delle eccezioni del proxy per TraceProcessorHttpServer (I480f5)

Versione 1.4.0-alpha11

9 aprile 2025

androidx.benchmark:benchmark-*:1.4.0-alpha11 viene ritirata. La versione 1.4.0-alpha11 contiene questi commit.

Modifiche alle API

  • Modificato il timeout dell'argomento di TraceProcessor: durata di timeoutMs per l'usabilità del chiamante Java. (I9fbb5)
  • Contrassegna il costruttore TraceProcessor come interno. I chiamanti devono utilizzare TraceProcessor.startServer o TraceProcessor.runServer. (Ia8c5b)

Correzioni di bug

  • Quando termini l'applicazione con MacrobenchmarkScope.killProcess, convalida i risultati del comando di terminazione per evitare errori invisibili e di timeout. (I84555)

Aggiornamenti delle dipendenze

  • Questa libreria ora ha come target il livello del linguaggio Kotlin 2.0 e richiede KGP 2.0.0 o versioni successive. (Idb6b5)

Versione 1.4.0-alpha10

26 marzo 2025

androidx.benchmark:benchmark-*:1.4.0-alpha10 viene ritirata. La versione 1.4.0-alpha10 contiene questi commit.

Modifiche alle API

  • Aumento del timeout predefinito per il caricamento e l'interrogazione del server TraceProcessor a 120 secondi (rispetto ai 60/30 precedenti) ed è stato reso configurabile con un solo parametro di timeout. (Ifec87)

Correzioni di bug

  • Sono stati risolti alcuni problemi che si verificavano durante il benchmarking o l'acquisizione dei profili di un'app senza profileinstaller, che è incluso in BroadcastReciever. Questo problema riguarda solo le corse su dispositivi con accesso root. (Ied308)

Versione 1.4.0-alpha09

12 marzo 2025

androidx.benchmark:benchmark-*:1.4.0-alpha09 viene ritirata. La versione 1.4.0-alpha09 contiene questi commit.

Modifiche alle API

  • Sono state aggiunte l'API TraceProcessor e Session con handle chiudibili, per un utilizzo più semplice con cicli di vita personalizzati. Questo è anche un passo avanti verso un utilizzo più semplice delle API Coroutine e Java. Le funzioni dell'estensione TraceProcessor.runServer {} ora sono contrassegnate come sperimentali, in quanto è probabile che vengano spostate e rese non sperimentali in futuro. (I358b4)

Correzioni di bug

  • È stato corretto il problema relativo all'acquisizione di profili di benchmark e di base che non funzionano con l'API 36 a causa di una modifica in pgrep toybox che ora richiede -a per stampare la riga di comando completa. (Idc991)
  • Filtra la configurazione di tracciamento predefinita per ridurre il rischio di perdita di dati nelle tracce nei livelli API più recenti. (I54e8a)
  • È stato aggiunto l'argomento di strumentazione sperimentale androidx.benchmark.killExistingPerfettoRecordings, che può essere impostato su false per consentire la continuazione dell'acquisizione delle tracce Perfetto preesistenti. Per impostazione predefinita, le acquisizioni di tracce Perfetto preesistenti sul dispositivo vengono interrotte per evitare interferenze. (I02a3c)
  • Il campo JSON context.osCodenameAbbreviated ora sarà REL per le versioni del sistema operativo rilasciate con API 35 e successive, poiché i nomi in codice non numerici non sono più supportati dalla piattaforma sottostante. (Ib17fd)
  • Corregge l'arresto anomalo in FrameTimingMetric quando si verificano frame risincronizzati. (I7c6f4, b/394610806)
  • Non presupporre più che Choreographer#doFrame sia la parte superiore del frame dello stack nel thread principale per FrameTimingQuery. (Iee0e0, b/340206285)

Versione 1.4.0-alpha08

12 febbraio 2025

androidx.benchmark:benchmark-*:1.4.0-alpha08 viene ritirata. La versione 1.4.0-alpha08 contiene questi commit.

Modifiche alle API

  • Le API di estensione TraceProcessor.runSession() sono state spostate in modalità sperimentale, in quanto è probabile che alla fine diventeranno costruttori concreti su Android. (Ib0528, b/393640753)
  • La maggior parte dell'implementazione di Startup Insights è ora pubblica/sperimentale e si sposta nell'artefatto TraceProcessor. Vedi StartupInsights. (I0aa00)
  • Ritira BenchmarkRule.runWithTimingDisabled {} a favore di BenchmarkRule.runWithMeasurementDisabled {}, che descrive più chiaramente il comportamento: tutte le metriche vengono messe in pausa. Inoltre, espone la superclasse MicrobenchmarkScope poiché non è possibile dichiarare nuovamente la funzione runWithMeasurementDisabled per aprire l'accesso, in quanto è inline. (I9e23b, b/389149423, b/149979716)
  • Le librerie di benchmarking sono state spostate su Kotlin 2.0. (I9d1e0)
  • Argomento di strumentazione androidx.benchmark.startupProfiles.enable rimosso. Non è più utile, in quanto può essere controllato dall'argomento includeInStartupProfile in BaselineProfileRule.collect(). (I39eb4)

Correzioni di bug

  • È stato ridotto il numero di funzioni interne di Microbenchmark chiamate durante la profilazione per rendere più chiare, ad esempio, le tracce dei metodi (Ifaed8).
  • Correzione speculativa per i blocchi: "Failed to stop [ProcessPid(processName=perfetto, pid=...)]" (Impossibile arrestare [ProcessPid(processName=perfetto, pid=...)]). Ora Benchmark registra un messaggio anziché bloccarsi quando non è possibile arrestare un processo Perfetto in background prima di eseguire il benchmark. (I37d3e, b/323601788)
  • Correggi IllegalStateExceptions con l'etichetta "Expected pm dump-profiles stdout" causata da un controllo del formato di output eccessivamente rigoroso. (I358dc)

Versione 1.4.0-alpha07

29 gennaio 2025

androidx.benchmark:benchmark-*:1.4.0-alpha07 viene ritirata. La versione 1.4.0-alpha07 contiene questi commit.

Nuove funzionalità

  • BaselineProfileRule ora introduce un'API collectWithResults(...) che include un elenco di percorsi ai profili calcolati. (I056f8)
  • È stato aggiunto l'argomento di strumentazione androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline, che può essere impostato su false per disattivare il comportamento di measureRepeatedOnMainThread in caso di scadenza per i test locali. Non è consigliato, in quanto aumenta la probabilità di errori ANR durante i test. (Idbeec, b/353226476)

Modifiche alle API

  • Aggiunta di @JvmOverloads al costruttore MicrobenchmarkConfig. (I13fd3)
  • È stato eseguito il refactoring di BenchmarkRule per essere basato su coroutine e supportare un comportamento migliore di yield(). Questo refactoring ha rimosso diverse API BenchmarkState sperimentali, ma verranno aggiunte sostituzioni in base alle necessità. Inoltre, è stato aggiunto runWithMeasurementDisabled per chiarire il comportamento (tutta la misurazione è sospesa). In futuro, runWithTimingDisabled verrà ritirato. (I19837, b/389149423, b/311242861)
  • Sposta PerfettoTraceProcessor in TraceProcessor in un nuovo artefatto androidx.benchmark:benchmark-traceprocessor e rendi la maggior parte della sua API non sperimentale. Qualsiasi TraceMetric personalizzato o qualsiasi elemento che legge dalle tracce dovrà essere aggiornato alla nuova importazione TraceProcessor. La nuova API TraceProcessor funziona esattamente come la precedente, ma è una libreria di interfacce autonoma (in qualche modo analoga al livello androidx.sqlite di Room) con un'implementazione specifica per Android integrata in macrobenchmark. Il nuovo artefatto può essere utilizzato anche sulla JVM, ma al momento dovrai avviare la tua copia del binario TraceProcessor e offrire una porta a cui connetterti. (I3a767, I62563, b/381134564)

Correzioni di bug

  • Mostra un messaggio di errore più chiaro quando MacrobenchmarkScope.startActivityAndWait non riesce ad avviare il processo di destinazione (potenzialmente a causa di un arresto anomalo nel processo di destinazione), anziché il messaggio più ambiguo "Impossibile confermare il completamento dell'avvio dell'attività" (I3539b)
  • Sono stati corretti diversi errori di sintassi negli esempi Kotlin e l'evidenziazione della sintassi in diversi esempi Java / build.gradle. (Ib3808)
  • Documenti sui parametri ArtMetric e CaptureInfo più chiari. (I96e60)

Versione 1.4.0-alpha06

11 dicembre 2024

androidx.benchmark:benchmark-*:1.4.0-alpha06 viene ritirata. La versione 1.4.0-alpha06 contiene questi commit.

Modifiche alle API

  • È stato rimosso l'utilizzo di @Language("sql") in PerfettoTraceProcessor.Session.query(), in quanto l'evidenziazione/l'analisi di Studio non funziona. (Idc2fa, b/377733398)

Correzioni di bug

  • Questa libreria ora utilizza le annotazioni di nullabilità JSpecify, che sono di tipo use. Gli sviluppatori Kotlin devono utilizzare il seguente argomento del compilatore per imporre l'utilizzo corretto: -Xjspecify-annotations=strict (questo è il valore predefinito a partire dalla versione 2.1.0 del compilatore Kotlin). (I46810, b/326456246)
  • È stato corretto ArtMetric per segnalare il caricamento della classe (non l'inizializzazione) e sono stati migliorati i documenti per chiarire il comportamento di runtime. (I9915c)
  • Su Android Multiuser, esegui i comandi come root solo sui dispositivi con accesso root. (I88b44)

Versione 1.4.0-alpha05

13 novembre 2024

androidx.benchmark:benchmark-*:1.4.0-alpha05 viene ritirata. La versione 1.4.0-alpha05 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema relativo all'API 34+ in cui CompilationMode.None() avrebbe prestazioni incoerenti non rappresentative delle prestazioni iniziali nel caso peggiore. Questa soluzione aggira una modifica della piattaforma che consente lo stato di compilazione di ART verify per compilare parzialmente le app (interessando solo il caricamento delle classi) poco dopo il primo avvio. (Ie48d0)
  • Risolto un problema per cui potevano essere acquisite tracce (soprattutto brevi) che non segnalavano la misurazione delle metriche Macrobenchmark integrate, a causa del troncamento del nome del processo all'interno della traccia Perfetto. Ora macrobenchmark aggira questo problema cercando il nome del pacchetto troncato in tutte le query integrate, oltre al nome del pacchetto previsto. Tieni presente che le implementazioni personalizzate di TraceMetric o altri chiamanti diretti di PerfettoSession.query possono implementare questo stesso comportamento modificando process.name LIKE "$packageName" in una query Perfetto in modo che sia invece (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"). (I5bf01, b/377565760)

Versione 1.4.0-alpha04

30 ottobre 2024

androidx.benchmark:benchmark-*:1.4.0-alpha04 viene ritirata. La versione 1.4.0-alpha04 contiene questi commit.

Nuove funzionalità

  • (Sperimentale) Attiva la generazione del profilo di base e il benchmarking sulle app installate su un utente secondario, ad esempio qualsiasi app sui dispositivi Android Auto headless. Questo supporto è stato testato in alcuni scenari, ma segnalaci un bug se non funziona per te. (I9fcbe, b/356684617, b/373641155)

Correzioni di bug

  • isProfileable ora viene sempre sostituito nelle build di benchmark e isDebuggable ora viene sempre sostituito sia nelle build di benchmark sia in quelle nonMinified (acquisizione del profilo di base). (I487fa, b/369213505)
  • Correzioni del rilevamento della compilazione su alcuni dispositivi fisici precedenti all'API 28: influisce su json context.compilationMode, nonché sul comportamento di androidx.benchmark.requireAot=true (che non genera più errori in modo errato) (Ic3e08, b/374362482)
  • Nelle metriche CpuEventCounter, genera un errore se vengono osservate misurazioni non valide (ad es. istruzioni/cpucycles==0) (I8c503)

Versione 1.4.0-alpha03

16 ottobre 2024

androidx.benchmark:benchmark-*:1.4.0-alpha03 viene ritirata. La versione 1.4.0-alpha03 contiene questi commit.

Modifiche alle API

  • Macrobenchmark: aggiunge ArtMetric, che può essere utilizzato per esaminare la copertura del profilo o le prestazioni generali di Android RunTime. Acquisisce il numero e la durata totale di JIT, inizializzazione della classe (se disponibile) e verifica della classe. Inoltre, le modifiche CaptureInfo includono la versione principale ART facoltativa con impostazione predefinita. (I930f7)
  • Aggiungi coefficientOfVariation all'output JSON del benchmark per mostrare la stabilità all'interno di una determinata esecuzione del benchmark. (Ib14ea)

Correzioni di bug

  • Corretto CollectBaselineProfileTask quando il dispositivo AVD contiene spazi. (Ia0225, b/371642809)
  • Correzione speculativa per gli errori derivanti dalle eccezioni StartupMode.COLD: Package <packagename> must not be running prior to cold start!. Ora, MacrobenchmarkScope.killProcess() (inclusa quella eseguita prima di ogni iterazione, utilizzata per implementare il comportamento di StartupMode.COLD) attenderà di verificare che tutti i processi dell'app siano stati interrotti. (I60aa6, b/351582215)
  • Risolto il problema per cui l'errore UNLOCKED_ veniva visualizzato su alcuni emulatori con accesso root. (Ic5117)
  • Questa libreria ora utilizza le annotazioni di nullabilità JSpecify, che sono di tipo use. Gli sviluppatori Kotlin devono utilizzare il seguente argomento del compilatore per imporre l'utilizzo corretto: -Xjspecify-annotations=strict (questo è il valore predefinito a partire dalla versione 2.1.0 del compilatore Kotlin). (I7104f, b/326456246)

Versione 1.4.0-alpha02

2 ottobre 2024

androidx.benchmark:benchmark-*:1.4.0-alpha02 viene ritirata. La versione 1.4.0-alpha02 contiene questi commit.

Modifiche alle API

  • Le attività Gradle lockClocks e unlockClocks sono state spostate nei progetti di benchmark, anziché essere disponibili al livello superiore. Questa modifica è stata necessaria perché purtroppo non è possibile registrarle come azioni di primo livello senza interrompere l'isolamento del progetto. (I02b8f, b/363325823)

Correzioni di bug

  • BaselineProfileRule ora raccoglie i profili per le app multiprocesso segnalando ogni processo in esecuzione alla fine del blocco per scaricare i profili. Se una compilazione basata sul profilo non trova mai un processo a cui trasmettere, la compilazione non andrà a buon fine, in quanto è inatteso che contenga dati del profilo. Inoltre, è stato aggiunto un argomento di strumentazione per controllare la durata dell'attesa del dump: androidx.benchmark.saveProfileWaitMillis (I0f519, b/366231469)
  • Da Benchmark 1.3.2: è stato risolto il problema per cui Firebase Test Lab (FTL) non riusciva a estrarre i file dei risultati del profilo di base o di Macrobenchmark dal plug-in Gradle del profilo di base. (I2f678, b/285187547)

Per utilizzare FTL, applica il plug-in al modulo del profilo di base nel blocco dei plug-in con:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

e poi configura Firebase Test Lab con:

  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}")
          }
      }
  }

Inoltre, il dispositivo FTL creato deve essere aggiunto all'estensione del profilo di base:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Versione 1.4.0-alpha01

18 settembre 2024

androidx.benchmark:benchmark-*:1.4.0-alpha01 viene ritirata. La versione 1.4.0-alpha01 contiene questi commit.

Nuova funzionalità: approfondimenti sull'avvio dell'app

  • La versione iniziale degli approfondimenti sull'avvio dell'app può essere attivata in Macrobenchmark. (09fae38)

Per attivare un benchmark per le startup:

  @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(...)
      }
  }

L'esecuzione del benchmark di avvio analizzerà la traccia per cercare problemi comuni e li stamperà dopo le metriche nell'output del test di Studio nella scheda Benchmark, ad esempio:

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

Questa funzionalità è ancora in fase di sviluppo, con miglioramenti alla documentazione e all'estensibilità da seguire, ma i feedback sono ben accetti.

Nuove funzionalità

  • È stata aggiunta la proprietà gradle androidx.baselineprofile.suppressWarnings per eliminare tutti gli avvisi relativi ai profili di base. (314153a)
  • Le metriche di microbenchmark vengono ora visualizzate nelle tracce Perfetto come contatori. (3214854)
  • Aggiungi script sperimentali per disattivare JIT (richiede il riavvio della radice / del runtime) e per ripristinare lo stato di test/prestazioni del dispositivo. Al momento non vengono pubblicati come attività Gradle. (7c3732b)
  • È stato aggiunto l'argomento benchmark per ignorare i test durante l'esecuzione sull'emulatore. Quando è abilitata la build automaticGenerationDuring, i benchmark attivano anche la generazione del profilo di base. L'operazione non andrà a buon fine se vengono utilizzati emulatori. Con il nuovo argomento skipBenchmarksOnEmulator possiamo invece saltare il test. (0c2ddcd)
  • Modifica della logica di attivazione dell'evento di rendimento per l'esecuzione su API 23+ (2550048)

Modifiche alle API

  • L'argomento sperimentale PerfettoConfig esistente in MacrobenchmarkRule.measureRepeated() è stato spostato nel nuovo oggetto ExperimentalConfig.

Correzioni di bug

  • Aumenta il numero di tentativi di lockClocks.sh (99e9dac)
  • Non creare tipi di build nonMinified e benchmark se esistenti. A causa di un bug, anche se esistevano tipi di build nonMinified e benchmark, questi venivano ricreati. (e75f0a5)
  • Ignora le sezioni non finali dai risultati di TraceSectionMetric. (a927d20)
  • Controllo dell'emulatore migliorato per considerare il prefisso sdk_. (1587de8)
  • Considera i pacchetti non in esecuzione come eliminati in FrameTimingGfxInfoMetric. (35cc79c)
  • Correzione di androidx.benchmark.cpuEventCounter che produce valori danneggiati per gli eventi non di istruzione. (06edd59)
  • Correzione di resumeTiming/runWithTimingDisabled per rispettare l'ordine di priorità delle metriche e ridurre significativamente l'impatto della sospensione/ripresa delle metriche a priorità inferiore sui risultati delle metriche a priorità superiore. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di strumentazione cpuEventCounter.enable, timeNs non viene più ridotto in modo significativo quando si verificano pause/riprese. (5de0968)

Versione 1.3

Versione 1.3.4

26 marzo 2025

androidx.benchmark:benchmark-*:1.3.4 viene ritirata. La versione 1.3.4 contiene questi commit.

Correzioni di bug

  • Sono state corrette le incompatibilità dell'isolamento del progetto Gradle nel plug-in Gradle di Benchmark Baseline. (b/404523257)

Versione 1.3.3

16 ottobre 2024

androidx.benchmark:benchmark-*:1.3.3 viene ritirata. La versione 1.3.3 contiene questi commit.

Correzioni di bug

  • Correzione di CollectBaselineProfileTask quando il dispositivo AVD contiene spazi (Ia0225, b/371642809)

Versione 1.3.2

2 ottobre 2024

androidx.benchmark:benchmark-*:1.3.2 viene ritirata. La versione 1.3.2 contiene questi commit.

Correzioni di bug

  • È stato risolto il problema per cui Firebase Test Lab (FTL) non riusciva a estrarre i file dei risultati del profilo di base o di Macrobenchmark dal plug-in Gradle del profilo di base. (I2f678, b/285187547)

Per utilizzare FTL, applica il plug-in al modulo del profilo di base nel blocco dei plug-in con:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

e poi configura Firebase Test Lab con:

  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}")
          }
      }
  }

Inoltre, il dispositivo FTL creato deve essere aggiunto all'estensione del profilo di base:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Versione 1.3.1

18 settembre 2024

androidx.benchmark:benchmark-*:1.3.1 viene ritirata. La versione 1.3.1 contiene questi commit.

Correzioni di bug

  • È stata aggiunta la proprietà Gradle androidx.baselineprofile.suppressWarnings per eliminare tutti gli avvisi relativi ai profili di base (I7c36e, b/349646646)
  • È stato corretto il plug-in Gradle per il profilo di base in modo che utilizzi nonMinified… e benchmark… preesistenti se creati dall'app anziché creare wrapper. (Ia8934, b/361370179)
  • È stato corretto java.lang.AssertionError: ERRORS (not suppressed): EMULATOR quando automaticGenerationDuringBuild è abilitato sugli emulatori. Il nuovo argomento viene utilizzato per saltare il test. (If3f51, b/355515798)
  • Riduzione del microbenchmark: mantieni le sottoclassi di org.junit.runner.notification.RunListener in ProGuard della libreria di benchmark (Ic8ed5, b/354264743)
  • Correzione di TraceSectionMetric per ignorare le sezioni non finali. In precedenza, questi eventi venivano considerati con una durata di -1, ad esempio durante la somma o la ricerca della durata minima. (If74b7)
  • È stato risolto un problema in FrameTimingGfxInfoMetric per cui l'avvio della metrica causava un arresto anomalo se il processo non era già in esecuzione. (I6e412)

Versione 1.3.0

21 agosto 2024

androidx.benchmark:benchmark-*:1.3.0 viene ritirata. La versione 1.3.0 contiene questi commit.

Modifiche al microbenchmark dalla versione 1.2.0

  • Il tracciamento dei metodi è attivo per impostazione predefinita nei microbenchmark quando vengono eseguiti sulla maggior parte dei dispositivi
    • Il tracciamento dei metodi viene eseguito come fase separata, dopo le misurazioni. In questo modo, è possibile ottenere misurazioni accurate e tracce dei metodi da una singola esecuzione del benchmark.
    • Il tracciamento dei metodi su alcune versioni del sistema operativo Android e di ART influirà sulle fasi di misurazione successive. In queste versioni, il tracciamento dei metodi è disattivato per impostazione predefinita e viene stampato un avviso nell'output di Studio
  • Benchmark del thread principale e ANR
    • È stato aggiunto measureRepeatedOnMainThread per i benchmark dei thread UI (ad es. quelli che interagiscono con le UI di Compose/View) per evitare ANR durante l'esecuzione per molti secondi.
    • Le tracce del metodo vengono ignorate se è previsto che superino la scadenza per evitare gli errori ANR. Imposta androidx.benchmark.profiling.skipWhenDurationRisksAnr su false per disattivare questo comportamento (non consigliato per le esecuzioni CI, in quanto gli errori ANR possono causare problemi nelle esecuzioni CI lunghe).
  • Minimizzazione
    • Regole Proguard incorporate per migliorare il microbenchmarking con la minimizzazione abilitata
    • La minimizzazione/R8 in un modulo della libreria richiede AGP 8.3 e può essere abilitata tramite android.buildTypes.release.androidTest.enableMinification in build.gradle
    • Aggiunta dell'API sperimentale BlackHole.consume() per impedire l'eliminazione del codice inutilizzato (If6812, b/286091643)
  • Metriche
    • Funzionalità sperimentale di conteggio degli eventi della CPU (metriche di perf_event_open, che richiede l'accesso root sulla maggior parte delle versioni della piattaforma), accesso tramite InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (può essere impostato su true) e androidx.benchmark.cpuEventCounter.events può essere impostato ad esempio su (Instructions,CpuCycles). Questa funzionalità dovrebbe essere supportata su alcuni emulatori userdebug, ma il supporto non è stato testato su tutti gli emulatori disponibili

Modifiche al MACRObenchmark dalla versione 1.2.0

  • Revisione della traccia del metodo per i macrobenchmark.
    • Ora le tracce del metodo sono limitate alla durata di measureBlock e possono acquisire più sessioni se il processo viene avviato più volte.
    • In precedenza, la tracciatura dei metodi funzionava solo per i benchmark StartupMode.COLD e non acquisiva nulla per measureBlocks che non riavviava il processo di destinazione
    • Lo svuotamento delle tracce dei metodi è stato corretto in Macrobenchmark, in modo che le tracce dei metodi vengano acquisite e siano valide, anche sui dispositivi più lenti. (I6349a, b/329904950)
  • Esegui correttamente il dump del profilo ART durante le singole iterazioni di warmUp quando il processo viene interrotto, in modo che le misurazioni di CompilationMode.Partial(warmup=N) siano più accurate. (I17923)
  • Drop Shader broadcast failure message
    • Sono stati aggiunti suggerimenti per il debug al messaggio di errore di trasmissione dello shader di eliminazione
    • Aggiungi due argomenti di strumentazione per eseguire l'override del comportamento di eliminazione degli shader per risolvere i problemi relativi agli arresti anomali durante il benchmarking delle app senza ProfileInstaller 1.3:
      • androidx.benchmark.dropShaders.enable=true/false : può essere utilizzato per saltare tutti i shader dropping (incluso quello eseguito nei lanci di StartupMode.Cold), soprattutto quando si esegue il benchmarking di app che non utilizzano ancora profileinstaller 1.3
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : può essere utilizzato per tollerare gli errori quando si tenta di eliminare gli shader, ad esempio quando si esegue il benchmarking delle app senza profileinstaller 1.3 (I4f573)
  • È stata aggiunta la variante sperimentale MacrobenchmarkRule#measureRepeated, che accetta un PerfettoConfig personalizzato per la registrazione delle tracce Perfetto completamente personalizzata. Tieni presente che le configurazioni configurate in modo errato potrebbero causare errori nelle classi di metriche integrate. (Idfd3d, b/309841164, b/304038384)
  • Annulla i job dexopt in background prima di eseguire un Macrobenchmark per ridurre le interferenze. (I989ed)
  • Macrobenchmark ora attende 1 secondo che l'applicazione di destinazione scarichi un profilo ART (in precedenza attendeva 500 ms). (I85a50, b/316082056)
  • Revisione di TraceSectionMetric
    • Nota: TraceSectionMetric le modifiche riportate di seguito possono influire sugli output nell'utilizzo di CI e potrebbero creare discontinuità o interrompere l'analisi.
    • La somma è ora il valore predefinito, in quanto la maggior parte dell'utilizzo di questa metrica riguarda eventi ripetuti e il primo scarterebbe i dati in questi casi
    • Modificata per essere più personalizzabile, con più modalità disponibili
    • I nomi delle modalità ora sono incorporati nel nome dell'output della metrica (in Studio e JSON)
    • Ora supporta le sezioni create utilizzando Trace.{begin|end}AsyncSection.
  • Metriche
    • Potenza - Aggiunti PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge() e PowerMetric.deviceSupportsPowerEnergy()
    • Metric.getResult è stato rinominato in getMeasurements in modo che corrisponda al tipo di reso
    • Sono state aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento dell'avvio. Ciò non modifica il comportamento attuale (quindi alcuni errori vengono generati, mentre altri non riescono a rilevare l'avvio), ma lo rende più comprensibile. In genere, le app che Log.w() e non riescono a segnalare le metriche di avvio sono quelle in cui mancano eventi non frame, vengono generate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sulla tempistica dei frame (da sezioni UI/RT). (Id240f, b/329145809)
    • È stata aggiunta la misurazione frameCount a FrameTimingMetric per facilitare l'individuazione di scenari in cui le misurazioni cambiano perché è cambiato il numero di frame prodotti (sono state aggiunte nuove animazioni, sono stati risolti problemi di invalidazione). (I1e5aa)
    • È stato chiarito che frameOverrunMs è la metrica preferita per il monitoraggio quando disponibile nei documenti e il motivo. (I18749, b/329478323)
    • Risolve il problema per cui i frame non terminati all'inizio e alla fine della traccia potevano essere accoppiati, il che veniva segnalato erroneamente come un singolo frame estremamente lungo. (I39353, b/322232828)
    • Migliora l'errore FrameTimingMetric quando i frame non vengono prodotti e restituisce sempre il link alla traccia quando l'analisi della metrica non va a buon fine per facilitare la diagnosi del problema. (I956b9)
    • È stato corretto l'arresto anomalo in FrameTimingMetric durante l'analisi dell'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276)
    • È stata ridotta la rigidità dei controlli in FrameMetrics e sono stati aggiunti ulteriori dettagli ai messaggi di errore. (Iadede)

Acquisizione del profilo di base / modifiche al plug-in Gradle dalla versione 1.2.0

  • Aumentata la versione massima consigliata di AGP a 9.0.0-alpha01.
  • Assicurati che le attività mergeArtProfile e mergeStartupProfile attendano sempre la generazione del profilo di base. (I623d6, b/343086054)
  • La generazione di un profilo di base riuscita restituirà un riepilogo delle modifiche apportate (I824c8, b/269484510)
  • Aggiunta di DSL per disattivare gli avvisi (Ic4deb, b/331237001)
  • Correzione per garantire che i benchmark utilizzino i profili di base generati quando automaticGenerationDuringBuild è disattivato (Ic144f, b/333024280)
  • Correggi gli override delle proprietà del plug-in Gradle BaselineProfile per attivare la generazione e il benchmarking del profilo di base quando personalizzi un tipo di build nonMinified o di benchmark. (Ib8f05, b/324837887)
  • Correzione per l'inclusione dei profili di base della libreria in AAR prima di AGP 8.3.0-alpha15. (I1d2af, b/313992099)
  • URL di output del profilo di base e di avvio fissi alla fine dell'attività di generazione. (I802e5, b/313976958)

Altre modifiche significative dalla versione 1.2.0

  • Acquisizione traccia
    • Riduzione dell'errore EXITCODE 2 durante l'avvio di perfetto da un errore a un avviso registrato
    • Attiva il tracciamento AIDL per impostazione predefinita nei benchmark(richiede l'API 28) (Ia0af2, b/341852305)
    • Attiva per impostazione predefinita il monitoraggio dei tag porter nei benchmark. In questo modo vengono acquisiti, ad esempio, i punti di traccia wakelock. (Icfe44, b/286551983)
    • Aumento del timeout di avvio dell'acquisizione delle tracce per evitare arresti anomali quando si avvia la tracciatura su dispositivi più lenti (I98841, b/329145808)
    • Sono state aggiunte le API pubbliche PerfettoTraceProcessor.Session.queryMetrics con varianti JSON, textproto e proto binario (non decodificato). Questi ti consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382)
    • Attiva l'inizio del blocco nel record di traccia Perfetto per ridurre il rischio di perdere dati all'inizio della traccia. Supportato solo su API 33+. (Ie6e41, b/310760059)
  • Output JSON
    • Sono state aggiunte ulteriori informazioni nel contesto del benchmark nell'output JSON:
      • context.artMainlineVersion: versione intera del modulo Mainline Art (se presente sul dispositivo, -1 altrimenti)
      • context.build.id - Equals android.os.Build.ID
      • context.build.version.codename - Equals android.os.Build.VERSION.CODENAME
      • context.build.version.abbreviatedCodename: corrisponde alla prima lettera del nome in codice della pre-release (incluse le build di rilascio) (ad es. Ie5020)
    • È stato aggiunto l'elenco profilerOutput all'output JSON per semplificare l'utilizzo degli strumenti per i profili di traccia (ad es. Perfetto, tracce dei metodi) (I05ddd, b/332604449)
    • È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, in quanto ciò comporta la sovrascrittura ripetuta dei file JSON di output per modulo. (Ia1af6, b/286899049)
    • Genera un errore quando i nomi dei file sono più lunghi di 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione dei file. (I4a5ab)

Versione 1.3.0-rc01

7 agosto 2024

androidx.benchmark:benchmark-*:1.3.0-rc01 viene ritirata. La versione 1.3.0-rc01 contiene questi commit.

Correzioni di bug

  • Correzione di androidx.benchmark.cpuEventCounter che produce valori danneggiati per gli eventi non di istruzione (I7386a, b/286306579)
  • Correzione di resumeTiming/runWithTimingDisabled per rispettare l'ordine di priorità delle metriche e ridurre significativamente l'impatto della sospensione/ripristino delle metriche a priorità inferiore sui risultati delle metriche a priorità più elevata. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di strumentazione cpuEventCounter.enable, timeNs non viene più ridotto in modo significativo quando si verificano pause/riprese. (I39c2e, b/286306579, b/307445225)
  • Riduzione della probabilità che il campionamento dello stack causi measureRepeatedOnMainThread di raggiungere il timeout rigido del thread principale spostando la conversione del campionamento dello stack fuori dal thread principale. (I487a8, b/342237318)
  • È stata rimossa la definizione manuale dell'accesso alle nuove API della piattaforma, poiché questa avviene automaticamente tramite la modellazione delle API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). I client che non utilizzano AGP sono invitati a eseguire l'aggiornamento alla versione 8.1 o successive di D8. Consulta questo articolo per ulteriori dettagli. (I9496c, b/345472586)
  • Aggiunta del controllo della versione di AGP per inviare il nome del pacchetto come argomento di strumentazione. Prima di AGP 8.4.0, il nome del pacchetto dell'app di destinazione non può essere inviato all'app di strumentazione tramite gli argomenti di strumentazione. (0c72a3f)

Versione 1.3.0-beta02

10 luglio 2024

androidx.benchmark:benchmark-*:1.3.0-beta02 viene ritirata. La versione 1.3.0-beta02 contiene questi commit.

Correzioni di bug

  • Gestisci correttamente EXITCODE 2 all'avvio di Perfetto per registrare un avviso, ma continua.

Versione 1.3.0-beta01

12 giugno 2024

androidx.benchmark:benchmark-*:1.3.0-beta01 viene ritirata. La versione 1.3.0-beta01 contiene questi commit.

Modifiche alle API

  • MethodTracing.affectsMeasurementOnThisDevice è stato rinominato in AFFECTS_MEASUREMENT_ON_THIS_DEVICE per coerenza. (I1bdfa)
  • È stata aggiunta l'API sperimentale BlackHole.consume() per impedire l'eliminazione del codice inutilizzato nei microbenchmark. (If6812, b/286091643)
  • Microbenchmark ora genererà correttamente un'eccezione per impedire che la traccia del metodo interferisca con le misurazioni. Ciò si verifica su alcuni dispositivi quando la traccia del metodo viene forzata (tramite argomenti di strumentazione o MicrobenchmarkConfig) e se viene tentata una misurazione dopo una traccia del metodo. I dispositivi interessati eseguono le API 26-30 o determinate versioni del modulo principale ART interessate da questa interferenza e possono essere rilevati in fase di runtime tramite ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864)

Correzioni di bug

  • È stato aumentato il valore massimo consigliato della versione di AGP a 9.0.0-alpha01. (I5bbb0)
  • Aggiunta della modalità di compilazione al contesto di benchmark (If5612, b/325512900)
  • Attiva la tracciatura AIDL per impostazione predefinita (richiede l'API 28) (Ia0af2, b/341852305)
  • Sono state aggiunte ulteriori informazioni nel contesto del benchmark nell'output JSON:
    • context.artMainlineVersion - versione intera del modulo principale Art (se presente sul dispositivo, -1 altrimenti)
    • context.build.id - Equals android.os.Build.ID
    • context.build.version.codename - Equals android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename: corrisponde alla prima lettera del nome in codice della pre-release (anche nelle build di rilascio) (Ie5020)
  • Correzioni StackSampling per rispettare androidx.benchmark.profiling.sampleDurationSeconds (Ib1d53)
  • Modifica la dipendenza macro->comune in modo che sia api(), così è più facile utilizzare, ad esempio, PerfettoTrace e PerfettoConfig. (Icdae3, b/341851833)
  • Assicurati che le attività mergeArtProfile e mergeStartupProfile attendano sempre la generazione del profilo di base. (I623d6, b/343086054)
  • Tieni conto dello stato di attivazione della variante quando decidi se deve essere attivata. (I5d19e, b/343249144)
  • Aumento del timeout di avvio predefinito per il processore di tracce Perfetto. (I87e8c, b/329145808)

Versione 1.3.0-alpha05

14 maggio 2024

androidx.benchmark:benchmark-*:1.3.0-alpha05 viene ritirata. La versione 1.3.0-alpha05 contiene questi commit.

Correzioni di bug

  • Genera un'eccezione più chiara quando la metrica macrobench restituisce valori pari a zero per tutte le iterazioni (Iab58f, b/314931695)
  • Sono state aggiunte regole di soluzione alternativa aggiuntive alle regole ProGuard di microbenchmark, incluso il supporto per le regole del listener e altri avvisi / errori osservati. (I14d8f, b/329126308, b/339085669)
  • Il tracciamento dei metodi viene eseguito come fase separata durante un Macrobenchmark e non influisce più sulle misurazioni. (If9a50, b/285912360, b/336588271)
  • Sono stati aggiunti suggerimenti di debug aggiuntivi al messaggio di errore di trasmissione dello shader. (I5efa6, b/325502725)

Versione 1.3.0-alpha04

1° maggio 2024

androidx.benchmark:benchmark-*:1.3.0-alpha04 viene ritirata. La versione 1.3.0-alpha04 contiene questi commit.

Modifiche alle API

  • È stata aggiunta la variante sperimentale MacrobenchmarkRule#measureRepeated, che accetta un PerfettoConfig personalizzato per la registrazione delle tracce Perfetto completamente personalizzata. Tieni presente che le configurazioni configurate in modo errato potrebbero causare errori nelle classi di metriche integrate. (Idfd3d, b/309841164, b/304038384)
  • Rinomina PowerMetric.deviceSupportsPowerEnergy in PowerMetric.deviceSupportsHighPrecisionTracking per chiarezza (I5b82f)
  • Sono stati aggiunti PowerMetric.deviceBatteryHasMinimumCharge() e PowerMetric.deviceSupportsPowerEnergy() per consentire la modifica o l'omissione dei benchmark in base alla funzionalità di misurazione del consumo energetico del dispositivo. (I6a591, b/322121218)

Correzioni di bug

  • È stato aggiunto il confronto con il profilo di riferimento precedente (I824c8, b/269484510)
  • Aggiunta di DSL per disattivare gli avvisi (Ic4deb, b/331237001)
  • Modificata l'eccezione nel log informazioni quando le varianti benchmark sono disattivate (I8a517, b/332772491)
  • Semplifica l'acquisizione delle tracce del metodo per una macrobenchmark limitata alla durata dell'effettivo measureBlock(). In precedenza, iniziava all'avvio del processo di destinazione e supportava solo gli avvii a freddo (Iee85a, b/300651094)
  • Evita arresti anomali quando il processore di traccia Perfetto è lento all'avvio (I98841, b/329145808)

Versione 1.3.0-alpha03

17 aprile 2024

androidx.benchmark:benchmark-*:1.3.0-alpha03 viene ritirata. La versione 1.3.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Aggiunge API pubbliche PerfettoTraceProcessor.Session.queryMetrics con varianti JSON, textproto e proto binario (non decodificato). Questi ti consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382)
  • È stato aggiunto profilerOutput all'output JSON per semplificare l'utilizzo degli strumenti per le tracce di profilazione (ad es. perfetto, tracce dei metodi). (I05ddd, b/332604449)
  • È stato aggiunto il tag di alimentazione al benchmark Perfetto Config. In questo modo vengono acquisiti, ad esempio, i punti di traccia wakelock. (Icfe44, b/286551983)
  • È stato aggiunto l'argomento inst androidx.benchmark.profiling.skipWhenDurationRisksAnr, che può essere impostato su false per evitare di saltare le tracce del metodo quando la durata prevista potrebbe causare un errore ANR. È vivamente consigliato di evitarlo nelle esecuzioni CI.
  • È stato aggiunto l'argomento sperimentale inst androidx.benchmark.profiling.perfCompare.enable, impostalo su true per eseguire il confronto dei tempi tra le fasi di misurazione e profilazione. Utile, ad esempio, per valutare l'overhead del tracciamento dei metodi. (I61fb4, b/329146942)

Modifiche alle API

  • Modificata la classe TraceSectionMetric.Mode in classe sigillata per consentire l'espansione futura senza interrompere le istruzioni when esaustive (I71f7b)
  • Sono stati aggiunti TraceSectionMetric.Mode.Average e .Count e gli argomenti sono stati riordinati in modo che l'argomento più comune (modalità) si trovi all'inizio dell'elenco, riducendo la necessità di specificare i nomi dei parametri. (Ibf0b0, b/315830077, b/322167531)
  • Metric.getResult è stato rinominato in getMeasurements in modo che corrisponda al tipo di reso (I42595)

Correzioni di bug

  • Correzione per garantire che i benchmark utilizzino i profili di base generati quando automaticGenerationDuringBuild è disattivato (Ic144f, b/333024280)
  • Correggi gli override delle proprietà del plug-in Gradle BaselineProfile per attivare la generazione e il benchmarking del profilo di base quando personalizzi un tipo di build nonMinified o di benchmark. (Ib8f05, b/324837887)
  • Lo svuotamento delle tracce dei metodi è stato corretto in Macrobenchmark, in modo che le tracce dei metodi vengano acquisite e siano valide, anche sui dispositivi più lenti. (I6349a, b/329904950)
  • Attiva l'inizio del blocco nel record di traccia Perfetto per ridurre il rischio di perdere dati all'inizio della traccia. Supportato solo su API 33+. (Ie6e41, b/310760059)
  • È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, in quanto ciò comporta la sovrascrittura ripetuta dei file JSON di output per modulo. (Ia1af6, b/286899049)
  • Forza i separatori delle migliaia "," (virgola) per garantire la coerenza nell'output di Studio, ignorando le impostazioni internazionali del dispositivo (I3e921, b/313496656)
  • TraceSectionMetric ora supporta le sezioni create utilizzando Trace.{begin|end}AsyncSection. (I91b32, b/300434906)
  • Sono state aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento dell'avvio. Ciò non modifica il comportamento attuale (quindi alcuni errori vengono generati, mentre altri non riescono a rilevare l'avvio), ma lo rende più comprensibile. In genere, le app che Log.w() e non riescono a segnalare le metriche di avvio sono quelle in cui mancano eventi non frame, vengono generate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sulla tempistica dei frame (da sezioni UI/RT). (Id240f, b/329145809)
  • Annulla i job dexopt in background prima di eseguire un Macrobenchmark per ridurre le interferenze. (I989ed)
  • È stata aggiunta la misurazione frameCount a FrameTimingMetric per facilitare l'individuazione di scenari in cui le misurazioni cambiano perché è cambiato il numero di frame prodotti (sono state aggiunte nuove animazioni, sono stati risolti problemi di invalidazione). (I1e5aa)
  • È stato chiarito che frameOverrunMs è la metrica preferita per il monitoraggio quando disponibile nei documenti e il motivo. (I18749, b/329478323)

Versione 1.3.0-alpha02

20 marzo 2024

androidx.benchmark:benchmark-*:1.3.0-alpha02 viene ritirata. La versione 1.3.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Supporto sperimentale di R8 in microbenchmark tramite regole Proguard incorporate. Tieni presente che questo supporto è sperimentale e richiede AGP 8.3 per la minificazione dei test dei moduli della libreria. Utilizza quanto segue per attivare la riduzione/ottimizzazione R8 nel file build.gradle del modulo di benchmark, il che dovrebbe portare a un aumento significativo delle prestazioni, a seconda del carico di lavoro. (I738a3, b/184378053)

    android {
        buildTypes.release.androidTest.enableMinification = true
    }
    

Correzioni di bug

  • Corregge l'avviso di tracciamento del metodo in modo che si trovi su una riga separata dall'output di microbenchmark. (I0455c, b/328308833)

Versione 1.3.0-alpha01

21 febbraio 2024

androidx.benchmark:benchmark-*:1.3.0-alpha01 viene ritirata. La versione 1.3.0-alpha01 contiene questi commit.

Modifiche alle API

  • Ridenominati i parametri booleani MicrobenchmarkConfig per evitare la parola non necessaria "should" (Ia8f00, b/303387299)
  • È stato aggiunto BenchmarkRule.measureRepeatedOnMainThread in modo che i benchmark del thread principale (ad es. quelli che riguardano le UI di Views o Compose) possano evitare di attivare ANR, soprattutto durante le suite di grandi dimensioni in CI. (I5c86d)
  • È stato aggiunto FrameTimingGfxInfoMetric, un'implementazione alternativa sperimentale di FrameTimingMetric con misurazioni provenienti direttamente dalla piattaforma, anziché estratte dalla traccia Perfetto. (I457cb, b/322232828)
  • Aggiungere la possibilità di scaricare un profilo ART durante le singole iterazioni di warmUp. (I17923)
  • Diverse modifiche all'API TraceSectionMetric:
    • Aggiungi Mode.Min, Mode.Max
    • Aggiungi l'argomento dell'etichetta per ignorare il nome della sezione come etichetta della metrica
    • Aggiunto il nome della modalità all'output per chiarire il significato della metrica
    • È stato modificato il valore predefinito in somma, poiché la maggior parte dell'utilizzo di questa metrica riguarda eventi ripetuti. Tieni presente queste modifiche nell'utilizzo dell'integrazione continua, in quanto potrebbero creare discontinuità o interrompere l'analisi. (Ic1e82, b/301892382, b/301955938)

Correzioni di bug

  • Miglioramento del messaggio di errore nel plug-in Gradle del profilo di base quando il dispositivo gestito specificato non esiste (Idea2b, b/313803289)
  • Correzione per l'inclusione dei profili di base della libreria nell'AAR prima di AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • URL di output del profilo di base e di avvio fisso alla fine dell'attività di generazione (I802e5, b/313976958)
  • Timeout dell'origine dati modificati per tentare di risolvere il problema java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Aggiungi due argomenti di strumentazione per eseguire l'override del comportamento di eliminazione degli shader per risolvere i problemi relativi agli arresti anomali durante il benchmarking delle app senza ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : può essere utilizzato per saltare tutti i shader dropping (incluso quello eseguito nei lanci di StartupMode.Cold), soprattutto quando si esegue il benchmarking di app che non utilizzano ancora profileinstaller 1.3
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : può essere utilizzato per tollerare gli errori quando si tenta di eliminare gli shader, ad esempio quando si esegue il benchmarking delle app senza profileinstaller 1.3 (I4f573)
  • Salta la tracciatura dei metodi sul thread UI quando è previsto che richieda più di qualche secondo ed esegui la pulizia delle tracce dei metodi durante la generazione di eccezioni. (I6e768)
  • Genera un errore quando i nomi dei file sono più lunghi di 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione dei file. (I4a5ab)
  • Risolve il problema per cui i frame non terminati all'inizio e alla fine della traccia potevano essere accoppiati, il che veniva segnalato erroneamente come un singolo frame estremamente lungo. (I39353, b/322232828)
  • Utilizza --skip verification su API 30+ quando reinstalli un pacchetto su API 30-33 per cancellare i profili ART nelle build utente. In questo modo, vengono ignorati gli avvisi di Play Protect che causano errori su alcuni tipi di dispositivi. (Ic9e36)
  • Utilizza am force-stop per chiudere le app quando non sono app di sistema come Interfaccia utente di sistema o Avvio app. (I5e028)
  • Ora Macrobenchmark attende 1 second che l'applicazione di destinazione svuoti un profilo ART (in precedenza attendeva 500 ms). (I85a50, b/316082056)
  • Migliora l'errore FrameTimingMetric quando i frame non vengono prodotti e restituisce sempre il link alla traccia quando l'analisi della metrica non va a buon fine per facilitare la diagnosi del problema. (I956b9)
  • È stato corretto l'arresto anomalo in FrameTimingMetric durante l'analisi dell'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276)
  • È stata ridotta la rigidità dei controlli in FrameMetrics e sono stati aggiunti ulteriori dettagli ai messaggi di errore. (Iadede)

Versione 1.2

Versione 1.2.4

17 aprile 2024

androidx.benchmark:benchmark-*:1.2.4 viene ritirata. La versione 1.2.4 contiene questi commit.

Correzioni di bug

  • Corregge il problema per cui il profilo di base srcset non viene configurato nelle varianti di benchmark. Corregge anche automaticGenerationDuringBuild nelle librerie che causano una dipendenza ciclica. (I28ab7, b/333024280)
  • Utilizza am force-stop per chiudere le app quando non sono app di sistema come Interfaccia utente di sistema o Avvio app. Questo problema è stato risolto: i benchmark StartupMode.COLD si arrestavano in modo anomalo a causa del messaggio "Package $package must not be running prior to cold start!" (Il pacchetto $package non deve essere in esecuzione prima dell'avvio a freddo) perché l'interruzione del processo non andava a buon fine. (I5e028)

Versione 1.2.3

24 gennaio 2024

androidx.benchmark:benchmark-*:1.2.3 viene ritirata. La versione 1.2.3 contiene questi commit.

Correzioni di bug

  • È stata rimossa l'eccezione dal plug-in Gradle del profilo di base quando la versione di AGP è 8.3.0 o successive.
  • Correzione per l'inclusione dei profili di base della libreria in AAR prima di AGP 8.3.0-alpha15.

Versione 1.2.2

1° dicembre 2023

androidx.benchmark:benchmark-*:1.2.2 viene ritirata. La versione 1.2.2 contiene questi commit.

Profili di base

Versione 1.2.1

15 novembre 2023

androidx.benchmark:benchmark-*:1.2.1 viene ritirata. La versione 1.2.1 contiene questi commit.

Nuove funzionalità

  • Messaggio di errore migliorato quando l'utente disattiva le varianti di test (b/307478189)
  • Sono state aggiunte proprietà per supportare l'integrazione dell'esecuzione del test AS (b/309805233), (b/309116324)

Versione 1.2.0

18 ottobre 2023

androidx.benchmark:benchmark-*:1.2.0 viene ritirata. La versione 1.2.0 contiene questi commit.

Modifiche importanti dalla versione 1.1.0

Profili di base

  • Il nuovo plug-in Gradle per i profili di base automatizza l'acquisizione e l'inclusione dei profili di base nel flusso di lavoro di test e build.
  • BaselineProfileRule.collect ora stabile, una versione semplificata e ottimizzata della precedente API BaselineProfileRule.collectBaselineProfile sperimentale
    • Basta specificare packageName e guidare la tua app
  • Per le librerie che generano profili di base, ora puoi filtrare le regole generate nel codice (argomento BaselineProfileRule.collect) o in modo ancora più semplice nel plug-in Gradle
  • Correzioni

Macrobenchmark

  • Compilation
    • Macrobenchmark ora reimposta correttamente lo stato di compilazione per ogni compilazione. Ciò richiede la reinstallazione dell'APK prima di Android 14, pertanto è consigliabile eseguire il benchmarking su Android 14 e versioni successive se vuoi mantenere lo stato (ad esempio l'accesso dell'utente) in ciò che viene misurato.
    • Puoi anche aggirare questo problema controllando la compilazione dell'app separatamente e saltando la compilazione con CompilationMode.Ignore() o l'argomento di strumentazione.
  • Argomenti di strumentazione

    • Supporto dell'argomento di strumentazione androidx.benchmark.dryRunMode.enable (già disponibile nel microbenchmark) per esecuzioni di convalida più rapide (ad es. durante la creazione del benchmark o in presubmit)
    • Supporto per androidx.benchmark.profiling.mode=StackSampling e MethodTracing.
    • Aggiunta di androidx.benchmark.enabledRules per consentire i test di regole di macrobenchmark rispetto al profilo di base del filtro runtime
    • È stato aggiunto l'argomento androidx.benchmark.perfettoSdkTracing.enable per attivare la tracciatura con tracing-perfetto, ad esempio la tracciatura della ricomposizione di Compose. Tieni presente che, se utilizzato con StartupMode.COLD, la sincronizzazione sarà notevolmente influenzata, poiché la libreria di tracciamento viene caricata e abilitata durante l'avvio dell'app.
  • Requisiti

    • Macrobenchmark ora richiede ProfileInstaller 1.3.0 o versioni successive nell'app di destinazione per attivare l'acquisizione / il ripristino del profilo e la cancellazione della cache degli shader.
  • Nuove API delle metriche sperimentali

    • È stato aggiunto TraceSectionMetric sperimentale, che consente di estrarre la tempistica semplice dai blocchi trace("") {} nella tua app o TraceMetric per sfruttare la funzionalità di query completa di Perfetto TraceProcessor.
    • Aggiunta della funzionalità sperimentale PowerMetric per acquisire informazioni sul consumo energetico
    • Aggiunta la metrica sperimentale MemoryCountersMetric per conteggiare gli errori di pagina
    • È stata aggiunta l'API sperimentale PerfettoTraceProcessor, utilizzata internamente per estrarre le metriche dalle tracce di sistema (ovvero le tracce Perfetto)
  • Correzioni

    • Sono stati corretti i crash durante l'installazione o l'estrazione dei profili da un'app installata da più APK (ad es. da un app bundle).
    • Correzione di FrameTimingMetric che ignora i frame con ID frame incoerenti (in genere, i frame durante le increspature su API 31+) (I747d2, b/279088460)
    • Sono stati corretti gli errori di analisi sulle tracce di dimensioni superiori a 64 MB (Ief831, b/269949822).
    • Sono stati chiariti gli errori quando l'immagine del sistema operativo del dispositivo (in particolare dell'emulatore) non è configurata correttamente per la tracciabilità o la compilazione
    • Ignorare il controllo del livello batteria per i dispositivi senza batteria (micro e macro)
    • Output dei file migliorato, con errori più chiari per le directory di output non valide e impostazioni predefinite più sicure
    • Maggiore stabilità di StartupMode.COLD eliminando in modo coerente la cache degli shader (esposta anche tramite MacrobenchmarkScope.dropShaderCache)
    • Correzione del fallback leanback per startActivityAndWait.

Microbenchmark

  • Funzionalità
    • La profilazione è stata spostata in una fase separata, dopo le altre metriche, in modo che un'esecuzione del test possa mostrare sia risultati di temporizzazione accurati sia di profilazione.
  • API sperimentali
    • È stata aggiunta l'API sperimentale MicrobenchmarkConfig per definire metriche personalizzate e configurare la tracciabilità e la profilazione. Può essere utilizzato per acquisire tracce di metodi o punti di traccia (ma tieni presente il sovraccarico di tracciamento).
    • Sono state aggiunte API sperimentali per controllare BenchmarkState separatamente da BenchmarkRule, senza JUnit
    • È stato aggiunto il record sperimentale PerfettoTrace per consentire l'acquisizione di tracce Perfetto, con configurazione personalizzata, separata dalle API di benchmark.
  • Correzioni
    • Soluzione alternativa per gli spazi bianchi iniziali mancanti nell'output del benchmark di Android Studio.
    • È stato risolto il problema a causa del quale gli avvisi non venivano stampati nell'output del benchmark di Android Studio.
    • È stato corretto l'arresto anomalo di SampledProfiling su Android 13 (API 33) e versioni successive.
    • Prestazioni notevolmente migliorate di dryRunMode saltando IsolationActivity e la traccia Perfetto (modalità di prova fino a 10 volte più veloce sulle versioni precedenti del sistema operativo).

Versione 1.2.0-rc02

6 ottobre 2023

androidx.benchmark:benchmark-*:1.2.0-rc02 viene ritirata. La versione 1.2.0-rc02 contiene questi commit.

Correzioni di bug

  • Correzione dell'output del file di benchmark per non interrompere più la BaselineProfilecopia dei file dei plug-in. I file sono stati generati e copiati dal dispositivo, ma sono stati rinominati in modo che il plug-in Gradle non li veda. (I8dbcc, b/303034735, b/296453339)
  • Sono stati chiariti i messaggi di errore di caricamento di tracing-perfetto durante l'inserimento dal modulo macrobenchmark nell'applicazione di destinazione.

Versione 1.2.0-rc01

20 settembre 2023

androidx.benchmark:benchmark-*:1.2.0-rc01 viene ritirata. La versione 1.2.0-rc01 contiene questi commit.

Correzioni di bug

  • Ora viene generata un'eccezione (con istruzioni di correzione) quando l'inizializzazione della traccia dell'SDK Perfetto non va a buon fine in un benchmark. (I6c878, b/286228781)
  • Correzione dell'arresto anomalo per esaurimento della memoria durante la conversione della traccia del metodo ART nel formato perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) È stata chiarita l'etichetta di tracciamento del metodo quando è collegata nell'output del test di Studio e sono stati corretti i nomi dei file di tracciamento del metodo in modo che siano univoci sul dispositivo/host, in modo che non vengano sovrascritti quando viene eseguito più di un benchmark. (I08e65, b/285912360)
  • Assicura che il dispositivo sia attivo durante l'acquisizione di un profilo di base. (I503fc)

Versione 1.2.0-beta05

30 agosto 2023

androidx.benchmark:benchmark-*:1.2.0-beta05 viene ritirata. La versione 1.2.0-beta05 contiene questi commit.

Nuove funzionalità

  • Il plug-in Gradle per i profili di base ora supporta il plug-in Android Gradle 8.3. (aosp/2715214)

Versione 1.2.0-beta04

23 agosto 2023

androidx.benchmark:benchmark-*:1.2.0-beta04 viene ritirata. La versione 1.2.0-beta04 contiene questi commit.

Nuove funzionalità

  • Il plug-in Gradle Baseline Profiles ora supporta il plug-in Android per Gradle 8.3. (aosp/2715214)

Correzioni di bug

  • Correggi gli errori di scrittura / spostamento e recupero dei file (in particolare quelli dei test con parametri) sanificando ulteriormente i nomi dei file di output, evitando i caratteri "=" e ":". (I759d8)

Versione 1.2.0-beta03

9 agosto 2023

androidx.benchmark:benchmark-*:1.2.0-beta03 viene ritirata. La versione 1.2.0-beta03 contiene questi commit.

Modifiche alle API

  • È stato aggiunto l'argomento per filtrare TraceSectionMetric solo in base al pacchetto di destinazione, attivato per impostazione predefinita (Ia219b, b/292208786)

Correzioni di bug

  • Ridenominato l'argomento di strumentazione fullTracing.enable in perfettoSdkTracing.enable per coerenza con il nome dell'artefatto e altri riferimenti. fullTracing.enable continuerà a funzionare come fallback. (I7cc00)
  • I punti di traccia interni della libreria di benchmark (inclusa la traccia del ciclo/della fase di microbenchmark) ora verranno visualizzati nel visualizzatore di tracce di sistema di Studio e verranno nidificati nel processo corretto in Perfetto. (I6b2e7, b/293510459)
  • È stato rimosso l'errore NOT-PROFILEABLE di macrobenchmark su API 31+ e viene ignorato il controllo di profilazione sui dispositivi eng/userdebug con accesso root. (I2abac, b/291722507)
  • Quando si utilizzano le ottimizzazioni del layout Dex, le regole del profilo di avvio vengono ora considerate anche come regole del profilo di base. (aosp/2684246, b/293889189)

Versione 1.2.0-beta02

26 luglio 2023

androidx.benchmark:benchmark-*:1.2.0-beta02 viene ritirata. La versione 1.2.0-beta02 contiene questi commit.

Modifiche alle API

  • Sono state aggiunte API sperimentali per le metriche e la configurazione personalizzate di microbenchmark (ad es. Profiler e tracing). (I86101, b/291820856)

Correzioni di bug

  • Segnala l'errore in macrobenchmark quando il sistema operativo è configurato in modo errato per la traccia, come è stato recentemente corretto negli emulatori ARM64 API 26/28. (I0a328, b/282191686)
  • È stato aggiunto un dettaglio all'errore di ripristino della compilazione per suggerire l'aggiornamento dell'emulatore, poiché alcuni emulatori hanno recentemente risolto il problema. (I8c815, b/282191686)
  • Rendi androidx.test.uiautomator:uiautomator:2.2.0 una dipendenza api anziché implementation. (I1981e)

Versione 1.2.0-beta01

18 luglio 2023

androidx.benchmark:benchmark-*:1.2.0-beta01 viene ritirata. La versione 1.2.0-beta01 contiene questi commit.

Correzioni di bug

  • Correzione degli avvisi a volte eliminati nell'output del benchmark in Studio e soluzione alternativa per gli spazi bianchi iniziali dell'output del benchmark che non vengono visualizzati in Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
  • Commento corretto per FrameTimingMetric. La sottometrica si chiama frameDurationCpuMs. (Ib097f, b/288830934).

Versione 1.2.0-alpha16

21 giu 2023

androidx.benchmark:benchmark-*:1.2.0-alpha16 viene ritirata. La versione 1.2.0-alpha16 contiene questi commit.

Modifiche alle API

  • L'API BaselineProfileRule.collectBaselineProfile() è stata rinominata BaselineProfileRule.collect(). (I4b665)

Correzioni di bug

  • Supporto di Macrobenchmark per androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • La profilazione dei microbenchmark è stata spostata in una fase separata, quindi si verifica in sequenza dopo la misurazione, anziché sostituirla. Se presenti, ora sono incluse anche le sezioni di traccia MethodTracing nella traccia Perfetto acquisita. (I9f657, b/285014599)
  • Aggiungi la misurazione del conteggio a TraceSectionMetric con Mode.Sum. (Ic121a, b/264398606)

Versione 1.2.0-alpha15

7 giugno 2023

androidx.benchmark:benchmark-*:1.2.0-alpha15 viene ritirata. La versione 1.2.0-alpha15 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto MemoryUsageMetric sperimentale per il monitoraggio dell'utilizzo della memoria di un'applicazione di destinazione. (I56453, b/133147125, b/281749311)
  • Aggiungi il supporto per le configurazioni Perfetto completamente personalizzate con PerfettoTrace.record (If9d75, b/280460183)
  • È stata aggiunta la proprietà per ignorare la generazione del profilo di base. Utilizzo: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)

Modifiche alle API

  • L'API collectBaselineProfile genera sempre profili di base stabili. L'API collectStableBaselineProfile è stata rimossa e al suo posto deve essere utilizzata collectBaselineProfile. (I17262, b/281078707)
  • Modificato l'argomento filterPredicate di BaselineProfileRule in non null, con un valore predefinito equivalente in modo che il comportamento predefinito del filtro sia più chiaro nella documentazione. (I3816e)

Correzioni di bug

  • Disattiva IsolationActivity e la tracciatura Perfetto in dryRunMode per migliorare significativamente le prestazioni, poiché queste rappresentavano la maggior parte del runtime. (Ie4f7d)
  • Supporto del campionamento dello stack di chiamate in Macrobenchmark utilizzando gli argomenti di test di strumentazione androidx.benchmark.profiling.mode=StackSampling e androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Corregge l'arresto anomalo quando si rilasciano shader su Android U (API 34), nonché sugli emulatori. (I031ca, b/274314544)

Versione 1.2.0-alpha14

3 maggio 2023

androidx.benchmark:benchmark-*:1.2.0-alpha14 viene ritirata. La versione 1.2.0-alpha14 contiene questi commit.

Correzioni di bug

  • Correzione di FrameTimingMetric che ignora i frame con ID frame incoerenti. Ciò farebbe sì che alcune animazioni sulle versioni recenti della piattaforma (API 31+) ignorino molti frame durante l'animazione di RenderThread (ad es. durante un'increspatura). (I747d2, b/279088460)
  • È stato corretto l'analisi del processore di traccia per le tracce di dimensioni superiori a 64 MB. (Ief831, b/269949822)
  • È stata corretta la generazione del profilo di base su Android U non riuscita a causa dell'output diverso del comando pm dump-profiles. (Id1392, b/277645214)
  • Correzione dello script di blocco della frequenza di clock della GPU per confrontare correttamente le stringhe (I53e54, b/213935715)

Versione 1.2.0-alpha13

5 aprile 2023

androidx.benchmark:benchmark-*:1.2.0-alpha13 viene ritirata. La versione 1.2.0-alpha13 contiene questi commit.

Modifiche alle API

  • È stato aggiunto il parametro del tipo di profilo durante la generazione dei profili di base per supportare la funzionalità dei profili di avvio in arrivo (Ie20d7, b/275093123)
  • È stata aggiunta una nuova API TraceMetric sperimentale per definire metriche completamente personalizzate in base ai contenuti di una traccia Perfetto. (I4ce31, b/219851406)
  • Aggiungi una metrica sperimentale per determinare il numero di errori di pagina durante un benchmark. (I48db0)

Versione 1.2.0-alpha12

22 marzo 2023

androidx.benchmark:benchmark-*:1.2.0-alpha12 viene ritirata. La versione 1.2.0-alpha12 contiene questi commit.

Nuove funzionalità

  • Il nuovo plug-in Gradle per i profili di base è stato rilasciato in versione alpha, semplificando la generazione di un profilo di base e il flusso di lavoro degli sviluppatori.

Modifiche alle API

  • Rimossa l'assistenza per la tracciatura Perfetto sulle API 21 e 22, che include sia Microbenchmark sia le API PerfettoTrace sperimentali. Prima di questa versione, le connessioni UiAutomation non erano affidabili su alcuni dispositivi. (I78e8c)
  • È stata aggiunta un'API sperimentale pubblica per PerfettoTraceProcessor per consentire l'analisi dei contenuti di traccia. Si tratta di un passo avanti verso metriche completamente personalizzate basate sui dati di traccia Perfetto. (I2659e, b/219851406)

Versione 1.2.0-alpha11

8 marzo 2023

androidx.benchmark:benchmark-*:1.2.0-alpha11 viene ritirata. La versione 1.2.0-alpha11 contiene questi commit.

Correzioni di bug

  • Sono stati corretti gli arresti anomali in MacrobenchmarkRule e BaselineProfileRule durante la reinstallazione o l'estrazione dei profili da un app bundle con più APK. (I0d8c8, b/270587281)

Versione 1.2.0-alpha10

22 febbraio 2023

androidx.benchmark:benchmark-*:1.2.0-alpha10 viene ritirata. La versione 1.2.0-alpha10 contiene questi commit.

Nuove funzionalità

  • Su Android 14 e versioni successive, Macrobenchmark non reinstalla più le applicazioni di destinazione per reimpostare lo stato di compilazione, grazie a una nuova funzionalità della piattaforma. In precedenza era necessario avere un dispositivo sottoposto a rooting o gestire la rimozione di tutto lo stato dell'applicazione (ad es. l'accesso dell'utente) prima dell'esecuzione di ogni benchmark. (I9b08c, b/249143766)

Correzioni di bug

  • Correzione di DryRunMode per evitare arresti anomali con profili vuoti, a causa dell'omissione della compilazione. Esegue invece una singola iterazione ed estrae il profilo per assicurarsi che venga acquisito qualcosa. (I2f05d, b/266403227)
  • Correzione dell'arresto anomalo di PowerMetric durante il controllo della presenza di powerstats nei livelli API precedenti. (5faaf9, b/268253898)

Versione 1.2.0-alpha09

11 gennaio 2023

androidx.benchmark:benchmark-*:1.2.0-alpha09 viene ritirata. La versione 1.2.0-alpha09 contiene questi commit.

Correzioni di bug

  • È stato attivato il passaggio di None all'argomento di strumentazione androidx.benchmark.enabledRules per disattivare tutti i benchmark / la generazione del profilo di base. (I3d7fd, b/258671856)
  • Correzione dell'acquisizione di PerfettoTrace nei moduli dell'app (ovvero APK di test non autostrumentati) (I12cfc)
  • Ordine degli argomenti di pull adb del profilo di base fisso nell'output di Studio (I958d1, b/261781624)
  • L'API 33 dell'emulatore Arm viene ora riconosciuta correttamente come tale quando si tenta di eseguire un macrobenchmark e stampa correttamente l'avviso. (69133b,b/262209591)
  • Salta il controllo del livello della batteria sui dispositivi senza batteria in Macrobenchmark (fe4114, b/232448937)

Versione 1.2.0-alpha08

7 dicembre 2022

androidx.benchmark:benchmark-*:1.2.0-alpha08 viene ritirata. La versione 1.2.0-alpha08 contiene questi commit.

Modifiche alle API

  • Sono state aggiunte nuove API sperimentali PerfettoTrace.record {} e PerfettoTraceRule per acquisire le tracce Perfetto (note anche come tracce di sistema) nell'ambito di un test, per esaminare il comportamento e le prestazioni del test. (I3ba16)
  • BaselineProfileRule ora accetta un predicato di filtro anziché un elenco di prefissi dei pacchetti. In questo modo, il test ha il pieno controllo del filtro. (I93240)
  • Aggiungi un'API sperimentale BaselineProfileRule.collectStableBaselineProfile che attende che un profilo di base sia stabile per N iterazioni. (I923f3)
  • Aggiungi la possibilità di specificare un prefisso del nome del file di output durante la generazione dei profili di base utilizzando BaselineProfileRule. (I7b59f, b/260318655)

Correzioni di bug

  • Migliora la sicurezza della scrittura dell'output dei file, il che dovrebbe impedire che i file di output non vengano scritti / aggiunti in modo silenzioso, soprattutto sulle API 21/22. (If8c44, b/227510293)
  • Correggi l'output della traccia simpleperf per creare e posizionare correttamente il file. In generale, questo dovrebbe risolvere anche i problemi relativi al recupero senza esito di un file da parte di Gradle. (I12a1c, b/259424099)
  • Migliora il messaggio di errore di profileinstaller stampato quando profileinstaller è troppo vecchio. Ora ti viene chiesto di aggiornare la versione di ProfileInstaller (1.2.1) per misurare i profili di base sulle API da 31 a 33, anziché indicare che non è supportato. (Ia517f, b/253519888)
  • Correzione di diversi errori di comando della shell nel messaggio di errore Stampa API necessaria <=23, inclusi errori di configurazione del binario di acquisizione perfetto e di acquisizione delle tracce (Ib6b87, b/258863685)
  • Ordina automaticamente le regole del profilo generate per ridurre al minimo il numero di modifiche nel tempo (quando esegui il check-in delle regole del profilo nel controllo del codice sorgente). (Ie2509)
  • È stato risolto il problema di arresto anomalo nelle build non sottoposte a rooting precedenti ad Android 13 (API 33) con il messaggio Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183)

Problemi noti - MacrobenchmarkScope.dropShaderCache() potrebbe arrestarsi in modo anomalo a causa di un registro di trasmissione mancante nel manifest di profileinstaller, che non è ancora stato rilasciato. (I5c728, b/258619948) Per risolvere il problema in profileinstaller:1.3.0-alpha02, aggiungi quanto segue al file AndroidManifest.xml della tua applicazione (non del benchmark):

  <!-- 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>

Versione 1.2.0-alpha07

9 novembre 2022

androidx.benchmark:benchmark-*:1.2.0-alpha07 viene ritirata. La versione 1.2.0-alpha07 contiene questi commit.

Modifiche alle API

  • Aggiunge l'API PowerMetric per misurare l'energia e la potenza in Macrobenchmark. (Ife601, b/220183779)
  • È stato corretto il problema MacrobenchmarkScope.dropShaderCache() per eliminare effettivamente la cache dello shader. In questo modo, viene rimosso un rumore di circa 20 ms dai benchmark StartupMode.COLD, poiché gli shader vengono ora cancellati in modo coerente a ogni iterazione. In precedenza, la compilazione Partial che utilizzava le iterazioni di riscaldamento riportava numeri erroneamente veloci, poiché la memorizzazione nella cache degli shader era più probabile durante il riscaldamento. Questa correzione richiede un dispositivo con accesso root o l'utilizzo di profileinstaller:1.3.0-alpha02 nell'app di destinazione. Per le modifiche all'API della libreria ProfileInstaller, consulta la pagina ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • È stato aggiunto TraceSectionMode("label", Mode.Sum), che consente di misurare il tempo totale trascorso in più sezioni della traccia con la stessa etichetta. Ad esempio, TraceSectionMetric("inflate", Mode.Sum) registrerà una metrica inflateMs per il tempo totale trascorso in un macrobenchmark sull'inflazione. È stato rimosso anche il requisito dell'API 29, poiché TraceSectionMetric funziona insieme a androidx.tracing.Trace con livelli API precedenti, con l'utilizzo di forceEnableAppTracing all'interno dell'app di destinazione. (Id7b68, b/231455742)

Correzioni di bug

  • Miglioramento della sicurezza di tutti i comandi della shell interna con la convalida di tutti gli output/errori. (I5984d, b/255402908, b/253094958)
  • Specifica il dispositivo nel comando adb pull del profilo di base, in modo che il comando pull possa essere semplicemente copiato se sono connessi più dispositivi (fino a un emulatore) (I6ac6c, b/223359380)
  • Aggiungi un errore se l'APK di test macrobenchmark non è configurato come auto-strumentazione. Questo errore impedisce il macrobenchmarking all'interno del processo dell'app di destinazione. Durante l'elaborazione, macrobenchmark non sarebbe in grado di compilare/terminare/avviare a freddo l'app o controllare le proprie autorizzazioni (I4279b).
  • È stato risolto un problema in measureRepeated() per cui StartupMode.COLD non terminava il processo di destinazione dopo setupBlock. Ora setupBlock l'interazione con l'app non lascerà in esecuzione il processo dell'app e una misurazione dell'avvio a freddo non valida. (I8ebb7)

Versione 1.2.0-alpha06

24 ottobre 2022

androidx.benchmark:benchmark-*:1.2.0-alpha06 viene ritirata. La versione 1.2.0-alpha06 contiene questi commit.

Modifiche alle API

  • BaselineProfileRule non richiede più l'accesso root su Android 13 (API 33) e non è più sperimentale. (Ie0a7d, b/250083467, b/253094958)
    • Questa modifica corregge anche la modalità di scaricamento dei profili di un'app sul disco dei dispositivi non sottoposti a rooting, ma richiede l'aggiornamento della dipendenza profileinstaller dell'app di destinazione.
    • Per utilizzare BaselineProfileRule o CompilationMode.Partial(warmupIterations) su un dispositivo non sottoposto a rooting, devi anche aggiornare l'app di destinazione in modo che utilizzi androidx.profileinstaller.profileinstaller:1.3.0-alpha01. In questo modo il profilo viene scaricato correttamente sul disco, in modo che possa essere compilato/estratto.

Correzioni di bug

  • Correzioni all'arresto anomalo di SampledProfiling su API 33+. (I40743, b/236109374)

Versione 1.2.0-alpha05

5 ottobre 2022

androidx.benchmark:benchmark-*:1.2.0-alpha05 viene ritirata. La versione 1.2.0-alpha05 contiene questi commit.

Correzioni di bug

  • Correzione della suddivisione dei frame nel visualizzatore delle tracce di sistema di Studio per le tracce acquisite di benchmark (I3f3ae, b/239677443)
  • Correzione di FrameTimingMetric per elencare FrameOverrun come richiedente l'API 31 anziché la 29 (I716dd, b/220702554)
  • Imposta l'iterazione in BaselineProfileRule e genera un errore chiaro se il pacchetto di destinazione non è installato (era già stato fatto per MacrobenchmarkRule). (Ic09a3, b/227991471)

Versione 1.2.0-alpha04

21 settembre 2022

androidx.benchmark:benchmark-*:1.2.0-alpha04 viene ritirata. La versione 1.2.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Aggiungi il supporto dell'argomento di strumentazione dryRunMode.enable a Macrobenchmark (già disponibile in Microbenchmark) per uno sviluppo locale più rapido e per la convalida dell'automazione delle app (ad es. in presubmit). Questo comando esegue l'override delle iterazioni impostandole su 1, salta la compilazione, elimina tutti gli errori di configurazione e disattiva l'output del file .json di misurazione. (Ib51b4, b/175149857)

    Nella riga di comando Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
    

    In build.gradle:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true'
        }
    }
    

Correzioni di bug

  • È stato corretto StartupTimingMetric in modo che non sia più necessario avviare le attività misurate tramite MacrobenchmarkScope.startActivityAndWait(). Ciò significa che la metrica può rilevare avvii da notifiche, Context.startActivity(), navigazione basata sull'attività in-app o comandi shell. (Ia2de6, b/245414235)
  • Correzione del bug per cui startActivityAndWait andava in timeout durante l'attesa del completamento del lancio sugli emulatori riducendo la rigidità del rilevamento dei frame. (Ibe2c6, b/244594339, b/228946895)

Versione 1.2.0-alpha03

7 settembre 2022

androidx.benchmark:benchmark-*:1.2.0-alpha03 viene ritirata. La versione 1.2.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Sono state aggiunte API sperimentali per l'utilizzo di BenchmarkState in modo indipendente, separato da BenchmarkRule / JUnit4. (Id478f, b/228489614)

Correzioni di bug

Versione 1.2.0-alpha02

24 agosto 2022

androidx.benchmark:benchmark-*:1.2.0-alpha02 viene ritirata. La versione 1.2.0-alpha02 contiene questi commit.

Modifiche alle API

  • Imposta come predefinito am force stop per MacrobenchmarkScope.killProcess(), anche con accesso root, tranne durante la generazione del profilo di base. Questo può essere sostituito con un argomento booleano facoltativo. (02cce9, b/241214097)

Correzioni di bug

  • Supporta la generazione di profili di base per le app di sistema. (I900b8, b/241214097)
  • Supporta il controllo delle metriche di consumo energetico ODPM sui dispositivi non sottoposti a rooting. (a38c78, b/229623230)

Versione 1.2.0-alpha01

27 luglio 2022

androidx.benchmark:benchmark-*:1.2.0-alpha01 viene ritirata. La versione 1.2.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Nuovo componente tracing-perfetto-common che consente agli strumenti di attivare il tracciamento dell'SDK Perfetto in un'app che lo espone (I2cc7f)
  • È stato aggiunto l'argomento di strumentazione androidx.benchmark.enabledRules per consentire il filtraggio delle esecuzioni di macrobenchmark solo per i benchmark o solo per la generazione di profili di base. Passa "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio quando generi solo BaselineProfiles su un emulatore. È supportato anche l'elenco separato da virgole. (I756b7, b/230371561)

    Ad esempio, nel file build.gradle del tuo macrobenchmark:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    oppure dalla riga di comando Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Modifiche alle API

  • È stato aggiunto un nuovo PowerMetric per misurare le attività di energia e potenza nei benchmark. (I9f39b, b/220183779)
  • È stata aggiunta una nuova modalità di compilazione CompilationMode.Ignore per saltare il ripristino e la compilazione del profilo. (Ibbcf8, b/230453509)
  • È stato aggiunto un nuovo parametro a BaselineProfileRule#collectBaselineProfile per filtrare il file di output in base ai nomi dei pacchetti (If7338, b/220146561)
  • Consente allo sviluppatore di scaricare il dispositivo per misurare il consumo energetico. (I6a6cb)
  • È stata aggiunta la possibilità di cancellare la cache degli shader in MacrobenchmarkScope. (I32122)
  • Consente allo sviluppatore di configurare la visualizzazione del tipo di metrica e delle categorie di sottosistema desiderate. (I810c9)
  • In precedenza, nel benchmark veniva generato un UnsupportedOperationException se veniva eseguito su un dispositivo non supportato. Ora l'errore UOE si verifica solo se la metrica viene utilizzata sul dispositivo non supportato (ad es. PowerMetric.configure). (I5cf20, b/227229375)
  • Sono stati aggiunti TotalPowerMetric e TotalEnergyMetric per misurare la potenza e l'energia totali in ogni categoria di sistema nei macrobenchmark. (I3b26b, b/224557371)

Correzioni di bug

  • Risolto un problema per cui i metodi compilati non venivano reimpostati correttamente tra ogni macrobenchmark nelle build non sottoposte a rooting. Purtroppo, questo richiede la reinstallazione dell'APK a ogni iterazione, il che cancellerà i dati dell'applicazione per ogni macrobenchmark. (I31c74, b/230665435)
  • Correzione dell'arresto anomalo della registrazione delle tracce su API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
  • Rinnovamento del rilevamento del completamento dell'avvio dell'attività per correggere l'eccezione "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)

Versione 1.1.1

Versione 1.1.1

9 novembre 2022

androidx.benchmark:benchmark-*:1.1.1 viene ritirata. La versione 1.1.1 contiene questi commit.

Correzioni di bug

  • Correzioni di android.system.ErrnoException: open failed: EACCES che si verificavano su alcuni dispositivi Android 11 (API 30) e versioni successive. Si tratta di un cherry-pick di una correzione di 1.2.0-alpha01. (aosp/2072249)

Versione 1.1.0

Versione 1.1.0

15 giugno 2022

androidx.benchmark:benchmark-*:1.1.0 viene ritirata. La versione 1.1.0 contiene questi commit.

  • Questa versione è identica a androidx.benchmark:benchmark-*:1.1.0-rc03.

Modifiche importanti dalla versione 1.0.0

Versione 1.1.0-rc03

1° giugno 2022

androidx.benchmark:benchmark-*:1.1.0-rc03 viene ritirata. La versione 1.1.0-rc03 contiene questi commit.

Correzioni di bug

Versione 1.1.0-rc02

11 maggio 2022

androidx.benchmark:benchmark-*:1.1.0-rc02 viene ritirata. La versione 1.1.0-rc02 contiene questi commit.

  • Tieni presente che questa release include una modifica del comportamento, in quanto le app vengono ora completamente reinstallate tra un benchmark e l'altro per garantire misurazioni accurate.

Correzioni di bug/modifiche del comportamento

  • È stato risolto un problema per cui la compilazione dell'app non veniva reimpostata correttamente tra i macrobenchmark e non veniva reimpostata affatto nelle build non sottoposte a rooting. In questo modo vengono risolti molti casi in cui l'esecuzione di più test comporterebbe un effetto minimo o nullo di CompilationMode sulle misurazioni. Per risolvere questo problema, l'app di destinazione ora reinstalla completamente ogni metodo di test, il che cancellerà i dati dell'applicazione tra ogni macrobenchmark. (I31c74, b/230665435)

  • Poiché ciò impedisce alle app di configurare lo stato prima dei test, ora è possibile saltare la compilazione / reinstallazione per aggirare il problema. Ad esempio, puoi compilare completamente il target con un comando shell cmd package compile -f -m speed <package> e poi ignorare il passaggio di compilazione di Macrobenchmark.

    Ad esempio, nel file build.gradle del tuo macrobenchmark:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false'
        }
    }
    

    oppure dalla riga di comando Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • È stato reso possibile condividere un modulo tra i test di generazione di profili di base e macrobenchmark aggiungendo l'argomento di strumentazione androidx.benchmark.enabledRules. Inserisci "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio durante la generazione di BaselineProfiles su un emulatore. (I756b7, b/230371561)

    Ad esempio, nel file build.gradle del tuo macrobenchmark:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    oppure dalla riga di comando Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Versione 1.1.0-rc01

20 aprile 2022

androidx.benchmark:benchmark-*:1.1.0-rc01 viene ritirata. La versione 1.1.0-rc01 contiene questi commit.

Correzioni di bug

  • I link di output del profilo di base in Android Studio ora utilizzano un nome file univoco. In questo modo, l'output riflette sempre i risultati più recenti dell'utilizzo di un BaselineProfileRule. ( aosp/2057008, b/228203086 )

Versione 1.1.0-beta06

6 aprile 2022

androidx.benchmark:benchmark-*:1.1.0-beta06 viene ritirata. La versione 1.1.0-beta06 contiene questi commit.

Correzioni di bug

  • Correzione dell'arresto anomalo della registrazione delle tracce sull'API 21/22 (If7fd6, b/227509388)
  • Rinnovamento del rilevamento del completamento dell'avvio dell'attività per correggere l'eccezione "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)
  • Correzione delle metriche di avvio per Macrobenchmark quando viene utilizzato CompilationMode.None(). Prima di questa modifica, CompilationMode.Partial() sembrava più lento di Compilation.None(). (611ac9).

Versione 1.1.0-beta05

23 marzo 2022

androidx.benchmark:benchmark-*:1.1.0-beta05 viene ritirata. La versione 1.1.0-beta05 contiene questi commit.

Correzioni di bug

  • Termina il pacchetto dopo aver ignorato l'installazione del profilo quando utilizzi CompilationMode.None. (aosp/1991373)
  • Risolto un problema per cui Macrobenchmarks non è in grado di raccogliere le metriche di avvio quando si utilizzaStartupMode.COLD. (aosp/2012227 b/218668335)

Versione 1.1.0-beta04

23 febbraio 2022

androidx.benchmark:benchmark-*:1.1.0-beta04 viene ritirata. La versione 1.1.0-beta04 contiene questi commit.

Correzioni di bug

  • Correzione delle metriche mancanti su Android 10 e NoSuchElementException causato dal mancato rilevamento corretto dei nomi dei processi nelle tracce. (Ib4c17, b/218668335)

  • Utilizza PowerManager per il rilevamento della limitazione termica su Q (API 29) e versioni successive. Ciò riduce significativamente la frequenza di falsi positivi nel rilevamento della limitazione termica (nuovo tentativo di benchmark dopo 90 secondi di raffreddamento) e accelera notevolmente i benchmark nelle build degli utenti. Fornisce inoltre il rilevamento della limitazione anche quando i clock sono bloccati (se sono bloccati a un valore troppo alto per l'ambiente fisico del dispositivo). (I9c027, b/217497678, b/131755853)

  • Filtra il profilo campionato di simpleperf in modo da visualizzare solo il thread measureRepeated per semplificare l'ispezione (Ic3e12, b/217501939)

  • Supporta le metriche dei sottoprocessi dell'interfaccia utente denominati nelle app multiprocesso (Ice6c0, b/215988434)

  • Filtra le regole del profilo di base per scegliere come target Android 9 (SDK 28). aosp/1980331 b/216508418

  • Salta l'installazione del profilo quando utilizzi Compilation.None(). Inoltre, segnala gli avvisi quando l'app utilizza una versione precedente di androidx.profileinstaller e del plug-in Android per Gradle. aosp/1977029

Versione 1.1.0-beta03

9 febbraio 2022

androidx.benchmark:benchmark-*:1.1.0-beta03 viene ritirata. La versione 1.1.0-beta03 contiene questi commit.

Modifiche alle API

  • È stato aggiunto AudioUnderrunMetric alla libreria macrobenchmark con il flag sperimentale per consentire il rilevamento degli underrun audio (Ib5972)
  • BaselineProfileRule non accetta più un blocco setup, in quanto funzionava come profileBlock. (Ic7dfe, b/215536447)

    Ad esempio

    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            setupBlock = {
                startActivityAndWait()
            },
            profileBlock = {
                // ...
            }
        )
    }
    
    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            profileBlock = {
                startActivityAndWait()
                // ...
            }
        )
    }
    

Correzioni di bug

  • Risolto un problema per cui gli aggiornamenti delle tracce del Profiler microbenchmark non venivano eseguiti nelle esecuzioni successive quando erano collegate nell'output di Studio (I5ae4d, b/214917025)
  • Impedisci i comandi della shell di compilazione sull'API 23 (Ice380)
  • Rinominate FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi per chiarire che si tratta di durate, non timestamp, e per corrispondere ai prefissi. (I0eba3, b/216337830)

Versione 1.1.0-beta02

26 gennaio 2022

androidx.benchmark:benchmark-*:1.1.0-beta02 viene ritirata. La versione 1.1.0-beta02 contiene questi commit.

Correzioni di bug

  • I risultati del profilo di campionamento dello stack / tracciamento dei metodi di microbenchmark ora sono collegati nell'output di Studio, in modo simile ad altri output di profilazione, e non sopprimono la metrica di allocazione. (Idcb65, b/214440748, b/214253245)
  • BaselineProfileRule ora stampa il comando adb pull in logcat e nell'output di Studio per estrarre il file di testo BaselineProfile generato. (f08811)

Versione 1.1.0-beta01

12 gennaio 2022

androidx.benchmark:benchmark-*:1.1.0-beta01 viene ritirata. La versione 1.1.0-beta01 contiene questi commit.

Correzioni di bug

  • Correzioni all'attivazione dell'argomento del profiler ignorato. (I37373, b/210619998)
  • Rimozione di CompliationModes ritirato (I98186, b/213467659)
  • L'argomento del profilo di base di CompilationMode.Partial è stato modificato in enum per maggiore chiarezza. (Id67ea)

Versione 1.1.0-alpha13

15 dicembre 2021

androidx.benchmark:benchmark-*:1.1.0-alpha13 viene ritirata. La versione 1.1.0-alpha13 contiene questi commit.

Modifiche alle API

  • Aggiungi la tracciabilità di sistema a basso overhead all'output di microbenchmark su Android Q (API 29+). Tieni presente che al momento non viene acquisita la tracciabilità personalizzata (tramite le API Jetpack android.os.Trace o androidx.tracing) per evitare di influire sui risultati. Questo tracciamento dovrebbe essere utile per diagnosticare l'instabilità, soprattutto da fonti esterne al benchmark. (I298be, b/205636583, b/145598917)
  • Chiariamo CompilationModes in tre classi: Completo, Nessuno, Parziale. In precedenza, i nomi erano assegnati in modo incoerente in base agli argomenti di compilazione (che ora trattiamo come dettagli di implementazione) e alle funzionalità. In questo modo, i compromessi, le potenziali combinazioni e il comportamento nelle varie versioni della piattaforma sono più chiari. (I3d7bf, b/207132597)
  • La configurazione e la misurazione ora sono sempre in coppia, in ordine. Ora puoi eseguire query sul nome del pacchetto e sull'iterazione (anche se l'iterazione potrebbe essere null in alcuni scenari di riscaldamento). (Id3b68, b/208357448, b/208369635)

Correzioni di bug

  • CompilationMode.Speed fisso trattato erroneamente come None (I01137)

Versione 1.1.0-alpha12

17 novembre 2021

androidx.benchmark:benchmark-*:1.1.0-alpha12 viene ritirata. La versione 1.1.0-alpha12 contiene questi commit.

Nuove funzionalità

  • Aggiungi TraceSectionMetric sperimentale per misurazioni personalizzate del tempo basate sulle tracce. (I99db1, b/204572664)

Correzioni di bug

  • Riattiva il dispositivo a ogni iterazione per assicurarti che sia possibile testare la UI. Richiede la disattivazione della schermata di blocco. (Ibfa28, b/180963442)
  • Correzione di più arresti anomali nella modalità di profilazione StackSampling su emulatori e dispositivi non rooted (Icdbda, b/202719335)
  • Rimozione di 0,5 secondi di sonno alla fine di ogni iterazione.Se con questa modifica noti metriche mancanti, segnala un bug. (Iff6aa)
  • Riduzione delle probabilità di perdita di dati e riduzione del sovraccarico di memoria dovuto al tracciamento (Id2544, b/199324831, b/204448861)
  • Riduzione delle dimensioni della traccia di circa il 40% passando al formato di archiviazione della pianificazione compatto. (Id5fb6, b/199324831)
  • Implementazioni aggiornate delle metriche di avvio per terminare sempre alla fine del thread di rendering. In questo modo, i dati saranno più coerenti tra le versioni della piattaforma e più simili alle misurazioni in-app. (Ic6b55)

Versione 1.1.0-alpha11

3 novembre 2021

androidx.benchmark:benchmark-*:1.1.0-alpha11 viene ritirata. La versione 1.1.0-alpha11 contiene questi commit.

Modifiche alle API

  • Macrobenchmark ora ha un minSdkVersion di 23. (If2655)
  • Aggiunge un nuovo BaselineProfileRule sperimentale in grado di generare profili di base per il percorso utente critico dell'app. La documentazione dettagliata verrà fornita in un secondo momento. (Ibbefa, b/203692160)
  • Rimuove la variante dell'interfaccia measureRepeated, aggiunta per i chiamanti Java, in quanto causava ambiguità nel completamento/risoluzione del metodo. I chiamanti Java dovranno restituire nuovamente Unit.Instance da measureRepeated. Se questo ti crea problemi, segnala un bug. Potremo rivedere la situazione in una versione futura. (Ifb23e, b/204331495)

Versione 1.1.0-alpha10

27 ottobre 2021

androidx.benchmark:benchmark-*:1.1.0-alpha10 viene ritirata. La versione 1.1.0-alpha10 contiene questi commit.

Modifiche alle API

  • Esegui il backport di StartupTimingMetric per il funzionamento fino all'API 23. Questa nuova implementazione gestisce meglio anche reportFullyDrawn() per attendere che i contenuti corrispondenti siano stati visualizzati. (If3ac9, b/183129298)
  • È stato aggiunto JvmOverloads a più metodi MacrobenchmarkScope per i chiamanti Java. (I644fe, b/184546459)
  • Fornisci una funzione MacrobenchmarkRule.measureRepeated alternativa che utilizza un Consumer<MacrobenchmarkScope> per l'utilizzo idiomatico nel linguaggio Java. (If74ab, b/184546459)

Correzioni di bug

  • Correzione per le tracce che non iniziano abbastanza presto e per i dati delle metriche mancanti. In questo modo dovrebbero essere risolte le eccezioni "Impossibile leggere le metriche durante il benchmark" causate dalla libreria stessa. (I6dfcb, b/193827052, b/200302931)
  • FrameNegativeSlack è stato rinominato in FrameOverrun per chiarirne il significato: di quanto il frame ha superato il budget di tempo. (I6c2aa, b/203008701)

Versione 1.1.0-alpha09

13 ottobre 2021

androidx.benchmark:benchmark-*:1.1.0-alpha09 viene ritirata. La versione 1.1.0-alpha09 contiene questi commit.

Correzioni di bug

  • Supporta l'eliminazione della cache della pagina del kernel senza root su API 31/S+, il che aumenterà la precisione degli avvii di StartupMode.COLD. (Iecfdb, b/200160030)

Versione 1.1.0-alpha08

29 settembre 2021

androidx.benchmark:benchmark-*:1.1.0-alpha08 viene ritirata. La versione 1.1.0-alpha08 contiene questi commit.

Modifiche alle API

  • Consenti l'esecuzione di macrobenchmark di scorrimento fino all'API 23 (If39c2, b/183129298)
  • Aggiungi un nuovo tipo di metrica campionata all'output JSON e della UI, incentrato sui percentili di più campioni per iterazione. (I56247, b/199940612)
  • Passa alle metriche in virgola mobile in tutte le librerie di benchmark (troncate nell'interfaccia utente di Studio). (I69249, b/197008210)

Versione 1.1.0-alpha07

1° settembre 2021

androidx.benchmark:benchmark-*:1.1.0-alpha07 viene ritirata. La versione 1.1.0-alpha07 contiene questi commit.

Modifiche alle API

  • È stato aumentato il livello API minimo a 21 per riflettere il livello API più basso previsto per il supporto futuro. Il livello API minimo supportato continua a essere comunicato tramite RequiredApi() ed è attualmente 29 (I440d6, b/183129298)

Correzioni di bug

  • Correzioni ProfileInstaller per semplificare l'esecuzione di MacroBenchmark da parte delle app che utilizzano profili di base tramite CompilationMode.BaselineProfile. (I42657, b/196074999) NOTA: richiede anche l'aggiornamento alla versione androidx.profileinstaller:profileinstaller:1.1.0-alpha04 o successive.
  • I benchmark StartupMode.COLD + CompilationMode.None ora sono più stabili. (I770cd, b/196074999)

Versione 1.1.0-alpha06

18 agosto 2021

androidx.benchmark:benchmark-*:1.1.0-alpha06 viene ritirata. La versione 1.1.0-alpha06 contiene questi commit.

Modifiche alle API

  • È stato aggiunto l'argomento di strumentazione androidx.benchmark.iterations per consentire l'override manuale del conteggio delle iterazioni durante il test/la profilazione in locale. (6188be, b/194137879)

Correzioni di bug

  • È stato eseguito il passaggio a Simpleperf come profiler di campionamento predefinito su API 29+. (Ic4b34, b/158303822)

Problemi noti

  • CompilationMode.BaselineProfile è ancora in fase di sviluppo. Per il momento, evita di utilizzarlo per determinare la qualità di un profilo.

Versione 1.1.0-alpha05

4 agosto 2021

androidx.benchmark:benchmark-*:1.1.0-alpha05 viene ritirata. La versione 1.1.0-alpha05 contiene questi commit.

1.1.0-alpha04 è stata annullata prima del rilascio a causa di un arresto anomalo sporadico. b/193827052

Modifiche alle API

  • È stato eseguito lo switch di startActivityAndWait per richiamare l'avvio tramite am start, il che riduce il tempo di ogni iterazione di misurazione di circa 5 secondi, a costo di non supportare più i parcelable intent. (I5a6f5, b/192009149

Correzioni di bug

  • Riduce l'aggressività del rilevamento della limitazione termica e ricalcola la baseline se le limitazioni vengono rilevate di frequente. (I7327b)
  • Correzioni di FrameTimingMetric per il funzionamento su Android S beta (Ib60cc, b/193260119)
  • Utilizza un EmptyActivity per estrarre l'app di destinazione da uno stato di arresto forzato per supportare meglio CompilationMode.BaselineProfile. (Id7cac, b/192084204)
  • Estensione del file di traccia modificata in .perfetto-trace per corrispondere allo standard della piattaforma. (I4c236, b/174663039)
  • StartupTimingMetric ora restituisce la metrica "fullyDrawnMs" per misurare il tempo necessario al completamento del rendering dell'applicazione. Per definire questa metrica per la tua app, chiama Activity.reportFullyDrawn quando i contenuti iniziali sono pronti, ad esempio quando gli elementi iniziali dell'elenco vengono caricati dal database o dalla rete. (metodo reportFullyDrawn disponibile senza controlli della versione build su ComponentActivity). Tieni presente che il test deve essere eseguito per un periodo di tempo sufficiente per acquisire la metrica (startActivityAndWait non attende reportFullyDrawn). (If1141, b/179176560)
  • Riduzione del costo dell'aggiunta di metadati dell'interfaccia utente alle tracce di oltre 50 ms (Ic8390, b/193923003)
  • Aumento drastico della frequenza di polling quando si interrompe la traccia, il che può ridurre, ad esempio, il tempo di esecuzione del benchmark di avvio di oltre il 30% (Idfbc1, b/193723768)

Versione 1.1.0-alpha03

16 giugno 2021

androidx.benchmark:benchmark-*:1.1.0-alpha03 viene ritirata. La versione 1.1.0-alpha03 contiene questi commit.

Nuove funzionalità

Correzioni di bug

  • Il codice Gradle di esempio per eliminare gli errori di benchmark è stato aggiornato per utilizzare un'API non ritirata con una sintassi che supporta anche gli utenti di .gradle.kts.

    Ad es.

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

Versione 1.1.0-alpha02

18 maggio 2021

La versione 1.1.0-alpha02 di Benchmark introduce un componente importante per il benchmarking: Macrobenchmark. Oltre al benchmark, che ti consente di misurare i cicli della CPU, il macrobenchmark ti consente di misurare le interazioni dell'intera app, come l'avvio e lo scorrimento, e acquisire le tracce. Per saperne di più, consulta la documentazione della libreria.

androidx.benchmark:benchmark-*:1.1.0-alpha02 viene ritirata. La versione 1.1.0-alpha02 contiene questi commit.

Nuove funzionalità

Artefatti di macrobenchmark aggiunti (androidx.benchmark:benchmark-macro-junit4 e androidx.benchmark:benchmark-macro)

  • Acquisire metriche sul rendimento di avvio, scorrimento/animazione dalla tua app, localmente o in CI
  • Acquisire ed esaminare le tracce da Android Studio

Correzioni di bug

  • Soluzione alternativa al problema delle autorizzazioni della shell con la directory di output su Android 12 (nota: potrebbe essere necessario aggiornare Android Gradle Plugin alla versione 7.0.0 canary e Android Studio ad Arctic Fox (2020.3.1) per continuare ad acquisire i file di output sui dispositivi interessati). (Icb039)
  • Supporta la memorizzazione nella cache della configurazione del supporto in BenchmarkPlugin (6be1c1, b/159804788)
  • Output dei file semplificato: attivato per impostazione predefinita, in una directory che non richiede requestLegacyExternalStorage=true (8b5a4d, b/172376362)
  • Corregge gli avvisi logcat di stampa della libreria relativi alla mancata individuazione del thread JIT nelle versioni della piattaforma in cui non è presente. (I9cc63, b/161847393)
  • Correzione per la frequenza massima del dispositivo di lettura. (I55c7a)

Versione 1.1.0-alpha01

10 giugno 2020

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 sono rilasciati. La versione 1.1.0-alpha01 contiene questi commit.

Nuove funzionalità della versione 1.1

  • Metrica di allocazione: ora i benchmark eseguono una fase aggiuntiva dopo il periodo di warm-up e la tempistica, acquisendo i conteggi di allocazione. Le allocazioni possono causare problemi di prestazioni nelle versioni precedenti della piattaforma (140 ns in O sono diventati 8 ns in M, misurati su Nexus 5X con clock bloccati). Questa metrica viene visualizzata nell'output della console di Android Studio, nonché nel
  • Supporto della profilazione: ora puoi acquisire i dati di profilazione per un'esecuzione di benchmark, per esaminare il motivo per cui il codice potrebbe essere eseguito lentamente. Benchmark supporta l'acquisizione della traccia del metodo o del campionamento del metodo da ART. Questi file possono essere esaminati con Profiler in Android Studio utilizzando File > Apri.
  • Il plug-in Gradle Benchmark ora fornisce valori predefiniti per una configurazione più semplice:
    • testBuildType è impostato per il rilascio per impostazione predefinita, per evitare di utilizzare dipendenze con la copertura del codice integrata. Anche buildType di rilascio è configurato come buildType predefinito, il che consente ad Android Studio di selezionare automaticamente la variante di build corretta quando apri un progetto per la prima volta. (b/138808399)
    • signingConfig.debug viene utilizzato come configurazione di firma predefinita (b/153583269)

** Correzioni di bug **

  • È stato ridotto significativamente l'overhead della transizione di riscaldamento, in cui la prima misurazione per ogni benchmark era artificialmente superiore alle altre. Questo problema era più evidente nei benchmark molto piccoli (1 microsecondo o meno). (b/142058671)
  • È stato corretto l'errore InstrumentationResultParser stampato per ogni benchmark durante l'esecuzione dalla riga di comando. (I64988, b/154248456)

Problemi noti

  • La riga di comando e le chiamate gradle di Benchmark non stampano direttamente i risultati. Puoi aggirare questo problema eseguendo l'operazione tramite Studio o analizzando il file di output JSON per i risultati.
  • La generazione di report sui benchmark non riesce a estrarre il report dai dispositivi su cui è installata un'app con un applicationId che termina con "android" o "download" (senza distinzione tra maiuscole e minuscole). Gli utenti che riscontrano questo problema devono eseguire l'upgrade del plug-in Android per Gradle alla versione 4.2-alpha01 o successive.

Versione 1.0.0

Benchmark Version 1.0.0

20 novembre 2019

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 e androidx.benchmark:benchmark-junit4:1.0.0 vengono rilasciati senza modifiche rispetto alla versione 1.0.0-rc01. La versione 1.0.0 contiene questi commit.

Funzionalità principali della versione 1.0.0

La libreria Benchmark ti consente di scrivere benchmark delle prestazioni del codice dell'app e ottenere risultati rapidamente.

Previene problemi di configurazione di build e runtime e stabilizza le prestazioni del dispositivo per garantire che le misurazioni siano accurate e coerenti. Esegui i benchmark direttamente in Android Studio o nell'integrazione continua per osservare il rendimento del codice nel tempo e prevenire regressioni.

Le principali funzionalità includono:

  • Stabilizzazione dell'orologio
  • Assegnazione automatica delle priorità dei thread
  • Supporto per il test delle prestazioni della UI, ad esempio in RecyclerView Sample
  • Riscaldamento e looping compatibili con JIT
  • Output JSON del benchmark per la post-elaborazione

Versione 1.0.0-rc01

23 ottobre 2019

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 sono rilasciati. La versione 1.0.0-rc01 contiene questi commit.

Nuove funzionalità

  • Aggiunta della traccia systrace ai benchmark

Correzioni di bug

  • È stato risolto il problema di instabilità delle metriche per cui la compilazione JIT non veniva completata prima del preriscaldamento a causa della riassegnazione della priorità (b/140773023)
  • Directory di output JSON unificata in Android Gradle Plugin 3.5 e 3.6

Versione 1.0.0-beta01

9 ottobre 2019

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 sono rilasciati. La versione 1.0.0-beta01 contiene questi commit.

Nuove funzionalità

  • Esegui la garbage collection prima di ogni preriscaldamento per ridurre la pressione della memoria da un benchmark all'altro (b/140895105).

Correzioni di bug

  • È stata aggiunta la dipendenza androidx.annotation:android-experimental-lint, in modo che il codice Java produca correttamente errori di lint quando non viene utilizzata l'API sperimentale, in modo simile a quanto fornito dall'annotazione sperimentale Kotlin per i chiamanti Kotlin.
  • Ora rileva correttamente l'utilizzo dell'argomento di strumentazione additionalTestOutputDir per l'output in Android Gradle Plugin 3.6, per sapere quando AGP gestirà la copia dei dati.
  • Correggi la frequenza di clock non rilevata nel JSON per stampare correttamente -1 (b/141945670).

Versione 1.0.0-alpha06

18 settembre 2019

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 sono rilasciati. La versione 1.0.0-alpha06 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto un controllo per l'utilizzo errato del vecchio pacchetto per il test runner, che ora fornisce un messaggio di errore più utile

Modifiche all'API

  • L'annotazione sperimentale ExperimentalAnnotationReport è ora correttamente pubblica. L'utilizzo dell'API sperimentale BenchmarkState#report ora richiede questa annotazione

Versione 1.0.0-alpha05

5 settembre 2019

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 sono rilasciati. I commit inclusi in questa versione sono disponibili qui.

Modifiche all'API

  • L'API BenchmarkState.reportData è ora contrassegnata come sperimentale

Correzioni di bug

  • Correzione dello script di blocco dell'orologio, che non funzionava sui dispositivi a cui mancavano le utilità shell cut o expr.
  • È stato risolto un problema relativo all'attività ./gradlew lockClocks che si bloccava sui dispositivi con accesso root con una versione precedente dell'utilità su, che non supportava il flag -c.

Versione 1.0.0-alpha04

7 agosto 2019

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 sono rilasciati. I commit inclusi in questa versione sono disponibili qui.

È stata aggiunta anche una nuova documentazione su come utilizzare la libreria Benchmark senza Gradle, sia per l'utilizzo con diversi sistemi di build (come Bazel o Buck) sia per l'esecuzione in integrazione continua. Per saperne di più, consulta Creare benchmark senza Gradle ed Eseguire benchmark nell'integrazione continua.

Nuove funzionalità

  • Plug-in Gradle
    • Ora disattiva automaticamente la copertura del test e imposta AndroidBenchmarkRunner per impostazione predefinita (b/138374050)
    • È stato aggiunto il supporto per la nuova copia dei dati basata su AGP durante l'esecuzione dei benchmark e quando si utilizza AGP 3.6 o versioni successive
  • Aggiunte al formato JSON
    • Output del tempo totale di esecuzione del test di benchmark (b/133147694)
    • I benchmark @Parameterized che utilizzano una stringa di nome (ad esempio @Parameters(name = "size={0},depth={1}")) ora restituiscono nomi e valori dei parametri per benchmark nell'output JSON (b/132578772)
  • Modalità di prova (b/138785848)
    • È stata aggiunta una modalità "prova generale" per eseguire ogni ciclo di benchmark una sola volta, per verificare la presenza di errori/arresti anomali senza acquisire misurazioni. Ciò può essere utile, ad esempio, per eseguire rapidamente benchmark in presubmit per verificare che non siano danneggiati.

Modifiche all'API

  • La struttura del modulo è cambiata, dividendo la libreria (b/138451391)
    • benchmark:benchmark-junit4 contiene classi con dipendenza JUnit: AndroidBenchmarkRunner e BenchmarkRule, entrambe spostate nel pacchetto androidx.benchmark.junit4
    • benchmark:benchmark-common contiene il resto della logica, inclusa l'API BenchmarkState
    • Questa suddivisione consentirà alla libreria di supportare il benchmarking senza le API JUnit4 in futuro
  • Gli avvisi di configurazione ora vengono trattati come errori e il test verrà interrotto (b/137653596)
    • Questa operazione viene eseguita per incoraggiare ulteriormente misurazioni accurate, soprattutto nell'integrazione continua
    • Questi errori possono essere ridotti ad avvisi con un argomento di strumentazione. Ad esempio: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Correzioni di bug

  • Gli errori durante la scrittura su un dispositivo di archiviazione esterno sui dispositivi Q forniscono messaggi più descrittivi, con suggerimenti su come risolvere il problema
  • Gli schermi vengono attivati automaticamente durante l'esecuzione dei benchmark, anziché non riuscire quando lo schermo è spento

Contributi esterni

  • Grazie a Sergey Zakharov per aver contribuito a migliorare l'output JSON e per la correzione dei problemi di spegnimento dello schermo.

Versione 1.0.0-alpha03

2 luglio 2019

androidx.benchmark:benchmark:1.0.0-alpha03 e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 sono stati rilasciati. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Esporre la durata del sonno dovuta alla limitazione termica per benchmark nel report JSON completo

Correzioni di bug

  • Non è più necessario applicare il plug-in Gradle dopo i plug-in Android e il blocco Android
  • Aggiunge il supporto per i report sui benchmark sui dispositivi Android 10 che utilizzano l'archiviazione isolata

Versione 1.0.0-alpha02

6 giugno 2019

androidx.benchmark:1.0.0-alpha02 e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 sono stati rilasciati. I commit inclusi in questa versione sono disponibili qui.

Tieni presente che consideriamo lo schema JSON come un'API. Prevediamo di seguire gli stessi vincoli di stabilità delle altre API: stabili (con rarissime eccezioni) una volta in versione beta e corretti nella release finale, con sole aggiunte nelle release secondarie e modifiche/rimozioni nelle release principali.

Modifiche all'API

  • Schema JSON rinnovato. È probabile che ulteriori modifiche allo schema JSON siano limitate alle aggiunte:

    • La struttura dell'oggetto risultato è stata riorganizzata per supportare ulteriori gruppi di metriche in futuro (b/132713021)
    • Sono state aggiunte informazioni contestuali sull'esecuzione del test, come informazioni sul dispositivo e sulla build e se gli orologi sono bloccati, all'oggetto di primo livello (b/132711920)
    • I nomi delle metriche temporali ora contengono "ns" (b/132714527)
    • Sono state aggiunte statistiche aggiuntive per metrica segnalata (massimo, mediana, minimo) ed è stata rimossa la statistica riepilogativa semplificata "nanos" (b/132713851)
  • Output XML rimosso (b/132714414)

  • Rilevamento della limitazione termica rimosso dall'API BenchmarkState.reportData (b/132887006)

Correzioni di bug

  • Correzione del problema relativo al mancato funzionamento di ./gradlew lockClocks su alcuni dispositivi con sistemi operativi recenti (b/133424037)
  • Rilevamento della limitazione disabilitato per l'emulatore (b/132880807)

Versione 1.0.0-alpha01

7 maggio 2019

androidx.benchmark:benchmark:1.0.0-alpha01 viene ritirata. I commit inclusi in questa versione sono disponibili qui.