Benchmark
| Ultimo aggiornamento | Release stabile | Candidato per la release | Release beta | Release alpha |
|---|---|---|---|---|
| 7 ottobre 2026 | 1.5.0 | - | - | 1.6.0-alpha01 |
Dichiara le dipendenze
Per aggiungere una dipendenza da 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.5.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.5.0") }
Microbenchmark
Per utilizzare Microbenchmark nel tuo progetto, aggiungi le seguenti dipendenze al file build.gradle per il tuo modulo di microbenchmark:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.5.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.5.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
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.5.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.5.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 raccolta. Prima di segnalare un nuovo problema, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per saperne di più, consulta la documentazione di Issue Tracker.
Versione 1.6
Versione 1.6.0-alpha01
7 ottobre 2026
androidx.benchmark:benchmark-*:1.6.0-alpha01 è stato rilasciato. La versione 1.6.0-alpha01 contiene questi commit.
Nuove funzionalità
- L'attività di benchmark
:lockClocksora utilizza la modalità Prestazioni fisse, se disponibile, rispetto alla precedente implementazione solo root. Ciò significa che puoi bloccare gli orologi su molti più dispositivi fisici per ottenere risultati stabili, il che è particolarmente utile per i microbenchmark stabili. Se riscontri problemi di limitazione termica con il nuovo comportamento, segnalali. (I0d032)
Modifiche alle API
- È stato aggiunto
MemoryProfilingConfigaExperimentalConfigper consentire alle esecuzioni di macrobenchmark di attivare la profilazione heap di Perfetto. (Ibc931)
Correzioni di bug
- È stato corretto un bug nel microbenchmark per cui a volte l'acquisizione della traccia metodo veniva saltata con eccessiva cautela per evitare errori ANR. (Ifc307)
- Correzione dell'acquisizione del profilo di riferimento per i processi che non utilizzano un pattern di denominazione
:<suffix>. (I512ab) - I link alle tracce di Profiler ora vengono riportati in una sezione "Profiling Traces" separata nei riepiloghi dell'IDE. (Id639f)
- Risolto un bug nello svuotamento dei file virtuali che causava l'errore
Unable to flush profiles for <packagename>. (I48ccc) - Risolta la sincronizzazione nelle tracce metodo incorporate nel tracciamento del sistema. Ifd2e33 b/537688349
- Plug-in Gradle per il profilo di baseline: è stato migliorato
CollectBaselineProfileTaskper supportare la ricerca di filetest-result.pbnelle sottodirectory, consentendo la compatibilità con la nuova piattaforma di test integrata. Id9c488 b/543799367
Versione 1.5
Versione 1.5.0
9 settembre 2026
androidx.benchmark:benchmark-*:1.5.0 è stato rilasciato. La versione 1.5.0 contiene questi commit.
Versione 1.5.0-rc02
26 agosto 2026
androidx.benchmark:benchmark-*:1.5.0-rc02 è stato rilasciato. La versione 1.5.0-rc02 contiene questi commit.
Versione 1.5.0-rc01
12 agosto 2026
androidx.benchmark:benchmark-*:1.5.0-rc01 è stato rilasciato. La versione 1.5.0-rc01 contiene questi commit.
Versione 1.5.0-beta01
29 luglio 2026
androidx.benchmark:benchmark-*:1.5.0-beta01 è stato rilasciato. La versione 1.5.0-beta01 contiene questi commit.
Modifiche alle API
PerfettoCaptureePerfettoTraceRuleora possono acquisire tracce in corso e unirle per un pacchetto di destinazione. (I9a00b, b/497959820)
Versione 1.5.0-alpha07
1° luglio 2026
androidx.benchmark:benchmark-*:1.5.0-alpha07 è stato rilasciato. La versione 1.5.0-alpha07 contiene questi commit.
Modifiche alle API
- Acquisizione semplificata della traccia Perfetto sul dispositivo. (I48810)
- Sposta le API di estensione
TraceProcessor.runServersperimentali daandroidx.benchmark:benchmark-macroaandroidx.benchmark:benchmark-commone nel pacchettoandroidx.benchmark. Ciò consentirà il loro utilizzo in futuro nei microbenchmark. (Ie25bb, b/393640753)
Correzioni di bug
- Aggiornamento dell'implementazione di traceprocessor (nonché dell'acquisizione di tracce Perfetto non in bundle) per l'utilizzo di Perfetto v56.0 (I8fb9d)
- Imposta
androidx.benchmark.requireAoteandroidx.benchmark.requireAotsu true per impostazione predefinita. Queste impostazioni predefinite più sicure garantiscono che la compilazione venga eseguita prima dell'esecuzione dei microbenchmark (attiva per impostazione predefinita con il plug-in Gradle di benchmark quando si utilizza AGP 8.4 o versioni successive) e chemeasureRepeatednon venga utilizzato nel thread principale, dove può causare ANR. (I1bc3c, b/379115078) - Aumento del timeout di interruzione di Perfetto da 5 a 30 secondi (solo per le sessioni di Perfetto acquisite dal benchmark). Aggiunta di una registrazione degli errori più chiara quando si verifica il problema. (If188f, b/435589290)
Versione 1.5.0-alpha06
6 maggio 2026
androidx.benchmark:benchmark-*:1.5.0-alpha06 è stato rilasciato. La versione 1.5.0-alpha06 contiene questi commit.
Correzioni di bug
- Gestisci correttamente gli ambienti multiutente quando sposti i file dalla directory di output del benchmark alla directory di output dei test aggiuntivi. (I90da5, b/489358149)
Versione 1.5.0-alpha05
25 marzo 2026
androidx.benchmark:benchmark-*:1.5.0-alpha05 è stato rilasciato. La versione 1.5.0-alpha05 contiene questi commit.
Correzioni di bug
ArtMetricaggiornato per tenere conto dei pacchetti di primo livello, particolarmente importante quando si utilizza AGP/R8 9.1+ o l'opzione globale-repackageclasses. In precedenza,ArtMetricnon riusciva a rilevare questi caricamenti di classi nelle sue misurazioni diartClassLoad.... (If8a35, b/487402058)
Nuove funzionalità
- È stato aggiunto un nuovo argomento di strumentazione androidx.benchmark.requireLockedClocks che consente di attivare un controllo per verificare se i clock della CPU sono bloccati per i dispositivi rooted. (Id82e8, b/468039042)
Versione 1.5.0-alpha04
11 marzo 2026
androidx.benchmark:benchmark-*:1.5.0-alpha04 è stato rilasciato. La versione 1.5.0-alpha04 contiene questi commit.
Modifiche alle API
- Aggiunto
JvmOverloadsaPowerMetric.EnergyePowerMetric.Power(Iac0d0, b/481371562).
Correzioni di bug
- Aggiornato
ArtMetricper tenere conto dei pacchetti di primo livello, particolarmente importante quando si utilizza AGP/R8 9.1+ o l'opzione globale-repackageclasses. In precedenza,ArtMetricnon riusciva a rilevare questi caricamenti di classi nelle sue misurazioni diartClassLoad.... (I207ca, b/487402058)
Versione 1.5.0-alpha03
11 febbraio 2026
androidx.benchmark:benchmark-*:1.5.0-alpha03 è stato rilasciato. La versione 1.5.0-alpha03 contiene questi commit.
- È stato effettuato un aggiornamento in modo che dipenda da UiAutomator 2.4 beta.
Versione 1.5.0-alpha02
28 gennaio 2026
androidx.benchmark:benchmark-*:1.5.0-alpha02 è stato rilasciato. La versione 1.5.0-alpha02 contiene questi commit.
Correzioni di bug
Aggiunto il supporto parziale per la generazione di profili di riferimento per i moduli multipiattaforma Kotlin. In genere, le dipendenze dai profili possono essere definite utilizzando la configurazione Gradle
baselineProfilenel blocco delle dipendenze, ma al momento non funziona per i moduli KMP.kotlin { androidLibrary { namespace = "com.example.namespace" compileSdk = 36 } sourceSets { androidMain.dependencies { // THIS DOES NOT WORK // baselineProfile(":yourProducerProject") } } }Devi invece definire le dipendenze utilizzando l'**estensione
baselineProfile. (Ie19c4)plugins { id("org.jetbrains.kotlin.multiplatform") id("com.android.kotlin.multiplatform.library") id("androidx.baselineprofile.consumer") } kotlin { androidLibrary { namespace = "com.example.namespace" compileSdk = 36 } sourceSets { androidMain.dependencies { // ... } } } // Define dependencies // This works ! baselineProfile { variants { androidMain { from(project(":yourProducerProject")) } } }
Versione 1.5.0-alpha01
17 dicembre 2025
androidx.benchmark:benchmark-*:1.5.0-alpha01 è stato rilasciato. La versione 1.5.0-alpha01 contiene questi commit.
- Macrobenchmark 1.5 utilizza
UiAutomator2.4 per semplificare l'interazione con l'applicazione misurata. L'oggetto MacrobenchmarkScope ora estende UiAutomatorTestScope, il che ti consente di utilizzare le APIUiAutomatormoderne comeonElement { ... }.click(). - Per saperne di più su
UiAutomator2.4, consulta la documentazione.
Nuove funzionalità
- Il plug-in Gradle del profilo di baseline non richiede più
newDsl=falsein AGP 9.0 (Iaaac7, b/443311090) - Estendi la configurazione della traccia per includere le dimensioni del core (ad es. piccolo/grande) nelle tracce di sistema/perfetto acquisite dal benchmark. (I8e397, b/457469959)
Modifiche alle API
- (In UiAutomator) È stata modificata l'attesa di
startActivityper attendere una nuova finestra. (I35da6, b/440021797) - Stabilizza le API
BlackHolein androidx.benchmark. (I2b67e, b/451749438) - Aggiungi
@JvmOverloadsper i costruttori di praticità perPerfettoTraceRule. (I1510a, b/443763207)
Versione 1.4
Versione 1.4.1
10 settembre 2025
androidx.benchmark:benchmark-*:1.4.1 è stato rilasciato. La versione 1.4.1 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui
perfettoSdkTracing=true(ad es. durante il tracciamento di Compose in un microbenchmark) terminava il processo di destinazione se era già in esecuzione e non era specificato uno StartupMode. (Ib2c1f)
Versione 1.4.0
30 luglio 2025
androidx.benchmark:benchmark-*:1.4.0 è stato rilasciato. La versione 1.4.0 contiene questi commit.
Modifiche importanti dalla versione 1.3.0
Microbenchmark
- Le attività Gradle
lockClockseunlockClockssono state spostate nei progetti di benchmark, anziché a livello principale, per rispettare l'isolamento dei progetti Gradle. - Rifattorizzato
BenchmarkRuleper essere basato su coroutine e supportare un comportamentoyield()migliore. In questo modo, il rischio di ANR durante le esecuzioni di benchmark, in particolare quelle di CI lunghe, dovrebbe essere ridotto in modo significativo. Nota: i benchmark della UI devono essere eseguiti conmeasureRepeatedOnMainThread
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))). - È stata aggiunta ArtMetric, che può essere utilizzata 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
BaselineProfileRuleora 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 metricheMacrobenchmark, in altri casi. Può anche essere eseguito su JVM desktop definendo il tuo ServerLifecycleManager.
Versione 1.4.0-rc01
18 giugno 2025
androidx.benchmark:benchmark-*:1.4.0-rc01 è stato rilasciato. 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 è stato rilasciato. La versione 1.4.0-beta02 contiene questi commit.
Modifiche alle API
- È stato aggiunto un
BaselineProfileConfig.Builderper semplificare la chiamata diBaselineProfileRule.collectWithResults()per gli sviluppatori Java. (I94905)
Versione 1.4.0-beta01
7 maggio 2025
androidx.benchmark:benchmark-*:1.4.0-beta01 è stato rilasciato. La versione 1.4.0-beta01 contiene questi commit.
Modifiche alle API
- Aggiunta della variante del costruttore
PerfettoTraceRuleche accetta unPerfettoConfig(Ie53ba)
Correzioni di bug
- Updated
TraceProcessorstartup insight link format to use correct plugin, and clearer delimeter (:is shorter than%3A, and both are supported) (Ie18ef) - Utilizza sempre l'interruzione forzata per terminare i processi, anche quando hai eseguito il rooting e stai terminando le app di sistema. Corregge le eccezioni del modulo:
Expected no stdout/stderr from killall ... No such process. (Idca2c)
Contributo esterno
- Aggiunto il gestore delle eccezioni del proxy per
TraceProcessorHttpServer(I480f5)
Versione 1.4.0-alpha11
9 aprile 2025
androidx.benchmark:benchmark-*:1.4.0-alpha11 è stato rilasciato. La versione 1.4.0-alpha11 contiene questi commit.
Modifiche alle API
- Modificato l'argomento timeout di
TraceProcessor: Duration in timeoutMs long per l'usabilità del chiamante Java. (I9fbb5) - Contrassegna il costruttore
TraceProcessorcome interno. Gli utenti che effettuano chiamate devono utilizzareTraceProcessor.startServeroTraceProcessor.runServer. (Ia8c5b)
Correzioni di bug
- Quando interrompi l'applicazione con
MacrobenchmarkScope.killProcess, convalida i risultati del comando di interruzione per evitare errori silenziosi ed errori di timeout. (I84555)
Aggiornamenti delle dipendenze
- Questa libreria ora ha come target il livello di 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 è stato rilasciato. La versione 1.4.0-alpha10 contiene questi commit.
Modifiche alle API
- Aumento del timeout predefinito per il caricamento e l'interrogazione del server
TraceProcessora 120 secondi (rispetto ai 60/30 precedenti) ed è possibile configurare entrambi 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 è inclusoBroadcastReciever. Questo problema riguarda solo le corse su dispositivi rooted. (Ied308)
Versione 1.4.0-alpha09
12 marzo 2025
androidx.benchmark:benchmark-*:1.4.0-alpha09 è stato rilasciato. La versione 1.4.0-alpha09 contiene questi commit.
Modifiche alle API
- Aggiunta di
TraceProcessore dell'API Session con handle chiudibili, per un utilizzo più semplice con i cicli di vita personalizzati. Questo è anche un passo avanti verso un utilizzo più semplice delle API Coroutine e Java. Le funzioni di estensione perTraceProcessor.runServer {}sono ora contrassegnate come sperimentali, in quanto è probabile che vengano spostate e rese non sperimentali in futuro. (I358b4)
Correzioni di bug
- È stato risolto il problema per cui l'acquisizione di Benchmark e del profilo di baseline non funzionava con l'API 36 a causa di una modifica in
pgreptoybox che ora richiede-aper 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 sufalseper consentire la continuazione dell'acquisizione delle tracce Perfetto preesistenti. Per impostazione predefinita, le acquisizioni di tracce Perfetto preesistenti sul dispositivo vengono terminate per evitare interferenze. (I02a3c) - Il campo JSON
context.osCodenameAbbreviatedora saràRELper 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) - È stato corretto l'arresto anomalo in
FrameTimingMetricquando si verificano frame risincronizzati. (I7c6f4, b/394610806) - Non si presume più che
Choreographer#doFramesia la parte superiore del frame dello stack nel thread principale perFrameTimingQuery. (Iee0e0, b/340206285)
Versione 1.4.0-alpha08
12 febbraio 2025
androidx.benchmark:benchmark-*:1.4.0-alpha08 è stato rilasciato. La versione 1.4.0-alpha08 contiene questi commit.
Modifiche alle API
- Le API di estensione
TraceProcessor.runSession()sono state spostate in fase sperimentale, in quanto è probabile che alla fine vengano spostate in costruttori concreti su Android. (Ib0528, b/393640753) - La maggior parte dell'implementazione di Startup Insights è ora pubblica/sperimentale e viene spostata nell'artefatto
TraceProcessor. ConsultaStartupInsights. (I0aa00) - Ritira
BenchmarkRule.runWithTimingDisabled {}a favore diBenchmarkRule.runWithMeasurementDisabled {}, che descrive più chiaramente il comportamento: tutte le metriche vengono sospese. Inoltre, esponi la superclasseMicrobenchmarkScope, poiché non è possibile dichiarare nuovamente la funzionerunWithMeasurementDisabledper l'accesso aperto, in quanto è in linea. (I9e23b, b/389149423, b/149979716) - Le librerie di benchmark sono state spostate in Kotlin 2.0. (I9d1e0)
- Argomento di strumentazione
androidx.benchmark.startupProfiles.enablerimosso. Non è più utile, in quanto può essere controllato dall'argomentoincludeInStartupProfileinBaselineProfileRule.collect(). (I39eb4)
Correzioni di bug
- È stata ridotta la quantità di chiamate di funzione interne di Microbenchmark durante la profilazione per rendere più chiare, ad esempio, le tracce metodo (Ifaed8).
- Correzione speculativa per i blocchi: "Failed to stop [
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) - Correzione di
IllegalStateExceptionscon l'etichetta "Expectedpm dump-profilesstdout" causata da un controllo del formato di output troppo rigido. (I358dc)
Versione 1.4.0-alpha07
29 gennaio 2025
androidx.benchmark:benchmark-*:1.4.0-alpha07 è stato rilasciato. La versione 1.4.0-alpha07 contiene questi commit.
Nuove funzionalità
BaselineProfileRuleora introduce un'APIcollectWithResults(...)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 generazione di eccezioni alla scadenza dimeasureRepeatedOnMainThreadper i test locali. Non è consigliato, in quanto aumenta la probabilità di errori ANR durante i test. (Idbeec, b/353226476)
Modifiche alle API
- È stato aggiunto
@JvmOverloadsal costruttoreMicrobenchmarkConfig. (I13fd3) - Rifattorizzato
BenchmarkRuleper essere basato su coroutine e supportare un comportamentoyield()migliore. Questo refactoring ha rimosso diverse APIBenchmarkStatesperimentali, ma verranno introdotte delle sostituzioni, se necessario. Inoltre, è stato aggiuntorunWithMeasurementDisabledper chiarire il comportamento (tutte le misurazioni sono in pausa). In futuro,runWithTimingDisabledverrà ritirato. (I19837, b/389149423, b/311242861) - Sposta
PerfettoTraceProcessorinTraceProcessorin un nuovo artefattoandroidx.benchmark:benchmark-traceprocessore rendi la maggior parte della sua API non sperimentale. QualsiasiTraceMetricpersonalizzato o qualsiasi elemento che legge dalle tracce dovrà essere aggiornato alla nuova importazioneTraceProcessor. La nuova APITraceProcessorfunziona esattamente come la precedente, ma è una libreria di interfacce autonoma (in qualche modo analoga al livelloandroidx.sqlitedi Room) con un'implementazione specifica per Android integrata in macrobenchmark. Il nuovo artefatto può essere utilizzato anche su JVM, ma al momento dovrai avviare la tua copia del file binarioTraceProcessore offrire una porta a cui connetterti. (I3a767, I62563, b/381134564)
Correzioni di bug
- Genera un messaggio di errore più chiaro quando
MacrobenchmarkScope.startActivityAndWaitnon 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 di Kotlin e l'evidenziazione della sintassi in diversi esempi di Java / build.gradle. (Ib3808)
- Documentazione dei parametri
ArtMetriceCaptureInfochiarita. (I96e60)
Versione 1.4.0-alpha06
11 dicembre 2024
androidx.benchmark:benchmark-*:1.4.0-alpha06 è stato rilasciato. La versione 1.4.0-alpha06 contiene questi commit.
Modifiche alle API
- Rimosso l'utilizzo di
@Language("sql")inPerfettoTraceProcessor.Session.query(), poiché l'evidenziazione/l'analisi di Studio non funzionano. (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) - Correzione di
ArtMetricper segnalare il caricamento della classe (non l'inizializzazione) e miglioramento della documentazione per chiarire il comportamento di runtime. (I9915c) - Su Android Multiuser, esegui i comandi come root solo sui dispositivi rooted. (I88b44)
Versione 1.4.0-alpha05
13 novembre 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05 è stato rilasciato. 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. In questo modo, viene aggirata una modifica della piattaforma che consente allo stato di compilazione di ARTverifydi 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 riportavano la misurazione dalle 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
TraceMetrico altri chiamanti diretti diPerfettoSession.querypossono implementare lo stesso comportamento modificandoprocess.name LIKE "$packageName"in una query Perfetto in modo che sia(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 è stato rilasciato. La versione 1.4.0-alpha04 contiene questi commit.
Nuove funzionalità
- (Sperimentale) Attiva la generazione del profilo di riferimento e il benchmarking sulle app installate per un utente secondario, ad esempio qualsiasi app su dispositivi Android Auto senza display. Questo supporto è stato testato in alcuni scenari, ma segnalaci un bug se non funziona per te. (I9fcbe, b/356684617, b/373641155)
Correzioni di bug
isProfileableora viene sempre sostituito nelle build di benchmark eisDebuggableora viene sempre sostituito sia nelle build di benchmark sia in quelle dinonMinified(acquisizione del profilo di base). (I487fa, b/369213505)- Corregge il rilevamento della compilazione su alcuni dispositivi fisici precedenti all'API 28. Interessa il file JSON
context.compilationMode, nonché il comportamento diandroidx.benchmark.requireAot=true(che non genera più errori) (Ic3e08, b/374362482) - Nelle metriche
CpuEventCounter, genera un'eccezione se vengono osservate misurazioni non valide (ad es. instructions/cpucycles==0) (I8c503)
Versione 1.4.0-alpha03
16 ottobre 2024
androidx.benchmark:benchmark-*:1.4.0-alpha03 è stato rilasciato. 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 modificheCaptureInfoincludono la versione principale ART facoltativa con impostazione predefinita. (I930f7) - Aggiungi
coefficientOfVariationall'output JSON di Benchmark per mostrare la stabilità all'interno di una determinata esecuzione del benchmark. (Ib14ea)
Correzioni di bug
- Risolto il problema
CollectBaselineProfileTaskquando 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()(incluso quello eseguito prima di ogni iterazione, utilizzato per implementare il comportamentoStartupMode.COLD) attenderà di verificare che tutti i processi dell'app abbiano interrotto l'esecuzione. (I60aa6, b/351582215) - È stato 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 garantire un utilizzo corretto:
-Xjspecify-annotations=strict(questa è l'impostazione predefinita 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 è stato rilasciato. La versione 1.4.0-alpha02 contiene questi commit.
Modifiche alle API
- Le attività Gradle
lockClockseunlockClockssono state spostate nei progetti di benchmark, anziché essere disponibili al livello più alto. 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
BaselineProfileRuleora raccoglie i profili per le app multiprocesso segnalando a ogni processo in esecuzione alla fine del blocco di eseguire il dump dei 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 riferimento nel blocco del 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 è stato rilasciato. La versione 1.4.0-alpha01 contiene questi commit.
Nuova funzionalità: approfondimenti sull'avvio delle app
- La versione iniziale degli insight sull'avvio dell'app può essere attivata in Macrobenchmark. (09fae38)
Per attivare in un benchmark di avvio:
@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.suppressWarningsper eliminare tutti gli avvisi del profilo 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 ripristinare lo stato di test/prestazioni del dispositivo. Al momento non sono pubblicati come attività Gradle. (7c3732b)
- È stato aggiunto l'argomento benchmark per ignorare i test durante l'esecuzione sull'emulatore. Quando la build
automaticGenerationDuringè abilitata, i benchmark attiveranno anche la generazione del profilo di riferimento. L'operazione non riuscirà se vengono utilizzati emulatori. Con il nuovo argomentoskipBenchmarksOnEmulatorpossiamo invece saltare il test. (0c2ddcd) - Modifica della logica di attivazione dell'evento perf per l'esecuzione su API 23+ (2550048)
Modifiche alle API
- L'argomento sperimentale esistente
PerfettoConfigdiMacrobenchmarkRule.measureRepeated()è stato spostato nel nuovo oggettoExperimentalConfig.
Correzioni di bug
- Aumenta il numero di tentativi di
lockClocks.sh(99e9dac) - Non creare tipi di build
nonMinifiede benchmark se esistenti. A causa di un bug, anche se i tipi di buildnonMinifiede benchmark esistevano, 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 cancellati in
FrameTimingGfxInfoMetric. (35cc79c) - È stato corretto
androidx.benchmark.cpuEventCounterche produceva valori danneggiati per gli eventi non di istruzione. (06edd59) - Correzione di
resumeTiming/runWithTimingDisabledper rispettare l'ordine di priorità delle metriche e ridurre in modo significativo l'impatto della messa in pausa/del ripristino delle metriche con priorità inferiore sui risultati delle metriche con priorità superiore. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di strumentazionecpuEventCounter.enable, timeNs non viene più ridotto in modo significativo quando si verifica una pausa/ripresa. (5de0968)
Versione 1.3
Versione 1.3.4
26 marzo 2025
androidx.benchmark:benchmark-*:1.3.4 è stato rilasciato. La versione 1.3.4 contiene questi commit.
Correzioni di bug
- Sono state corrette le incompatibilità di isolamento dei progetti Gradle nel plug-in Gradle di riferimento per i benchmark. (b/404523257)
Versione 1.3.3
16 ottobre 2024
androidx.benchmark:benchmark-*:1.3.3 è stato rilasciato. La versione 1.3.3 contiene questi commit.
Correzioni di bug
- È stato corretto
CollectBaselineProfileTaskquando il dispositivo AVD contiene spazi (Ia0225, b/371642809)
Versione 1.3.2
2 ottobre 2024
androidx.benchmark:benchmark-*:1.3.2 è stato rilasciato. La versione 1.3.2 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui Firebase Test Lab (FTL) non era in grado di estrarre i file dei risultati del profilo di baseline o del macrobenchmark dal plug-in Gradle del profilo di baseline. (I2f678, b/285187547)
Per utilizzare FTL, applica il plug-in al modulo del profilo di base nel blocco del 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 riferimento:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Versione 1.3.1
18 settembre 2024
androidx.benchmark:benchmark-*:1.3.1 è stato rilasciato. La versione 1.3.1 contiene questi commit.
Correzioni di bug
- È stata aggiunta la proprietà Gradle
androidx.baselineprofile.suppressWarningsper eliminare tutti gli avvisi relativi ai profili di base (I7c36e, b/349646646) - È stato corretto il plug-in Gradle del profilo di baseline per utilizzare
nonMinified…ebenchmark…preesistenti se creati dall'app anziché creare wrapper. (Ia8934, b/361370179) - Risolto il problema
java.lang.AssertionError: ERRORS (not suppressed): EMULATORquandoautomaticGenerationDuringBuildè abilitato sugli emulatori. Il nuovo argomento viene utilizzato per saltare il test. (If3f51, b/355515798) - Minimizzazione del microbenchmark: mantieni le sottoclassi di
org.junit.runner.notification.RunListenerin ProGuard della libreria di benchmark (Ic8ed5, b/354264743) - Correggi
TraceSectionMetricper ignorare le sezioni non finali. In precedenza, si considerava che avessero una durata pari a -1, ad esempio durante la somma o la ricerca della durata minima. (If74b7) - Risolto un problema in
FrameTimingGfxInfoMetricper 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 è stato rilasciato. La versione 1.3.0 contiene questi commit.
Modifiche ai 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, sia le misurazioni accurate sia le tracce dei metodi vengono generate da un'unica esecuzione del benchmark
- Il tracciamento dei metodi su alcune versioni del sistema operativo Android e di ART influirà sulle fasi di misurazione successive. Su 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
- Aggiunto
measureRepeatedOnMainThreadper i benchmark dei thread dell'interfaccia utente (ad esempio quelli che interagiscono con le UI di Compose/View) per evitare ANR durante l'esecuzione per molti secondi. - Le tracce metodo vengono ignorate se è previsto che superino la scadenza per evitare gli errori ANR. Imposta
androidx.benchmark.profiling.skipWhenDurationRisksAnrsu false per disattivare questo comportamento (non consigliato per le esecuzioni CI, in quanto gli errori ANR possono causare problemi nelle esecuzioni CI lunghe).
- Aggiunto
- Minificazione
- 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 attivata tramite
android.buildTypes.release.androidTest.enableMinificationinbuild.gradle - È stata aggiunta l'API sperimentale
BlackHole.consume()per impedire l'eliminazione del codice non utilizzato (If6812, b/286091643)
- Metriche
- Funzionalità sperimentale del contatore di eventi della CPU (metriche da
perf_event_open, che richiede l'accesso root sulla maggior parte delle versioni della piattaforma), accesso tramiteInstrumentationArgumentandroidx.benchmark.cpuEventCounter.enable(può essere impostato sutrue) eandroidx.benchmark.cpuEventCounter.eventspuò 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
- Funzionalità sperimentale del contatore di eventi della CPU (metriche da
Modifiche ai MACRObenchmark dalla versione 1.2.0
- Revisione del tracciamento dei metodi per i macrobenchmark.
- Ora le tracce metodo sono limitate alla durata di
measureBlocke possono acquisire più sessioni se il processo viene avviato più volte. - In precedenza, la traccia dei metodi funzionava solo per i benchmark
StartupMode.COLDe non acquisiva nulla permeasureBlocksche non riavviava il processo di destinazione - È stato corretto lo svuotamento delle tracce metodo in Macrobenchmark, in modo che le tracce metodo vengano acquisite completamente e siano valide, anche su dispositivi più lenti. (I6349a, b/329904950)
- Ora le tracce metodo sono limitate alla durata di
- Esegui correttamente il dump del profilo ART durante le singole iterazioni di
warmUpquando il processo viene interrotto, in modo che le misurazioni diCompilationMode.Partial(warmup=N)siano più accurate. (I17923) - Messaggio di errore di trasmissione di Drop Shader
- Aggiunti suggerimenti per il debug al messaggio di errore di trasmissione dello shader di rilascio
- Aggiungi due argomenti di instrumentazione per eseguire l'override del comportamento di eliminazione degli shader per risolvere i problemi di arresto anomalo durante il benchmarking delle app senza
ProfileInstaller1.3:androidx.benchmark.dropShaders.enable=true/false: può essere utilizzato per saltare l'eliminazione di tutti gli shader (incluso quello eseguito nei lanci diStartupMode.Cold), in particolare durante il benchmarking di app che non utilizzano ancora profileinstaller 1.3androidx.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#measureRepeatedche accetta unPerfettoConfigpersonalizzato 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 affinché l'applicazione target esegua il flush di un profilo ART (in precedenza attendeva 500 ms). (I85a50, b/316082056)
- Revisione di TraceSectionMetric
- Nota: le modifiche a
TraceSectionMetricriportate di seguito possono influire sugli output nell'utilizzo di CI e possono creare discontinuità o interrompere l'analisi - La somma è ora l'impostazione predefinita, poiché la maggior parte degli utilizzi di questa metrica riguarda eventi ricorrenti 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.
- Nota: le modifiche a
- Metriche
- Power - Added
PowerMetric.deviceSupportsHighPrecisionTracking,PowerMetric.deviceBatteryHasMinimumCharge()andPowerMetric.deviceSupportsPowerEnergy() - Rinominato
Metric.getResultingetMeasurementsper corrispondere al tipo restituito - Aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento dell'avvio. Ciò non modifica il comportamento attuale (quindi alcuni errori vengono generati e altri non riescono a rilevare l'avvio senza messaggi), ma lo rende più comprensibile. In genere, quelli che
Log.w()e non riescono a segnalare le metriche di avvio sono quelli in cui mancano eventi non frame, vengono generate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sulla durata frame (da sezioni UI/RT). (Id240f, b/329145809) - È stata aggiunta la misurazione
frameCountaFrameTimingMetricper facilitare il rilevamento di scenari in cui le misurazioni cambiano perché il numero di frame prodotti è cambiato (sono state aggiunte nuove animazioni, sono stati risolti i problemi di annullamento della convalida). (I1e5aa) - È stato chiarito che
frameOverrunMsè la metrica preferita per il monitoraggio quando disponibile nei documenti e perché. (I18749, b/329478323) - Risolve un 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
FrameTimingMetricquando i frame non vengono prodotti e restituisci sempre il link alla traccia quando l'analisi della metrica non va a buon fine per facilitare la diagnosi del problema. (I956b9) - Risolto un arresto anomalo in
FrameTimingMetricche non riusciva ad analizzare l'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276) - È stata ridotta la severità dei controlli in
FrameMetricse sono stati aggiunti ulteriori dettagli ai messaggi di errore. (Iadede)
- Power - Added
Acquisizione del profilo di base / modifiche al plug-in Gradle dalla versione 1.2.0
- La versione massima consigliata di AGP è stata aumentata a 9.0.0-alpha01.
- Assicurati che le attività
mergeArtProfileemergeStartupProfileattendano sempre la generazione del profilo di riferimento. (I623d6, b/343086054) - La generazione di un profilo di riferimento genera un riepilogo delle modifiche (I824c8, b/269484510)
- È stato aggiunto il DSL per disattivare gli avvisi (Ic4deb, b/331237001)
- Correzione per garantire che i benchmark utilizzino i profili di baseline generati quando
automaticGenerationDuringBuildè disattivato (Ic144f, b/333024280) - Correzione delle sostituzioni delle proprietà del plug-in Gradle
BaselineProfileper abilitare la generazione del profilo di riferimento e il benchmarking durante la personalizzazione di un tipo di buildnonMinifiedo di benchmark. (Ib8f05, b/324837887) - Correzione per l'inclusione dei profili di baseline della libreria in AAR prima di AGP 8.3.0-alpha15. (I1d2af, b/313992099)
- È stato corretto l'URL di output del profilo di base e di avvio alla fine dell'attività di generazione. (I802e5, b/313976958)
Altre modifiche significative rispetto alla versione 1.2.0
- Acquisizione di tracce
- Riduzione dell'errore EXITCODE 2 durante l'avvio di perfetto da un errore a un avviso registrato
- Abilita il tracciamento AIDL per impostazione predefinita nei benchmark(richiede l'API 28) (Ia0af2, b/341852305)
- Abilita il tracciamento dei tag porter per impostazione predefinita nei benchmark. In questo modo vengono acquisiti, ad esempio, i punti di traccia wakelock. (Icfe44, b/286551983)
- È stato aumentato il timeout di avvio dell'acquisizione della traccia per evitare arresti anomali durante l'avvio del tracciamento su dispositivi più lenti (I98841, b/329145808)
- Sono state aggiunte le API pubbliche
PerfettoTraceProcessor.Session.queryMetricscon varianti JSON, textproto e proto binario (non decodificato). Questi ti consentono di eseguire query sulle metriche integrate inTraceProcessor(I54d7f, b/304038382) - Attiva l'avvio del blocco sul record di traccia Perfetto per ridurre il rischio di perdita di dati all'inizio della traccia. Supportato solo su API 33+. (Ie6e41, b/310760059)
- Output JSON
- Sono state aggiunte informazioni aggiuntive nel contesto del benchmark nell'output JSON:
context.artMainlineVersion: versione intera del modulo principale Art (se presente sul dispositivo, altrimenti-1)context.build.id- Equals android.os.Build.IDcontext.build.version.codename- Equals android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename: corrisponde alla prima lettera del nome in codice della pre-release (anche nelle build di release) (Ie5020)
- È stato aggiunto l'elenco
profilerOutputall'output JSON per semplificare l'utilizzo degli strumenti per le tracce di profilazione (ad es. Perfetto, tracce metodo) (I05ddd, b/332604449) - È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, in quanto ciò causerà la sovrascrittura ripetuta dei file JSON di output per modulo. (Ia1af6, b/286899049)
- Genera un errore quando i nomi file sono più lunghi di 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione dei file. (I4a5ab)
- Sono state aggiunte informazioni aggiuntive nel contesto del benchmark nell'output JSON:
Versione 1.3.0-rc01
7 agosto 2024
androidx.benchmark:benchmark-*:1.3.0-rc01 è stato rilasciato. La versione 1.3.0-rc01 contiene questi commit.
Correzioni di bug
- È stato corretto
androidx.benchmark.cpuEventCounterche produceva valori danneggiati per gli eventi non di istruzione (I7386a, b/286306579) - Correzione di
resumeTiming/runWithTimingDisabledper 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 strumentazionecpuEventCounter.enable, timeNs non viene più ridotto in modo significativo quando si verifica la pausa/il ripristino. (I39c2e, b/286306579, b/307445225) - Riduzione della probabilità che il campionamento dello stack causi
measureRepeatedOnMainThreaddi raggiungere il timeout hard del thread principale spostando la conversione del campionamento dello stack dal thread principale. (I487a8, b/342237318) - È stata rimossa la definizione manuale dell'accesso alle nuove API della piattaforma, poiché 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). Ai clienti che non utilizzano AGP consigliamo di eseguire l'aggiornamento a D8 versione 8.1 o successive. Consulta questo articolo per ulteriori dettagli. (I9496c, b/345472586)
- Aggiunto il controllo della versione AGP per inviare il nome del pacchetto come argomento di strumentazione. Prima di AGP 8.4.0, il nome del pacchetto applicativo di destinazione non poteva 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 è stato rilasciato. La versione 1.3.0-beta02 contiene questi commit.
Correzioni di bug
- Gestisci correttamente EXITCODE
2all'avvio di Perfetto per registrare un avviso, ma procedi.
Versione 1.3.0-beta01
12 giugno 2024
androidx.benchmark:benchmark-*:1.3.0-beta01 è stato rilasciato. La versione 1.3.0-beta01 contiene questi commit.
Modifiche alle API
MethodTracing.affectsMeasurementOnThisDeviceè stato rinominato inAFFECTS_MEASUREMENT_ON_THIS_DEVICEper coerenza. (I1bdfa)- È stata aggiunta l'API sperimentale
BlackHole.consume()per impedire l'eliminazione del codice non utilizzato nei microbenchmark. (If6812, b/286091643) - Microbenchmark ora genererà correttamente un errore per impedire che la traccia 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 tramiteProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864)
Correzioni di bug
- La versione massima di AGP consigliata è stata aggiornata alla 9.0.0-alpha01. (I5bbb0)
- È stata aggiunta la modalità di compilazione al contesto del benchmark (If5612, b/325512900)
- Attiva la tracciabilità 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- integer version of Art mainline module (if present on device, -1 otherwise)context.build.id- Uguale aandroid.os.Build.IDcontext.build.version.codename- Uguale aandroid.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename: corrisponde alla prima lettera del nome in codice della pre-release (anche nelle build di release) (Ie5020)
- Correzioni di
StackSamplingper rispettareandroidx.benchmark.profiling.sampleDurationSeconds(Ib1d53) - Modifica la dipendenza macro->comune in modo che sia
api(), in modo che sia più facile utilizzare, ad esempio,PerfettoTraceePerfettoConfig. (Icdae3, b/341851833) - Assicurati che le attività
mergeArtProfileemergeStartupProfileattendano sempre la generazione del profilo di base. (I623d6, b/343086054) - Considera lo stato di attivazione della variante quando decidi se attivarla. (I5d19e, b/343249144)
- Aumentato il 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 è stato rilasciato. 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 è stato rilasciato. La versione 1.3.0-alpha04 contiene questi commit.
Modifiche alle API
- È stata aggiunta la variante sperimentale
MacrobenchmarkRule#measureRepeated, che accetta unPerfettoConfigpersonalizzato per la registrazione di tracce Perfetto completamente personalizzate. Tieni presente che le configurazioni non configurate correttamente potrebbero causare l'errore delle classi di metriche integrate. (Idfd3d, b/309841164, b/304038384) - Rinomina
PowerMetric.deviceSupportsPowerEnergyinPowerMetric.deviceSupportsHighPrecisionTrackingper maggiore chiarezza (I5b82f) - Sono stati aggiunti
PowerMetric.deviceBatteryHasMinimumCharge()ePowerMetric.deviceSupportsPowerEnergy()per consentire la modifica o l'omissione dei benchmark in base alla funzionalità di misurazione della potenza del dispositivo. (I6a591, b/322121218)
Correzioni di bug
- È stato aggiunto il confronto con il profilo di baseline precedente (I824c8, b/269484510)
- È stato aggiunto DSL per disattivare gli avvisi (Ic4deb, b/331237001)
- È stata modificata l'eccezione nel log delle informazioni quando le varianti di benchmark sono disattivate (I8a517, b/332772491)
- Semplifica l'acquisizione delle tracce metodo per un macrobenchmark limitato alla durata del
measureBlock()effettivo. In precedenza, veniva avviato al lancio del processo di destinazione e supportava solo gli avvii a freddo (Iee85a, b/300651094) - Evita gli arresti anomali quando il processore di tracce Perfetto è lento ad avviarsi (I98841, b/329145808)
Versione 1.3.0-alpha03
17 aprile 2024
androidx.benchmark:benchmark-*:1.3.0-alpha03 è stato rilasciato. La versione 1.3.0-alpha03 contiene questi commit.
Nuove funzionalità
- Aggiunge API
PerfettoTraceProcessor.Session.queryMetricsdell'API pubblica con varianti JSON, textproto e proto binarie (non decodificate). Questi ti consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382) - È stato aggiunto
profilerOutputall'output JSON per semplificare l'utilizzo degli strumenti per le tracce di profilazione (ad es. perfetto, tracce dei metodi). (I05ddd, b/332604449) - Aggiunta del tag di alimentazione alla configurazione di benchmark Perfetto. In questo modo vengono acquisiti, ad esempio, i tracepoint dei 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 dei metodi quando la durata prevista potrebbe causare un errore ANR. È consigliabile evitare di impostarlo su true nelle esecuzioni di integrazione continua. - È stato aggiunto l'argomento sperimentale inst
androidx.benchmark.profiling.perfCompare.enable, impostato 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
TraceSectionMetric.Modein classe sealed per consentire l'espansione futura senza interrompere le istruzioni when esaustive (I71f7b) - Sono stati aggiunti
TraceSectionMetric.Mode.Averagee.Counte gli argomenti sono stati riordinati in modo che l'argomento più comune (modalità) si trovi prima nell'elenco degli argomenti, riducendo la necessità di specificare i nomi dei parametri. (Ibf0b0, b/315830077, b/322167531) Metric.getResultè stato rinominato ingetMeasurementsin modo che corrisponda al tipo restituito (I42595)
Correzioni di bug
- Correzione per garantire che i benchmark utilizzino i profili di riferimento generati quando
automaticGenerationDuringBuildè disattivato (Ic144f, b/333024280) - Correzione degli override delle proprietà del plug-in
BaselineProfileGradle per abilitare la generazione e il benchmarking del profilo di base durante la personalizzazione di un tipo di buildnonMinifiedo di benchmark. (Ib8f05, b/324837887) - Le tracce metodo fisse vengono svuotate in Macrobenchmark, in modo che le tracce metodo vengano acquisite e siano valide, anche su dispositivi più lenti. (I6349a, b/329904950)
- Attiva l'avvio del blocco sul record di traccia Perfetto per ridurre il rischio di perdita di 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, poiché ciò causerà la sovrascrittura ripetuta dei file JSON di output per modulo. (Ia1af6, b/286899049)
- Forza l'utilizzo della virgola (",") come separatore per le migliaia per garantire la coerenza nell'output di Studio, ignorando le impostazioni internazionali del dispositivo (I3e921, b/313496656)
TraceSectionMetricora supporta le sezioni create utilizzandoTrace.{begin|end}AsyncSection. (I91b32, b/300434906)- Aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento dell'avvio. Ciò non modifica il comportamento attuale (quindi alcuni errori vengono generati e altri non riescono a rilevare l'avvio), ma lo rende più comprensibile. In genere, quelli che
Log.w()e non riescono a segnalare le metriche di avvio sono quelli in cui mancano eventi non frame, vengono generate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sulla durata 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
frameCountaFrameTimingMetricper 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) - Chiarito che
frameOverrunMsè la metrica preferita per il monitoraggio quando è disponibile nei documenti e perché. (I18749, b/329478323)
Versione 1.3.0-alpha02
20 marzo 2024
androidx.benchmark:benchmark-*:1.3.0-alpha02 è stato rilasciato. La versione 1.3.0-alpha02 contiene questi commit.
Nuove funzionalità
Supporto sperimentale di R8 nel microbenchmark tramite regole Proguard incorporate. Tieni presente che questo supporto è sperimentale e richiede AGP 8.3 per la minimizzazione dei test dei moduli della libreria. Utilizza quanto segue per attivare la minimizzazione/ottimizzazione R8 nel file
build.gradledel modulo 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 del microbenchmark. (I0455c, b/328308833)
Versione 1.3.0-alpha01
21 febbraio 2024
androidx.benchmark:benchmark-*:1.3.0-alpha01 è stato rilasciato. La versione 1.3.0-alpha01 contiene questi commit.
Modifiche alle API
- Rinominati
MicrobenchmarkConfigparametri booleani per evitare la parola non necessaria "should" (Ia8f00, b/303387299) - È stato aggiunto
BenchmarkRule.measureRepeatedOnMainThreadin modo che i benchmark del thread principale (ad esempio quelli che toccano le UI di Views o Compose) possano evitare di attivare gli ANR, soprattutto durante suite di grandi dimensioni in CI. (I5c86d) - È stato aggiunto
FrameTimingGfxInfoMetric, un'implementazione alternativa sperimentale diFrameTimingMetriccon misurazioni provenienti direttamente dalla piattaforma, anziché estratte dalla traccia Perfetto. (I457cb, b/322232828) - Aggiungi la possibilità di eseguire il dump di 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 eseguire l'override del nome della sezione come etichetta della metrica
- Aggiunto il nome della modalità all'output per chiarire il significato della metrica
- Il valore predefinito è stato modificato in somma, poiché la maggior parte dell'utilizzo di questa metrica riguarda eventi ricorrenti. Tieni presente queste modifiche nell'utilizzo di CI, in quanto potrebbero creare discontinuità o interrompere l'analisi. (Ic1e82, b/301892382, b/301955938)
- Aggiungi
Correzioni di bug
- Messaggio di errore migliorato 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 baseline della libreria in AAR prima di AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- È stato corretto l'URL di output del profilo di riferimento e di avvio alla fine dell'attività di generazione (I802e5, b/313976958)
- Sono stati modificati i timeout delle origini dati per tentare di correggere
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 aggirare gli arresti anomali durante il benchmarking delle app senza
ProfileInstaller1.3:androidx.benchmark.dropShaders.enable=true/false: può essere utilizzato per saltare tutti i rilasci di shader (inclusi quelli eseguiti nei lanci diStartupMode.Cold), in particolare durante il benchmarking di app che non utilizzano ancora ProfileInstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false: può essere utilizzato per tollerare gli errori durante il tentativo di eliminare gli shader, ad esempio durante il benchmarking di app senza profileinstaller 1.3 (I4f573)
- Salta la traccia metodo sul thread dell'interfaccia utente quando è previsto che richieda più di qualche secondo ed esegui la pulizia delle tracce metodo durante la generazione dell'eccezione. (I6e768)
- Genera un errore quando i nomi 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 avrebbe generato un report errato come un singolo frame estremamente lungo. (I39353, b/322232828)
- Utilizza
--skip verificationsull'API 30+ quando reinstalli un pacchetto sull'API 30-33 per cancellare i profili ART sulle build utente. In questo modo, vengono ignorati gli avvisi di Play Protect che causano errori su alcune classi di dispositivi. (Ic9e36) - Utilizza
am force-stopper terminare le app quando non si tratta di un'app di sistema come UI di sistema o Avvio app. (I5e028) - Ora Macrobenchmark attende
1 secondprima che l'applicazione di destinazione scarichi un profilo ART (in precedenza attendeva500 ms). (I85a50, b/316082056) - Migliora l'errore
FrameTimingMetricquando non vengono prodotti frame e restituisci sempre il link alla traccia quando l'analisi delle metriche non va a buon fine per facilitare la diagnosi del problema. (I956b9) - È stato risolto un arresto anomalo in
FrameTimingMetricche non riusciva ad analizzare l'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276) - È stata ridotta la severità dei controlli in
FrameMetricse 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 è stato rilasciato. La versione 1.2.4 contiene questi commit.
Correzioni di bug
- Corregge il problema per cui srcset del profilo di base non viene configurato nelle varianti di benchmark. Risolve anche il problema di
automaticGenerationDuringBuildnelle librerie che causano una dipendenza circolare. (I28ab7, b/333024280) - Utilizza
am force-stopper terminare le app quando non si tratta di un'app di sistema come UI di sistema o Avvio app. In questo modo, viene risolto l'arresto anomalo dei benchmarkStartupMode.COLDcausato dall'errore "Package $package must not be running prior to cold start!" (Il pacchetto $package non deve essere in esecuzione prima dell'avvio a freddo) dovuto al fatto che l'interruzione del processo non è andata a buon fine. (I5e028)
Versione 1.2.3
24 gennaio 2024
androidx.benchmark:benchmark-*:1.2.3 è stato rilasciato. La versione 1.2.3 contiene questi commit.
Correzioni di bug
- È stata rimossa l'eccezione dal plug-in Gradle del profilo di baseline quando la versione AGP è 8.3.0 o successiva.
- Correzione per l'inclusione dei profili di baseline della libreria in AAR prima di AGP 8.3.0-alpha15.
Versione 1.2.2
1° dicembre 2023
androidx.benchmark:benchmark-*:1.2.2 è stato rilasciato. La versione 1.2.2 contiene questi commit.
Profili di baseline
- I log di esecuzione mostreranno il percorso del file di output del profilo di baseline come URI del file locale (aosp/2843918, aosp/2853665, b/313976958)
Versione 1.2.1
15 novembre 2023
androidx.benchmark:benchmark-*:1.2.1 è stato rilasciato. 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 dei test di AS (b/309805233), (b/309116324)
Versione 1.2.0
18 ottobre 2023
androidx.benchmark:benchmark-*:1.2.0 è stato rilasciato. 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.collectora stabile, una versione semplificata e ottimizzata della precedente APIBaselineProfileRule.collectBaselineProfilesperimentale- Basta specificare
packageNamee guidare l'app
- Basta specificare
- 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
- È stata corretta la raccolta dei profili di baseline su Android U+ (Id1392, b/277645214)
Macrobenchmark
- Compilation
- Macrobenchmark ora reimposta correttamente lo stato di compilazione per ogni compilazione. Ciò richiede la reinstallazione dell'APK prima di Android 14, pertanto è vivamente consigliato eseguire il benchmark su Android 14 e versioni successive se vuoi rendere persistente lo stato (come l'accesso utente) in ciò che viene misurato.
- Puoi anche aggirare il problema controllando la compilazione dell'app separatamente e saltando la compilazione con
CompilationMode.Ignore()o argomento di strumentazione
Argomenti di strumentazione
- Supporto per l'argomento di strumentazione
androidx.benchmark.dryRunMode.enable(già disponibile in microbenchmark) per esecuzioni di convalida più rapide (ad es. durante la creazione del benchmark o in fase di pre-invio) - Supporto per
androidx.benchmark.profiling.mode=StackSamplingeMethodTracing. - Aggiunto
androidx.benchmark.enabledRulesper consentire i test delle regole di macrobenchmark rispetto al profilo di baseline di filtro di runtime - Aggiunto l'argomento
androidx.benchmark.perfettoSdkTracing.enableper abilitare il tracciamento con tracing-perfetto, ad esempio il tracciamento della ricomposizione di Compose. Tieni presente che, se utilizzato conStartupMode.COLD, le tempistiche saranno notevolmente influenzate, poiché la libreria di tracciamento viene caricata e abilitata durante l'avvio dell'app.
- Supporto per l'argomento di strumentazione
Requisiti
- Macrobenchmark ora richiede
ProfileInstaller1.3.0 o versioni successive nell'app di destinazione per attivare l'acquisizione / il ripristino del profilo e la cancellazione della cache degli shader.
- Macrobenchmark ora richiede
Nuove API Metrics sperimentali
- Aggiunta la classe sperimentale
TraceSectionMetric, che consente di estrarre semplici informazioni di temporizzazione dai blocchitrace("") {}nell'app, o TraceMetric per sfruttare l'intera funzionalità di query di PerfettoTraceProcessor. - Aggiunta l'opzione sperimentale
PowerMetricper acquisire informazioni sull'utilizzo dell'alimentazione - Aggiunta la funzionalità sperimentale
MemoryCountersMetricper conteggiare gli errori di pagina - È stata aggiunta l'API sperimentale
PerfettoTraceProcessor, che viene utilizzata internamente per estrarre le metriche dalle tracce di sistema (ovvero le tracce Perfetto)
- Aggiunta la classe sperimentale
Correzioni
- Sono stati corretti gli arresti anomali durante l'installazione o l'estrazione dei profili da un'app installata da più APK (ad es. da un app bundle).
- È stato corretto
FrameTimingMetricche ignorava i frame con ID frame incoerenti (in genere, i frame durante i ripple su API 31+) (I747d2, b/279088460) - Risolti gli errori di analisi sulle tracce > 64 MB (Ief831, b/269949822)
- Chiariti gli errori quando l'immagine sistema operativo del dispositivo (soprattutto l'emulatore) non è configurata correttamente per il tracciamento o la compilazione
- Salta 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
- Stabilità migliorata di
StartupMode.COLDeliminando costantemente la cache degli shader (esposta anche tramiteMacrobenchmarkScope.dropShaderCache) - Corretto il problema relativo al fallback di Leanback per
startActivityAndWait.
Microbenchmark
- Funzionalità
- La profilazione è stata spostata in una fase separata, dopo le altre metriche, in modo che un'esecuzione di test possa mostrare sia risultati di temporizzazione accurati sia di profilazione.
- API sperimentali
- È stata aggiunta l'API sperimentale
MicrobenchmarkConfigper 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
BenchmarkStateseparatamente daBenchmarkRule, senza JUnit - Aggiunto il record sperimentale
PerfettoTraceper consentire l'acquisizione di tracce Perfetto, con configurazione personalizzata, separate dalle API di benchmark.
- È stata aggiunta l'API sperimentale
- Correzioni
- Soluzione alternativa per gli spazi vuoti iniziali mancanti nell'output del benchmark di Android Studio.
- Risolto il problema per cui gli avvisi non venivano stampati nell'output del benchmark di Android Studio.
- È stato corretto l'arresto anomalo di
SampledProfilingsu Android 13 (API 33) e versioni successive. - Prestazioni notevolmente migliorate di
dryRunModegrazie all'omissione diIsolationActivitye della tracciatura Perfetto (modalità dry run fino a 10 volte più veloce nelle versioni precedenti del sistema operativo).
Versione 1.2.0-rc02
6 ottobre 2023
androidx.benchmark:benchmark-*:1.2.0-rc02 è stato rilasciato. La versione 1.2.0-rc02 contiene questi commit.
Correzioni di bug
- Corretto l'output del file di benchmark in modo che non interrompa più la copia dei file del plug-in
BaselineProfile. 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-perfettodurante l'inserimento dal modulo macrobenchmark nell'applicazione di destinazione.
Versione 1.2.0-rc01
20 settembre 2023
androidx.benchmark:benchmark-*:1.2.0-rc01 è stato rilasciato. 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)
- Risolto l'arresto anomalo per memoria esaurita durante la conversione della traccia metodo ART nel formato Perfetto. (I106bd, b/296905344)
- (Macrobenchmark) È stata chiarita l'etichetta di traccia metodo quando è collegata nell'output di test di Studio e sono stati corretti i nomi file di traccia 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 riferimento. (I503fc)
Versione 1.2.0-beta05
30 agosto 2023
androidx.benchmark:benchmark-*:1.2.0-beta05 è stato rilasciato. La versione 1.2.0-beta05 contiene questi commit.
Nuove funzionalità
- Il plug-in Gradle per il profilo di baseline ora supporta il plug-in Android per Gradle 8.3. (aosp/2715214)
Versione 1.2.0-beta04
23 agosto 2023
androidx.benchmark:benchmark-*:1.2.0-beta04 è stato rilasciato. La versione 1.2.0-beta04 contiene questi commit.
Nuove funzionalità
- Il plug-in Gradle per i profili di base 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 è stato rilasciato. La versione 1.2.0-beta03 contiene questi commit.
Modifiche alle API
- È stato aggiunto un argomento per filtrare
TraceSectionMetricsolo in base al pacchetto di destinazione, attivato per impostazione predefinita (Ia219b, b/292208786)
Correzioni di bug
- L'argomento di strumentazione
fullTracing.enableè stato rinominato inperfettoSdkTracing.enableper coerenza con il nome dell'artefatto e altri riferimenti.fullTracing.enablecontinuerà a funzionare come opzione di riserva. (I7cc00) - I punti di traccia interni della libreria Benchmark (incluso il tracciamento di loop/fasi di microbenchmark) verranno ora visualizzati nel visualizzatore di tracciamento del sistema di Studio e 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 utilizzi le ottimizzazioni del layout Dex, anche le regole del profilo di avvio vengono considerate regole del profilo di baseline. (aosp/2684246, b/293889189)
Versione 1.2.0-beta02
26 luglio 2023
androidx.benchmark:benchmark-*:1.2.0-beta02 è stato rilasciato. La versione 1.2.0-beta02 contiene questi commit.
Modifiche alle API
- Sono state aggiunte API sperimentali per la configurazione e le metriche personalizzate di microbench (ad es. profiler e tracciamento). (I86101, b/291820856)
Correzioni di bug
- Segnala l'errore in macrobenchmark quando il sistema operativo è configurato in modo errato per la tracciabilità, come è stato recentemente corretto negli emulatori ARM64 API 26/28. (I0a328, b/282191686)
- Sono stati aggiunti dettagli all'errore di reimpostazione della compilazione per suggerire l'aggiornamento dell'emulatore, poiché alcuni emulatori hanno recentemente risolto questo problema. (I8c815, b/282191686)
- Rendi
androidx.test.uiautomator:uiautomator:2.2.0unapianziché una dipendenzaimplementation. (I1981e)
Versione 1.2.0-beta01
18 luglio 2023
androidx.benchmark:benchmark-*:1.2.0-beta01 è stato rilasciato. 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 fisso per
FrameTimingMetric. La metrica secondaria è denominataframeDurationCpuMs. (Ib097f, b/288830934).
Versione 1.2.0-alpha16
21 giu 2023
androidx.benchmark:benchmark-*:1.2.0-alpha16 è stato rilasciato. La versione 1.2.0-alpha16 contiene questi commit.
Modifiche alle API
- L'API
BaselineProfileRule.collectBaselineProfile()è stata rinominata inBaselineProfileRule.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
MethodTracingnella traccia Perfetto acquisita. (I9f657, b/285014599) - Aggiungi la misurazione del conteggio a
TraceSectionMetricconMode.Sum. (Ic121a, b/264398606)
Versione 1.2.0-alpha15
7 giugno 2023
androidx.benchmark:benchmark-*:1.2.0-alpha15 è stato rilasciato. La versione 1.2.0-alpha15 contiene questi commit.
Nuove funzionalità
- Aggiunto
MemoryUsageMetricsperimentale per monitorare l'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
collectBaselineProfilegenera sempre profili di baseline stabili. L'APIcollectStableBaselineProfileè stata rimossa e al suo posto deve essere utilizzatacollectBaselineProfile. (I17262, b/281078707) - L'argomento
filterPredicatediBaselineProfileRuleè stato modificato 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
IsolationActivitye la tracciatura Perfetto indryRunModeper migliorare significativamente il rendimento, poiché costituivano 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=StackSamplingeandroidx.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 è stato rilasciato. La versione 1.2.0-alpha14 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui
FrameTimingMetricignorava i frame con ID frame incoerenti. In questo modo, alcune animazioni sulle versioni recenti della piattaforma (API 31+) ignorerebbero molti frame durante l'animazione diRenderThread(ad es. durante un'increspatura). (I747d2, b/279088460) - Risolto il problema di 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 del 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 è stato rilasciato. 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 baseline per supportare la funzionalità dei profili di avvio in arrivo. (Ie20d7, b/275093123)
- È stata aggiunta una nuova API
TraceMetricsperimentale 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 è stato rilasciato. 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
PerfettoTracesperimentali. Prima di questa versione, le connessioniUiAutomationnon erano affidabili su alcuni dispositivi. (I78e8c) - È stata aggiunta un'API sperimentale pubblica per
PerfettoTraceProcessorper consentire l'analisi del contenuto della 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 è stato rilasciato. La versione 1.2.0-alpha11 contiene questi commit.
Correzioni di bug
- Sono stati corretti gli arresti anomali in
MacrobenchmarkRuleeBaselineProfileRuledurante 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 è stato rilasciato. 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 disporre di un dispositivo rooted o gestire la rimozione di tutti gli stati dell'applicazione (ad es. l'accesso dell'utente) prima di ogni esecuzione del benchmark. (I9b08c, b/249143766)
Correzioni di bug
- Correzione di
DryRunModeper 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) - È stato corretto l'arresto anomalo di
PowerMetricdurante 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 è stato rilasciato. La versione 1.2.0-alpha09 contiene questi commit.
Correzioni di bug
- È stato attivato il passaggio di
Noneall'argomento di strumentazioneandroidx.benchmark.enabledRulesper disattivare tutti i benchmark / la generazione di profili di riferimento. (I3d7fd, b/258671856) - Correzione dell'acquisizione di
PerfettoTracenei moduli dell'app (ad es. APK di test non autoinstrumentati) (I12cfc) - È stato corretto l'ordine degli argomenti di pull adb del profilo di base fisso nell'output di Studio (I958d1, b/261781624)
- L'API dell'emulatore Arm 33 ora viene riconosciuta correttamente come tale quando si tenta di eseguire un macrobenchmark e stampa correttamente l'avviso. (69133b,b/262209591)
- Salta il controllo del livello 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 è stato rilasciato. La versione 1.2.0-alpha08 contiene questi commit.
Modifiche alle API
- Sono state aggiunte nuove API sperimentali
PerfettoTrace.record {}ePerfettoTraceRuleper acquisire tracce Perfetto (note anche come tracce di sistema) nell'ambito di un test, per ispezionare il comportamento e le prestazioni del test. (I3ba16) BaselineProfileRuleora accetta un predicato di filtro anziché un elenco di prefissi di pacchetti. In questo modo, il test ha il pieno controllo sul filtro. (I93240)- Aggiungi un'API sperimentale
BaselineProfileRule.collectStableBaselineProfileche attende che un profilo di riferimento sia stabile per N iterazioni. (I923f3) - Aggiungi la possibilità di specificare un prefisso del nome file di output durante la generazione dei profili di base utilizzando
BaselineProfileRule. (I7b59f, b/260318655)
Correzioni di bug
- Miglioramento della sicurezza della scrittura dei file di output, che dovrebbe impedire che i file di output non vengano scritti / aggiunti in modo silenzioso, in particolare nell'API 21/22. (If8c44, b/227510293)
- Correggi l'uscita della traccia
simpleperfper creare e posizionare correttamente il file. In questo modo, dovrebbero essere risolti anche i problemi più generali relativi al recupero 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 riferimento sulle API da 31 a 33, anziché indicare che non sono supportati. (Ia517f, b/253519888)
- Sono stati corretti diversi errori dei comandi shell nel messaggio onerror Stampa API necessaria <=23, tra cui la configurazione binaria di acquisizione di Perfetto non riuscita e gli errori di acquisizione della traccia (Ib6b87, b/258863685)
- Ordina automaticamente le regole del profilo generate per ridurre al minimo il numero di modifiche nel tempo (quando si esegue il check-in delle regole del profilo nel controllo del codice sorgente). (Ie2509)
- È stato corretto l'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 è stato ancora 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 è stato rilasciato. La versione 1.2.0-alpha07 contiene questi commit.
Modifiche alle API
- Aggiunge l'API
PowerMetricper misurare l'energia e la potenza in Macrobenchmark. (Ife601, b/220183779) - Risolto il problema di
MacrobenchmarkScope.dropShaderCache()per eliminare effettivamente la cache dello shader. In questo modo, vengono rimossi circa 20 ms di rumore dai benchmarkStartupMode.COLD, poiché gli shader vengono ora cancellati in modo coerente a ogni iterazione. In precedenza, la compilazione diPartialcon iterazioni di warmup riportava numeri erroneamente rapidi, poiché la memorizzazione nella cache degli shader era più probabile che avvenisse durante il warmup. Questa correzione richiede un dispositivo rooted o l'utilizzo diprofileinstaller:1.3.0-alpha02nell'app di destinazione. Per le modifiche all'API della libreriaProfileInstaller, consulta la pagina ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) - Aggiunta di
TraceSectionMode("label", Mode.Sum), che consente di misurare il tempo totale trascorso su più sezioni di traccia con la stessa etichetta. Ad esempio,TraceSectionMetric("inflate", Mode.Sum)genererà un report sulla metricainflateMsper il tempo totale in un macrobenchmark dedicato all'inflazione. È stato rimosso anche il requisito dell'API 29, poichéTraceSectionMetricfunziona insieme aandroidx.tracing.Tracecon livelli API inferiori, con l'utilizzo diforceEnableAppTracingall'interno dell'app di destinazione. (Id7b68, b/231455742)
Correzioni di bug
- Miglioramento della sicurezza di tutti i comandi della shell interna convalidando tutti gli output/errori. (I5984d, b/255402908, b/253094958)
- Specifica il dispositivo nel comando
adb pulldel 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 del macrobenchmark non è configurato come autostrumentale. Questo errore impedisce il macrobenchmarking dall'interno del processo dell'app di destinazione. In questo processo, macrobench non sarebbe in grado di compilare/terminare/avviare a freddo l'app o controllare le proprie autorizzazioni (I4279b).
- Risolto un problema in
measureRepeated()per cuiStartupMode.COLDnon terminava il processo di destinazione doposetupBlock. Ora,setupBlockl'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 è stato rilasciato. La versione 1.2.0-alpha06 contiene questi commit.
Modifiche alle API
BaselineProfileRulenon richiede più l'accesso root su Android 13 (API 33) e non è più sperimentale. (Ie0a7d, b/250083467, b/253094958)- Questa modifica corregge anche il modo in cui i profili di un'app vengono scaricati su disco sui dispositivi non rooted, ma richiede l'aggiornamento della dipendenza profileinstaller dell'app di destinazione.
- Per utilizzare
BaselineProfileRuleoCompilationMode.Partial(warmupIterations)su un dispositivo senza root, devi anche aggiornare l'app di destinazione in modo che utilizziandroidx.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
- Corregge l'arresto anomalo di
SampledProfilingnell'API 33 e versioni successive. (I40743, b/236109374)
Versione 1.2.0-alpha05
5 ottobre 2022
androidx.benchmark:benchmark-*:1.2.0-alpha05 è stato rilasciato. La versione 1.2.0-alpha05 contiene questi commit.
Correzioni di bug
- È stata corretta la suddivisione dei frame nel visualizzatore del tracciamento del sistema di Studio per le tracce acquisite del benchmark. (I3f3ae, b/239677443)
- È stato corretto
FrameTimingMetricper elencareFrameOverruncome richiedente l'API 31 anziché 29 (I716dd, b/220702554) - Imposta l'iterazione in
BaselineProfileRulee genera un'eccezione chiara 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 è stato rilasciato. La versione 1.2.0-alpha04 contiene questi commit.
Nuove funzionalità
Aggiungi il supporto dell'argomento di strumentazione
dryRunMode.enablea Macrobenchmark (già disponibile in Microbenchmark) per uno sviluppo locale più rapido e per la convalida dell'automazione delle app (ad es. in presubmit). In questo modo, le iterazioni vengono impostate su 1, la compilazione viene saltata, tutti gli errori di configurazione vengono soppressi e l'output del file .json di misurazione viene disattivato. (Ib51b4, b/175149857)Nella riga di comando di Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=trueIn build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Correzioni di bug
- È stato corretto
StartupTimingMetricin modo che le attività misurate non debbano più essere avviate tramiteMacrobenchmarkScope.startActivityAndWait(). Ciò significa che la metrica può rilevare i lanci, ad esempio, da notifiche,Context.startActivity(), navigazione basata sull'attività in-app o comandi della shell. (Ia2de6, b/245414235) - Risolto il bug per cui
startActivityAndWaitandava in timeout durante il tentativo di attendere il completamento dell'avvio sugli emulatori riducendo la severità del rilevamento dei frame. (Ibe2c6, b/244594339, b/228946895)
Versione 1.2.0-alpha03
7 settembre 2022
androidx.benchmark:benchmark-*:1.2.0-alpha03 è stato rilasciato. La versione 1.2.0-alpha03 contiene questi commit.
Nuove funzionalità
- Sono state aggiunte API sperimentali per l'utilizzo indipendente di
BenchmarkState, separato daBenchmarkRule/JUnit4. (Id478f, b/228489614)
Correzioni di bug
- È stato aggiunto il fallback Leanback per
startActivityAndWait. (01ed77, b/242899915)
Versione 1.2.0-alpha02
24 agosto 2022
androidx.benchmark:benchmark-*:1.2.0-alpha02 è stato rilasciato. La versione 1.2.0-alpha02 contiene questi commit.
Modifiche alle API
- Imposta come predefinito
am force stopperMacrobenchmarkScope.killProcess(), anche quando è stato eseguito il rooting, tranne durante la generazione del profilo di base. È possibile eseguire l'override di questa impostazione con un argomento booleano facoltativo. (02cce9, b/241214097)
Correzioni di bug
- Supporto della generazione di profili di riferimento per le app di sistema. (I900b8, b/241214097)
- Supporto del 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 è stato rilasciato. La versione 1.2.0-alpha01 contiene questi commit.
Nuove funzionalità
- Nuovo componente tracing-perfetto-common che consente agli strumenti di abilitare il tracciamento dell'SDK Perfetto in un'app che lo espone (I2cc7f)
È stato aggiunto l'argomento di strumentazione
androidx.benchmark.enabledRulesper consentire il filtro delle esecuzioni di macrobenchmark solo ai benchmark o solo alla generazione di profili di baseline. Passa "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio quando generi soloBaselineProfilessu 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' } }In alternativa, dalla riga di comando Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Modifiche alle API
- Aggiunta di un nuovo
PowerMetricper la misurazione delle attività di energia e potenza nei benchmark. (I9f39b, b/220183779) - È stata aggiunta una nuova modalità di compilazione
CompilationMode.Ignoreper saltare la reimpostazione e la compilazione del profilo. (Ibbcf8, b/230453509) - È stato aggiunto un nuovo parametro a
BaselineProfileRule#collectBaselineProfileper 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 di energia. (I6a6cb)
- Aggiunta la possibilità di svuotare la cache degli shader in
MacrobenchmarkScope. (I32122) - Consente allo sviluppatore di configurare la visualizzazione del tipo di metrica e di specificare le categorie di sottosistemi desiderate. (I810c9)
- In precedenza, nel benchmark veniva generata un'eccezione
UnsupportedOperationExceptionse 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
TotalPowerMetriceTotalEnergyMetricper 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 rootate. Purtroppo, questo richiede la reinstallazione dell'APK a ogni iterazione, il che cancellerà i dati dell'applicazione per ogni macrobenchmark. (I31c74, b/230665435)
- È stato corretto l'arresto anomalo della registrazione della traccia nell'API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
- Revisione del rilevamento del completamento dell'avvio delle 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 è stato rilasciato. La versione 1.1.1 contiene questi commit.
Correzioni di bug
- Corregge l'errore
android.system.ErrnoException: open failed: EACCESche si verificava su alcuni dispositivi Android 11 (API 30) e versioni successive. Questo è un cherry-pick di una correzione da1.2.0-alpha01. (aosp/2072249)
Versione 1.1.0
Versione 1.1.0
15 giugno 2022
androidx.benchmark:benchmark-*:1.1.0 è stato rilasciato. 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
Il supporto di Jetpack Macrobenchmark, che consente di misurare le interazioni con l'intera app, come l'avvio e lo scorrimento, offre la possibilità di acquisire tracce e misurare le sezioni di traccia.
Supporto per i profili di baseline
CompilationMode.Partialper misurare l'efficacia dei profili di base.@BaselineProfileRuleper generare automaticamente i profili di riferimento per un determinato Critical User Journey.
Supporto per le metriche di allocazione e la profilazione durante le esecuzioni di Microbenchmark.
Versione 1.1.0-rc03
1° giugno 2022
androidx.benchmark:benchmark-*:1.1.0-rc03 è stato rilasciato. La versione 1.1.0-rc03 contiene questi commit.
Correzioni di bug
Evita di reinstallare il pacchetto target a ogni iterazione del benchmark. ( aosp/2093027, b/231976084)
Rimuovi il ritardo di
300msdapressHome(). (aosp/2086030, b/231322975)Miglioramento della velocità di iterazione di Macrobenchmark ottimizzando i comandi della shell utilizzati in background. (aosp/2086023, b/231323582)
Supporto dei dispositivi Gradle gestiti durante la generazione di profili di base con Macrobenchmark. (aosp/2062228, b/228926421)
Versione 1.1.0-rc02
11 maggio 2022
androidx.benchmark:benchmark-*:1.1.0-rc02 è stato rilasciato. 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 reinstallate completamente tra un benchmark e l'altro per garantire misurazioni accurate.
Correzioni di bug/modifiche del comportamento
Risolto un problema per cui la compilazione dell'app non veniva reimpostata correttamente tra i macrobenchmark e non veniva reimpostata affatto nelle build senza root. In questo modo, si risolvono molti casi in cui l'esecuzione di più test avrebbe comportato un effetto minimo o nullo di
CompilationModesulle 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' } }In alternativa, dalla riga di comando di Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=falseÈ stato reso possibile condividere un modulo tra macrobenchmark e test di generazione dei profili di baseline aggiungendo l'argomento di strumentazione
androidx.benchmark.enabledRules. Inserisci "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio quando generiBaselineProfilessu un emulatore. (I756b7, b/230371561)Ad esempio, nel file build.gradle di macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }In alternativa, dalla riga di comando di 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 è stato rilasciato. 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 è stato rilasciato. La versione 1.1.0-beta06 contiene questi commit.
Correzioni di bug
- È stato corretto l'arresto anomalo della registrazione delle tracce sulle API 21/22 (If7fd6, b/227509388)
- Revisione del rilevamento del completamento dell'avvio delle 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 diCompilation.None(). (611ac9).
Versione 1.1.0-beta05
23 marzo 2022
androidx.benchmark:benchmark-*:1.1.0-beta05 è stato rilasciato. La versione 1.1.0-beta05 contiene questi commit.
Correzioni di bug
- Termina il pacchetto dopo aver saltato l'installazione del profilo quando utilizzi
CompilationMode.None. (aosp/1991373) - È stato risolto un problema per cui Macrobenchmarks non è in grado di raccogliere le metriche di avvio quando si utilizza
StartupMode.COLD. (aosp/2012227 b/218668335)
Versione 1.1.0-beta04
23 febbraio 2022
androidx.benchmark:benchmark-*:1.1.0-beta04 è stato rilasciato. La versione 1.1.0-beta04 contiene questi commit.
Correzioni di bug
Risolvi i problemi relativi alle metriche mancanti su Android 10 e
NoSuchElementExceptioncausati dalla mancata acquisizione corretta dei nomi dei processi nelle tracce. (Ib4c17, b/218668335)Utilizza
PowerManagerper 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 velocizza notevolmente i benchmark nelle build degli utenti. Inoltre, fornisce il rilevamento della limitazione anche quando i clock sono bloccati (se sono bloccati su un valore troppo elevato per l'ambiente fisico del dispositivo). (I9c027, b/217497678, b/131755853)Filtra la profilazione campionata di simpleperf solo per il thread
measureRepeatedper semplificare l'ispezione (Ic3e12, b/217501939)Supporto delle metriche dei sottoprocessi UI 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 avvisi quando l'app utilizza una versione precedente diandroidx.profileinstallere del plug-in Android per Gradle. aosp/1977029
Versione 1.1.0-beta03
9 febbraio 2022
androidx.benchmark:benchmark-*:1.1.0-beta03 è stato rilasciato. La versione 1.1.0-beta03 contiene questi commit.
Modifiche alle API
- È stato aggiunto
AudioUnderrunMetricalla libreria macrobenchmark con il flag sperimentale per consentire il rilevamento degli underrun audio (Ib5972) BaselineProfileRulenon accetta più un bloccosetup, in quanto funzionava comeprofileBlock. (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
- È stato risolto il problema per cui le tracce del profiler di microbenchmark non venivano aggiornate nelle esecuzioni successive quando erano collegate nell'output di Studio. (I5ae4d, b/214917025)
- Impedisci i comandi shell di compilazione sull'API 23 (Ice380)
- Rinominati
FrameCpuTime->FrameDurationCpu,FrameUiTime->FrameDurationUiper chiarire che si tratta di durate, non di timestamp, e per far corrispondere i prefissi. (I0eba3, b/216337830)
Versione 1.1.0-beta02
26 gennaio 2022
androidx.benchmark:benchmark-*:1.1.0-beta02 è stato rilasciato. La versione 1.1.0-beta02 contiene questi commit.
Correzioni di bug
- I risultati dei profili di campionamento dello stack / traccia metodo di Microbenchmark sono ora 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 pullin 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 è stato rilasciato. La versione 1.1.0-beta01 contiene questi commit.
Correzioni di bug
- Risolve il problema per cui l'argomento enable del profiler veniva ignorato. (I37373, b/210619998)
- Rimosso
CompliationModesdeprecato (I98186, b/213467659) - L'argomento del profilo di baseline di
CompilationMode.Partialè stato sostituito con enum per maggiore chiarezza. (Id67ea)
Versione 1.1.0-alpha13
15 dicembre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13 è stato rilasciato. La versione 1.1.0-alpha13 contiene questi commit.
Modifiche alle API
- Aggiungi il tracciamento del sistema a basso overhead all'output del microbenchmark su Android Q (API 29 e versioni successive). Tieni presente che al momento non viene acquisito il tracciamento personalizzato (tramite le API Jetpack
android.os.Traceoandroidx.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) - Classifica
CompilationModesin tre classi: Completa, Nessuna, Parziale. In precedenza, i nomi venivano assegnati in modo incoerente in base agli argomenti di compilazione (che ora consideriamo dettagli di implementazione) e alle funzionalità. In questo modo, i compromessi, le potenziali combinazioni e il comportamento tra le versioni della piattaforma sono più chiari. (I3d7bf, b/207132597) - Configurazione e misurazione ora sono sempre in coppia, in ordine. Ora puoi eseguire query sul nome e sull'iterazione del pacchetto (anche se l'iterazione potrebbe essere
nullin determinati scenari di warmup). (Id3b68, b/208357448, b/208369635)
Correzioni di bug
- Risolto il problema per cui
CompilationMode.Speedveniva trattato erroneamente comeNone(I01137)
Versione 1.1.0-alpha12
17 novembre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha12 è stato rilasciato. 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 la UI possa essere testata. - Richiede che la schermata di blocco sia disattivata. (Ibfa28, b/180963442)
- Sono stati corretti diversi arresti anomali nella modalità di profilazione StackSampling su emulatori e dispositivi non rooted (Icdbda, b/202719335)
- È stato rimosso lo sleep di 0,5 secondi alla fine di ogni iterazione.Se con questa modifica noti metriche mancanti, segnala un bug. (Iff6aa)
- Sono state ridotte le probabilità di perdita di dati e l'overhead di memoria dovuto al tracciamento. (Id2544, b/199324831, b/204448861)
- Riduzione delle dimensioni della traccia di circa il 40% passando al formato di archiviazione compatto di sched. (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 delle app. (Ic6b55)
Versione 1.1.0-alpha11
3 novembre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11 è stato rilasciato. La versione 1.1.0-alpha11 contiene questi commit.
Modifiche alle API
- Macrobenchmark ora ha un
minSdkVersiondi23. (If2655) - Aggiunge un nuovo
BaselineProfileRulesperimentale in grado di generare profili di baseline per il Critical User Journey dell'app. Documentazione dettagliata a seguire. (Ibbefa, b/203692160) - Rimuove la variante dell'interfaccia measureRepeated, che era stata aggiunta per i chiamanti Java, in quanto causava ambiguità nel completamento/nella risoluzione del metodo. I chiamanti Java dovranno nuovamente restituire Unit.Instance da measureRepeated. Se questo ti crea problemi, segnala un bug. Potremo valutare la situazione in una versione futura. (Ifb23e, b/204331495)
Versione 1.1.0-alpha10
27 ottobre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha10 è stato rilasciato. La versione 1.1.0-alpha10 contiene questi commit.
Modifiche alle API
- Eseguire il backport di StartupTimingMetric per l'utilizzo con l'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, ovvero 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 è stato rilasciato. 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 è stato rilasciato. 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 all'interfaccia utente, 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 è stato rilasciato. 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 che verrà supportato in futuro. L'API minima attualmente supportata continua a essere comunicata tramite RequiredApi() ed è attualmente 29 (I440d6, b/183129298)
Correzioni di bug
- Correzioni a
ProfileInstallerper semplificare l'esecuzione di MacroBenchmark utilizzandoCompilationMode.BaselineProfileper le app che utilizzano i profili di baseline. (I42657, b/196074999) NOTA: richiede anche l'aggiornamento alla versioneandroidx.profileinstaller:profileinstaller:1.1.0-alpha04o successive. - I benchmark
StartupMode.COLD+CompilationMode.Noneora sono più stabili. (I770cd, b/196074999)
Versione 1.1.0-alpha06
18 agosto 2021
androidx.benchmark:benchmark-*:1.1.0-alpha06 è stato rilasciato. La versione 1.1.0-alpha06 contiene questi commit.
Modifiche alle API
- È stato aggiunto l'argomento di strumentazione
androidx.benchmark.iterationsper consentire l'override manuale del conteggio delle iterazioni durante i test/la profilazione in locale. (6188be, b/194137879)
Correzioni di bug
- È stato eseguito il passaggio a Simpleperf come profiler di campionamento predefinito nell'API 29 e versioni successive. (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 è stato rilasciato. 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 scapito del mancato supporto dei parcelable intent. (I5a6f5, b/192009149
Correzioni di bug
- Riduci l'aggressività del rilevamento della limitazione termica e ricalcola la base di riferimento se le limitazioni vengono rilevate di frequente. (I7327b)
- È stato corretto FrameTimingMetric per funzionare su Android S beta (Ib60cc, b/193260119)
- Utilizza un
EmptyActivityper far uscire l'app di destinazione da uno stato di interruzione forzata per supportare meglioCompilationMode.BaselineProfile. (Id7cac, b/192084204) - L'estensione del file di traccia è stata modificata in
.perfetto-traceper 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 dell'elenco iniziale 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 tempo sufficiente a 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 tracciatura, 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 è stato rilasciato. La versione 1.1.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un nuovo
CompilationMode.BaselineProfileper supportare i profili installati utilizzando la libreria Jetpack ProfileInstaller. (aosp/1720930)
Correzioni di bug
Il codice Gradle di esempio per la soppressione degli errori di benchmark è stato aggiornato per utilizzare un'API non deprecata 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 a benchmark, che ti consente di misurare i loop della CPU, macrobenchmark ti consente di misurare le interazioni dell'intera app, come l'avvio e lo scorrimento, e di acquisire tracce. Per saperne di più, consulta la documentazione della libreria.
androidx.benchmark:benchmark-*:1.1.0-alpha02 è stato rilasciato. 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
- Acquisisci e ispeziona 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 il plug-in Android per Gradle 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)
- Supporto della memorizzazione nella cache della configurazione in BenchmarkPlugin (6be1c1, b/159804788)
- Output dei file semplificato: attivo 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 stati rilasciati. La versione 1.1.0-alpha01 contiene questi commit.
Nuove funzionalità della versione 1.1
- Metrica di allocazione: i benchmark ora eseguono una fase aggiuntiva dopo il warmup 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 del benchmark, per esaminare il motivo per cui il codice potrebbe essere eseguito lentamente. Benchmark supporta l'acquisizione della traccia metodo o del campionamento dei metodi da ART. Questi file possono essere esaminati con Profiler in Android Studio utilizzando File > Apri.
- Il plug-in Gradle di 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. Il buildType di release è configurato anche come buildType predefinito, il che consente ad Android Studio di selezionare automaticamente la variante di compilazione corretta quando si apre un progetto per la prima volta. (b/138808399)signingConfig.debugviene utilizzato come configurazione di firma predefinita (b/153583269)
** Correzioni di bug **
- È stato ridotto in modo significativo l'overhead della transizione di warmup, in cui la prima misurazione per ogni benchmark era artificialmente più alta delle altre. Questo problema era più evidente nei benchmark molto piccoli (1 microsecondo o meno). (b/142058671)
- Risolto l'errore
InstrumentationResultParserstampato per ogni benchmark durante l'esecuzione dalla riga di comando. (I64988, b/154248456)
Problemi noti
- Le chiamate di Benchmark da riga di comando e Gradle 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 di ottenere risultati rapidamente.
Previene i problemi di configurazione della build e del 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 le prestazioni del codice nel tempo e per evitare regressioni.
Le funzionalità principali includono:
- Stabilizzazione del clock
- Assegnazione automatica della priorità ai thread
- Supporto per i test delle prestazioni dell'UI, ad esempio nell'esempio di RecyclerView
- Warmup e looping JIT-aware
- Output del benchmark JSON 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 stati rilasciati. La versione 1.0.0-rc01 contiene questi commit.
Nuove funzionalità
- Aggiunta della traccia systrace ai benchmark
Correzioni di bug
- Risolto il problema di instabilità delle metriche per cui JIT non terminava prima del riscaldamento a causa della deprioritizzazione (b/140773023)
- Directory di output JSON unificata per il plug-in Android per Gradle 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 stati rilasciati. La versione 1.0.0-beta01 contiene questi commit.
Nuove funzionalità
- Esegui la garbage collection prima di ogni warmup per ridurre la pressione della memoria da un benchmark per evitare perdite di dati al successivo (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
additionalTestOutputDirper l'output nel plug-in Android per Gradle 3.6, per sapere quando AGP gestirà la copia dei dati. - Risolto il problema della frequenza di clock non rilevata in 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 stati 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 alle 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 stati rilasciati. I commit inclusi in questa versione sono disponibili qui.
Modifiche alle API
- L'API
BenchmarkState.reportDataè ora contrassegnata come sperimentale
Correzioni di bug
- Correzione dello script di blocco del clock, che non funzionava sui dispositivi in cui mancavano le utilità della shell
cutoexpr. - Risolto un problema relativo all'attività
./gradlew lockClocksche si bloccava sui dispositivi con 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 stati rilasciati. I commit inclusi in questa versione sono disponibili qui.
È stata inoltre aggiunta una nuova documentazione su come utilizzare la libreria Benchmark senza Gradle, sia per l'utilizzo con sistemi di build diversi (come Bazel o Buck) sia per l'esecuzione in CI. Per saperne di più, consulta Crea benchmark senza Gradle ed Esegui benchmark nell'integrazione continua.
Nuove funzionalità
- Plug-in Gradle
- Ora disattiva automaticamente la copertura dei test e imposta
AndroidBenchmarkRunnerper impostazione predefinita (b/138374050) - Aggiunto il supporto per la nuova copia dei dati basata su AGP, durante l'esecuzione dei benchmark e l'utilizzo di AGP 3.6 e versioni successive
- Ora disattiva automaticamente la copertura dei test e imposta
- Aggiunte al formato JSON
- Output del tempo di esecuzione totale del test di benchmark (b/133147694)
- I benchmark
@Parameterizedche 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à dry run (b/138785848)
- È stata aggiunta una modalità "dry run" per eseguire ogni loop di benchmark una sola volta, per verificare la presenza di errori/arresti anomali senza acquisire misurazioni. Questo può essere utile, ad esempio, per eseguire rapidamente i benchmark in fase di pre-invio per verificare che non siano danneggiati.
Modifiche alle API
- La struttura del modulo è cambiata, dividendo la libreria (b/138451391)
benchmark:benchmark-junit4contiene classi con dipendenza JUnit:AndroidBenchmarkRunnereBenchmarkRule, entrambe spostate nel pacchettoandroidx.benchmark.junit4benchmark:benchmark-commoncontiene il resto della logica, inclusa l'API BenchmarkState- Questa suddivisione consentirà alla libreria di supportare il benchmarking senza API JUnit4 in futuro
- Gli avvisi di configurazione ora vengono trattati come errori e causano l'arresto anomalo del test (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 unità di archiviazione esterna 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 state rilasciate. 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 di 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 state rilasciate. I commit inclusi in questa versione sono disponibili qui.
Tieni presente che trattiamo 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 fisse nella versione finale, con solo aggiunte nelle release minori e modifiche/rimozioni nelle release principali.
Modifiche alle API
Schema JSON revisionato. Ulteriori modifiche allo schema JSON saranno probabilmente limitate alle aggiunte:
- È stata riorganizzata la struttura dell'oggetto risultato per supportare in futuro altri gruppi di metriche (b/132713021)
- 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 del report (massimo, mediana, minimo) e 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
- Risolto il problema per cui
./gradlew lockClocksnon rimaneva su alcuni dispositivi con sistema operativo recente (b/133424037) - Rilevamento della limitazione disattivato per l'emulatore (b/132880807)
Versione 1.0.0-alpha01
7 maggio 2019
androidx.benchmark:benchmark:1.0.0-alpha01 è stato rilasciato. I commit inclusi
in questa versione sono disponibili
qui.