Benchmark
Aggiornamento più recente | Release stabile | Candidato per l'uscita | Versione beta | Release alpha |
---|---|---|---|---|
7 agosto 2024 | 1.2.4 | 1.3.0-rc01 | - | - |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza al benchmark, devi aggiungere il Repository Maven di Google a del progetto. Letto Repository Maven di Google per saperne di più informazioni.
Macrobenchmark
Per utilizzare Macrobenchmark
nel tuo progetto, aggiungi le seguenti dipendenze al file build.gradle
tuo
modulo macrobenchmark:
Trendy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.2.4" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.2.4") }
Microbenchmark
Per utilizzare Microbenchmark
nel tuo progetto, aggiungi le seguenti dipendenze al file build.gradle
tuo
modulo Microbenchmark:
Trendy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.2.4" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.2.4") } 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 compilazione per il modulo, imposta la copia di output di benchmark sull'host e fornisce l'
attività ./gradlew lockClocks
.
Per utilizzare il plug-in, includi la seguente riga nel blocco "plugins" nel file build.gradle
di primo livello:
Trendy
plugins { id 'androidx.benchmark' version '1.2.4' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.2.4" apply false }
Applica quindi il plug-in al file build.gradle
del modulo di benchmark
Trendy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Non esitare a contattarci in caso di nuovi problemi o idee per migliorare questa raccolta. Dai un'occhiata alle problemi esistenti in questa raccolta, prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente tramite facendo clic sul pulsante a forma di stella.
Consulta la documentazione di Issue Tracker per ulteriori informazioni.
Versione 1.3
Versione 1.3.0-rc01
7 agosto 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-rc01
. La versione 1.3.0-rc01 contiene questi commit.
Correzioni di bug
- Correggi
androidx.benchmark.cpuEventCounter
che produce valori danneggiati per eventi non di istruzioni (I7386a, b/286306579) - Correggi
resumeTiming
/runWithTimingDisabled
per rispettare l'ordine di priorità delle metriche e ridurre notevolmente l'impatto della messa in pausa/ripresa delle metriche con priorità più bassa sui risultati delle metriche con priorità più alta. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di strumentazionecpuEventCounter.enable
, i valori timeN non vengono più ridotti in modo significativo quando si verificano pause/riprese. (I39c2e, b/286306579, b/307445225) - Riduzione della possibilità che il campionamento dello stack causa il timeout forzato di
measureRepeatedOnMainThread
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é ciò avviene automaticamente tramite la modellazione 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). Si consiglia ai clienti che non utilizzano AGP di eseguire l'aggiornamento alla versione D8 8.1 o successiva. Consulta questo articolo per ulteriori dettagli. (I9496c, b/345472586)
- È stato aggiunto il controllo della versione agp per inviare il nome del pacchetto come argomento instr. Nelle versioni precedenti ad AGP 8.4.0, il nome del pacchetto dell'app di destinazione non può essere inviato all'app di strumentazione tramite argomenti di strumentazione. (0c72a3f)
Versione 1.3.0-beta02
10 luglio 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-beta02
. La versione 1.3.0-beta02 contiene questi commit.
Correzioni di bug
- Gestisci in modo corretto ESCI CODICE
2
all'avvio di Perfetto per registrare un avviso, ma procedi.
Versione 1.3.0-beta01
12 giugno 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-beta01
. La versione 1.3.0-beta01 contiene questi commit.
Modifiche alle API
MethodTracing.affectsMeasurementOnThisDevice
rinominato inAFFECTS_MEASUREMENT_ON_THIS_DEVICE
per coerenza. (I1bdfa)- È stata aggiunta l'API
BlackHole.consume()
sperimentale per evitare l'eliminazione del codice morto nei microbenchmark. (If6812, b/286091643) - Ora Microbenchmark viene generato correttamente per evitare che il tracciamento del metodo interferisca con le misurazioni. Questo si verifica su alcuni dispositivi quando viene forzato il tracciamento del metodo (tramite argomenti di strumentazione o
MicrobenchmarkConfig
) e se viene tentata una misurazione dopo una traccia del metodo. I dispositivi interessati eseguono l'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
- Versione agp massima consigliata a 9.0.0-alpha01. (I5bbb0)
- È stata aggiunta la modalità di compilazione al contesto di benchmark (If5612, b/325512900)
- Abilita il tracciamento AIDL per impostazione predefinita (richiede l'API 28) (Ia0af2, b/341852305)
- Sono state aggiunte ulteriori informazioni nel contesto del benchmark nell'output JSON:
context.artMainlineVersion
: versione intera del modulo Art mainline (se presente sul dispositivo, -1 in caso contrario)context.build.id
- Uguale aandroid.os.Build.ID
context.build.version.codename
- Uguale aandroid.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
: corrisponde alla prima lettera del nome in codice della versione pre-release (anche nelle build di release) (Ie5020)
- Corregge
StackSampling
per rispettareandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53) - Cambia la dipendenza macro->comune in
api()
, quindi è più facile da usare, ad esempioPerfettoTrace
ePerfettoConfig
. (Icdae3, b/341851833) - Assicurati che le attività
mergeArtProfile
emergeStartupProfile
attendano sempre la generazione del profilo di base. (I623d6, b/343086054) - Prendi in considerazione lo stato di attivazione della variante al momento di decidere se attivarla. (I5d19e, b/343249144)
- Aumento del timeout di avvio predefinito per il processore di traccia Perfetto. (I87e8c, b/329145808)
Versione 1.3.0-alpha05
14 maggio 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha05
. La versione 1.3.0-alpha05 contiene questi commit.
Correzioni di bug
- Genera un'eccezione più chiara quando la metrica macrobench restituisce valori zero per tutte le iterazioni (Iab58f, b/314931695)
- Ulteriori regole alternative aggiunte alle regole ProGuard microbench, incluso il supporto per le regole listener e altri avvisi / errori osservati. (I14d8f, b/329126308, b/339085669)
- Il tracciamento del metodo viene eseguito come fase separata durante un Macrobenchmark e non influisce più sulle misurazioni. (If9a50, b/285912360, b/336588271)
- Sono stati aggiunti ulteriori suggerimenti di debug per eliminare il messaggio di errore di trasmissione dello shaker. (I5efa6, b/325502725)
Versione 1.3.0-alpha04
1° maggio 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha04
. La versione 1.3.0-alpha04 contiene questi commit.
Modifiche alle API
- Aggiunta una variante sperimentale
MacrobenchmarkRule#measureRepeated
che richiede un valorePerfettoConfig
personalizzato per una registrazione della traccia Perfetto completamente personalizzata. Tieni presente che configurazioni non configurate correttamente potrebbero causare errori nelle classi di metriche integrate. (Idfd3d, b/309841164, b/304038384) - Rinomina
PowerMetric.deviceSupportsPowerEnergy
inPowerMetric.deviceSupportsHighPrecisionTracking
per maggiore chiarezza (I5b82f) - Sono stati aggiunti
PowerMetric.deviceBatteryHasMinimumCharge()
ePowerMetric.deviceSupportsPowerEnergy()
per consentire la modifica o l'esclusione 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 riferimento precedente (I824c8, b/269484510)
- È stato aggiunto il formato DSL per la disattivazione degli avvisi (Ic4deb, b/331237001)
- Eccezione modificata del log delle informazioni quando le varianti di benchmark sono disattivate (I8a517, b/332772491)
- Semplifica l'acquisizione delle tracce del metodo per un Macrobenchmark con l'ambito della durata del
measureBlock()
effettivo. In precedenza, veniva avviata all'avvio del processo target e supportava solo gli avvii a freddo (Iee85a, b/300651094). - Evita l'arresto anomalo quando il processore di traccia perfetto è lento ad avviarsi (I98841, b/329145808)
Versione 1.3.0-alpha03
17 aprile 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha03
. La versione 1.3.0-alpha03 contiene questi commit.
Nuove funzionalità
- Aggiunge le API pubbliche
PerfettoTraceProcessor.Session.queryMetrics
dell'API con varianti JSON, textproto e proto binario (non decodificato). Ti consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382) - È stato aggiunto
profilerOutput
all'output JSON per semplificare la gestione degli strumenti relativi alle tracce di profilazione (ad es. perfetto, tracce dei metodi). (I05ddd, b/332604449) - È stato aggiunto il tag di alimentazione al benchmark Perfetto Config. Questa operazione acquisisce, ad esempio, le tracce di wakelock. (Icfe44, b/286551983)
- Aggiunto l'argomento inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, può essere impostato su false per evitare di saltare le tracce del metodo quando la durata prevista potrebbe causare un errore ANR. Consigliamo vivamente di evitare nelle esecuzioni CI. - Aggiunto l'argomento inst sperimentale
androidx.benchmark.profiling.perfCompare.enable
. Imposta questo valore su true per eseguire il confronto tra le fasi di misurazione e profilazione. Utile, ad es. valutare l'overhead del tracciamento dei metodi. (I61fb4, b/329146942)
Modifiche alle API
- Il valore
TraceSectionMetric.Mode
è stato modificato in classe sigillata per consentire l'espansione futura senza violare esaustivi le istruzioni (I71f7b) - Sono stati aggiunti
TraceSectionMetric.Mode.Average
e.Count
e sono stati riordinati gli argomenti in modo che l'argomento più comune (mode) si trovi in precedenza nell'elenco degli argomenti, riducendo la necessità di specificare i nomi dei parametri. (Ibf0b0, b/315830077, b/322167531) Metric.getResult
è stato rinominato ingetMeasurements
per corrispondere al tipo restituito (I42595)
Correzioni di bug
- Risolvi il problema per assicurarti che i benchmark utilizzino i profili di riferimento generati quando la funzionalità
automaticGenerationDuringBuild
è disattivata (Ic144f, b/333024280) - Correggi gli override delle proprietà dei plug-in Gradle
BaselineProfile
per attivare la generazione del profilo di base e il benchmarking durante la personalizzazione di un tipo di buildnonMinified
o benchmark. (Ib8f05, b/324837887) - Le tracce del metodo fisso vengono eliminate in macrobenchmark, in modo che le tracce del metodo vengano acquisite completamente e valide, anche su dispositivi più lenti. (I6349a, b/329904950)
- Attiva l'avvio del blocco sul record di traccia Perfetto per ridurre il rischio di dati mancanti all'inizio della traccia. Funzionalità supportata solo sull'API 33 e versioni successive. (Ie6e41, b/310760059)
- È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, poiché i file JSON di output per modulo verranno sovrascritti ripetutamente. (Ia1af6, b/286899049)
- Forza ", (virgola) separatori delle migliaia per coerenza nell'output di Studio, ignorando le impostazioni internazionali del dispositivo (I3e921, b/313496656)
TraceSectionMetric
ora supporta le sezioni create utilizzandoTrace.{begin|end}AsyncSection
. (I91b32, b/300434906)- Sono state aggiunte le etichette log.w / eccezione a tutti gli errori di rilevamento dell'avvio. Questo non modifica il comportamento attuale (quindi alcuni errori generano e altri non rilevano automaticamente l'avvio), ma rende il tutto più comprensibile. In genere, quelle che
Log.w()
e che non riescono a segnalare le metriche di avvio sono quelle in cui mancano eventi senza frame. Vengono generate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sulla tempistica dei frame (dalle sezioni UI/RT). (Id240f, b/329145809) - Annulla i job di dexopt in background prima di eseguire un Macrobenchmark per ridurre le interferenze. (I989ed)
- È stata aggiunta la misurazione
frameCount
aFrameTimingMetric
per facilitare l'individuazione di scenari in cui le misurazioni cambiano perché è cambiato il numero di frame prodotti (aggiunta di nuove animazioni, problemi di annullamento della convalida risolti). (I1e5aa). - È stato chiarito che
frameOverrunMs
è la metrica preferita per il monitoraggio, se disponibile nella documentazione, e perché. (I18749, b/329478323)
Versione 1.3.0-alpha02
20 marzo 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha02
. La versione 1.3.0-alpha02 contiene questi commit.
Nuove funzionalità
Supporto sperimentale R8 in microbench tramite regole integrate di ProGuard. Tieni presente che questo supporto è sperimentale e richiede AGP 8.3 per la minimizzazione dei test dei moduli della libreria. Utilizza quanto segue per abilitare la minimizzazione/ottimizzazione R8 nell'
build.gradle
del modulo di benchmark, il che dovrebbe portare a un aumento significativo delle prestazioni, a seconda del carico di lavoro. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
Correzioni di bug
- Corregge l'avviso di tracciamento del metodo in modo che fosse su una riga separata dall'output del microbench. (I0455c, b/328308833)
Versione 1.3.0-alpha01
21 febbraio 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha01
. La versione 1.3.0-alpha01 contiene questi commit.
Modifiche alle API
- I parametri booleani
MicrobenchmarkConfig
sono stati rinominati per evitare la parola superflua "dov" (Ia8f00, b/303387299) - È stato aggiunto
BenchmarkRule.measureRepeatedOnMainThread
in modo che i benchmark dei thread principali (ad esempio quelli che toccano le UI di Visualizzazioni o Scrivi) possano evitare di attivare ANR, soprattutto durante suite di grandi dimensioni in CI. (I5c86d). - È stata aggiunta
FrameTimingGfxInfoMetric
, un'implementazione alternativa sperimentale diFrameTimingMetric
con 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 singole iterazioni di
warmUp
. (I17923) - Diverse modifiche all'API
TraceSectionMetric
:- Aggiungi
Mode.Min
,Mode.Max
- Aggiungi argomento etichetta per sostituire il nome della sezione come etichetta della metrica
- È stato aggiunto il nome della modalità all'output per chiarire il significato della metrica
- Valore predefinito modificato in somma, poiché la maggior parte dell'utilizzo di questa metrica è per eventi ripetuti Tieni presente queste modifiche nell'utilizzo di CI, poiché 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 non esiste un dispositivo gestito specificato (Idea2b, b/313803289)
- Correzione per l'inclusione dei profili di riferimento della libreria in AAR precedenti ad AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- URL di output del profilo di avvio e di base fisso alla fine dell'attività di generazione (I802e5, b/313976958)
- Timeout dell'origine dati corretti 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 rilascio dello Shar agli arresti anomali della soluzione alternativa durante il benchmarking di app senza
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: può essere utilizzato per ignorare tutti i rilasci di Shar (compreso quello fatto nei lanci diStartupMode.Cold
), soprattutto quando si effettuano benchmark di app che non utilizzano ancora profilelauncher 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: può essere utilizzato per tollerare gli errori durante il tentativo di eliminare gli Shaper, ad esempio durante il benchmarking di app senza profilelauncher 1.3 (I4f573)
- Salta il tracciamento del metodo sul thread della UI quando dovrebbe richiedere più di qualche secondo e le tracce del metodo di pulizia durante il lancio. (I6e768)
- Questo codice viene generato quando i nomi dei file superano i 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione dei file. (I4a5ab).
- Corregge il problema per cui i frame non terminati all'inizio e alla fine della traccia potevano essere abbinati, che venivano erroneamente segnalati come un singolo frame estremamente lungo. (I39353, b/322232828)
- Usa
--skip verification
nell'API 30 e versioni successive quando reinstalli un pacchetto nell'API 30-33 per cancellare i profili ART nelle build degli utenti. In questo modo è possibile bypassare gli avvisi di Play Protect che causano errori su alcune classi di dispositivi. (Ic9e36). - Utilizza
am force-stop
per terminare le app quando non si tratta di un'app di sistema come l'UI di sistema o Avvio app. (I5e028). - Macrobenchmark ora attende
1 second
affinché l'applicazione di destinazione svuoti un profilo ART (in precedenza aveva aspettato500 ms
). (I85a50, b/316082056) - Migliora l'errore
FrameTimingMetric
quando non vengono generati frame e genera sempre un link da tracciare in caso di errore dell'analisi delle metriche, per facilitare la diagnosi del problema. (I956b9) - È stato risolto l'arresto anomalo in
FrameTimingMetric
che non riusciva ad analizzare l'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276) - Rilassamento della severità dei controlli in
FrameMetrics
e aggiunta di ulteriori dettagli ai messaggi di errore. (Iadede)
Versione 1.2
Versione 1.2.4
17 aprile 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.2.4
. La versione 1.2.4 contiene questi commit.
Correzioni di bug
- Corregge il problema srcset del profilo di riferimento non impostato nelle varianti del benchmark. Corregge anche
automaticGenerationDuringBuild
nelle librerie che causa una dipendenza circolare. (I28ab7, b/333024280) - Utilizza
am force-stop
per terminare le app quando non si tratta di un'app di sistema come l'UI di sistema o Avvio app. Questo è il problema per cui è stato corretto il problema di arresto anomalo diStartupMode.COLD
benchmark da "Il pacchetto $package non deve essere in esecuzione prima dell'avvio a freddo". a causa della mancata riuscita del processo di terminazione. (I5e028).
Versione 1.2.3
24 gennaio 2024
Viene rilasciato androidx.benchmark:benchmark-*:1.2.3
. La versione 1.2.3 contiene questi commit.
Correzioni di bug
- È stata rimossa l'eccezione dal plug-in Gradle del profilo di base quando la versione AGP è 8.3.0 o successiva.
- Correzione per l'inclusione dei profili di riferimento della libreria in AAR prima di AGP 8.3.0-alpha15.
Versione 1.2.2
1 dicembre 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.2
. La versione 1.2.2 contiene questi commit.
Profili di riferimento
- I log di esecuzione mostreranno il percorso del file di output del profilo di base come URI del file locale (aosp/2843918, aosp/2853665, b/313976958)
Versione 1.2.1
15 novembre 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.1
. La versione 1.2.1 contiene questi commit.
Nuove funzionalità
- Messaggio di errore migliorato quando l'utente disabilita le varianti di test (b/307478189)
- Proprietà aggiunte per supportare l'integrazione dell'esecuzione di test AS (b/309805233), (b/309116324)
Versione 1.2.0
18 ottobre 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0
. La versione 1.2.0 contiene questi commit.
Modifiche importanti dalla versione 1.1.0
Profili di riferimento
- Il nuovo plug-in Gradle del profilo di base automatizza l'acquisizione e l'inclusione di profili di riferimento nel flusso di lavoro di test e creazione.
- Ora stabile:
BaselineProfileRule.collect
, una versione semplificata e semplificata della precedente APIBaselineProfileRule.collectBaselineProfile
sperimentale- Devi solo specificare
packageName
e guidare la tua app
- Devi solo specificare
- Per le librerie che generano profili di base, ora puoi filtrare le regole generate nel codice (argomento
BaselineProfileRule.collect
) o ancora più semplicemente nel plug-in Gradle - Correzioni
- Raccolta del profilo di riferimento corretta su Android U e versioni successive (Id1392, b/277645214)
Macrobenchmark
- Compilation
- Macrobenchmark ora ripristina correttamente lo stato di compilazione per ogni compilazione. Ciò richiede la reinstallazione dell'APK prima di Android 14, quindi è vivamente consigliato il benchmarking su Android 14 e versioni successive se vuoi mantenere uno stato (come l'accesso utente) nei valori misurati.
- Puoi anche aggirare il problema controllando la compilazione delle app separatamente e saltando la compilazione con
CompilationMode.Ignore()
o l'argomento instrumentation.
Argomenti strumentazione
- Supporto per l'argomento 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=StackSampling
eMethodTracing
. - È stato aggiunto
androidx.benchmark.enabledRules
per consentire i test del profilo di riferimento del filtro del runtime rispetto ai test delle regole macrobenchmark - Aggiunto l'argomento
androidx.benchmark.perfettoSdkTracing.enable
per consentire il tracciamento con tracing-perfetto, ad esempio Traccia il tracciamento di ricomposizione. Tieni presente che se utilizzato conStartupMode.COLD
, i tempi saranno influenzati in modo significativo dal caricamento e dall'attivazione della libreria di tracciamento durante l'avvio dell'app.
- Supporto per l'argomento strumentazione
Requisiti
- Macrobenchmark ora richiede
ProfileInstaller
1.3.0 o versioni successive nell'app di destinazione, per consentire l'acquisizione / reimpostazione del profilo e la cancellazione della cache dello streamr.
- Macrobenchmark ora richiede
Nuove API sperimentali per le metriche
- È stato aggiunto l'esperimento sperimentale
TraceSectionMetric
, che consente di estrarre facilmente il tempo dai blocchitrace("") {}
nella tua app, oppure TraceMetric per sfruttare tutte le funzionalità di query di PerfettoTraceProcessor
. - È stata aggiunta la funzionalità sperimentale
PowerMetric
per acquisire informazioni sul consumo energetico - È stato aggiunto il campo sperimentale
MemoryCountersMetric
al conteggio degli errori di pagina - È stata aggiunta l'API sperimentale
PerfettoTraceProcessor
, che viene utilizzata internamente per estrarre le metriche dalle tracce di sistema (note anche come tracce Perfetto).
- È stato aggiunto l'esperimento sperimentale
Correzioni
- Sono stati corretti gli arresti anomali durante l'installazione o l'estrazione di profili da un'app installata da più APK (ad esempio da un app bundle).
- È stato risolto il problema
FrameTimingMetric
ignorando i frame con ID frame incoerenti (in genere, frame durante le increzioni sull'API 31 e versioni successive) (I747d2, b/279088460) - Corretti gli errori di analisi delle tracce > 64MB (Ief831, b/269949822)
- Sono stati chiariti gli errori quando l'immagine del sistema operativo del dispositivo (in particolare l'emulatore) non era configurata correttamente per il tracciamento o la compilazione
- Salta il controllo del livello della batteria per i dispositivi senza batteria (micro e macro)
- Output dei file migliorato, con errori più chiari per directory di output non valide e valori predefiniti più sicuri
- Miglioramento della stabilità di
StartupMode.COLD
grazie all'eliminazione costante della cache dello shaker (esposta anche tramiteMacrobenchmarkScope.dropShaderCache
) - Leanback di riserva corretto per
startActivityAndWait
.
Microbenchmark
- Funzionalità
- La profilazione è stata spostata in una fase separata, dopo altre metriche, quindi un'esecuzione di test può mostrare tempistiche accurate e risultati di profilazione.
- API sperimentali
- È stata aggiunta l'API sperimentale
MicrobenchmarkConfig
per definire metriche personalizzate e configurare tracciamento e profilazione. Può essere utilizzato per acquisire tracce del metodo o acquisire i tracepoint (ma tieni presente il tracciamento dell'overhead). - Sono state aggiunte API sperimentali per controllare
BenchmarkState
separatamente daBenchmarkRule
, senza JUnit - È stato aggiunto un record sperimentale
PerfettoTrace
per consentire l'acquisizione delle tracce Perfetto, con configurazione personalizzata, separata dalle API di benchmark.
- È stata aggiunta l'API sperimentale
- Correzioni
- Nella soluzione alternativa mancano gli spazi vuoti principali nell'output del benchmark di Android Studio.
- È stato risolto il problema per cui gli avvisi potevano non essere stampati nell'output del benchmark di Android Studio.
- È stato risolto l'arresto anomalo di
SampledProfiling
su Android 13 (API 33) e versioni successive. - Prestazioni di
dryRunMode
migliorate enormemente saltandoIsolationActivity
e tracciamento di Perfetto (modalità dry run fino a 10 volte più veloce su versioni precedenti del sistema operativo).
Versione 1.2.0-rc02
6 ottobre 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-rc02
. La versione 1.2.0-rc02 contiene questi commit.
Correzioni di bug
- Correggi l'output del file di benchmark per non interrompere più la copia del file del plug-in di
BaselineProfile
. I file sono stati generati e copiati a partire dal dispositivo, ma sono stati rinominati in modo che il plug-in Gradle non li vedesse. (I8dbcc, b/303034735, b/296453339) - Sono stati chiariti i messaggi di errore di
tracing-perfetto
relativi al caricamento durante l'inserimento dal modulo macrobenchmark nell'applicazione di destinazione.
Versione 1.2.0-rc01
20 settembre 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-rc01
. La versione 1.2.0-rc01 contiene questi commit.
Correzioni di bug
- Ora viene generata un'eccezione (con istruzioni per il rimedio) quando il tracciamento dell'SDK Perfetto non viene inizializzato in un benchmark. (I6c878, b/286228781)
- Correggi l'arresto anomalo di OOM durante la conversione della traccia del metodo ART -> perfetto. (I106bd, b/296905344)
- (Macrobenchmark) È stata chiarita l'etichetta di tracciamento del metodo quando viene collegata nell'output del test di Studio e il metodo fisso che i nomi file di tracciamento sono univoci sul dispositivo/host, quindi non verranno sovrascritti quando vengono eseguiti più benchmark. (I08e65, b/285912360)
- Garantisce che il dispositivo sia attivo durante l'acquisizione di un profilo di base. (I503fc)
Versione 1.2.0-beta05
30 agosto 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta05
. La versione 1.2.0-beta05 contiene questi commit.
Nuove funzionalità
- Il plug-in Gradle del profilo di base ora supporta il plug-in Android Gradle 8.3. (aosp/2715214).
Versione 1.2.0-beta04
23 agosto 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta04
. La versione 1.2.0-beta04 contiene questi commit.
Nuove funzionalità
- Il plug-in Gradle dei profili di base ora supporta il plug-in Android Gradle 8.3. (aosp/2715214)
Correzioni di bug
- Correggi gli errori di scrittura, spostamento e pull dei file (in particolare quelli provenienti da test con parametri) sanificando ulteriormente i nomi dei file di output, evitando "="" e ':' nei nomi dei file di output. (I759d8)
Versione 1.2.0-beta03
9 agosto 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta03
. La versione 1.2.0-beta03 contiene questi commit.
Modifiche alle API
- Aggiunto argomento per filtrare
TraceSectionMetric
solo per il pacchetto di destinazione, attivo per impostazione predefinita (Ia219b, b/292208786)
Correzioni di bug
- L'argomento di strumentazione
fullTracing.enable
è stato rinominato inperfettoSdkTracing.enable
per garantire la coerenza con il nome dell'artefatto e altri riferimenti.fullTracing.enable
continuerà a funzionare come alternativa. (I7cc00) - I punti di traccia interni della libreria di benchmark (incluso il tracciamento di fasi/loop del microbenchmark) ora appariranno nel visualizzatore della traccia del sistema di Studio e verranno nidificati in Perfetto secondo il processo corretto. (I6b2e7, b/293510459)
- Rimosso l'errore macrobenchmark NOT-PROFILEABLE sull'API 31 e versioni successive e salta il controllo del profilo sui dispositivi rooted eng/userdebug. (I2abac, b/291722507)
- Quando utilizzi le ottimizzazioni del layout Dex, anche le regole del profilo iniziale vengono ora considerate come regole del profilo di base. (aosp/2684246, b/293889189)
Versione 1.2.0-beta02
26 luglio 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta02
. La versione 1.2.0-beta02 contiene questi commit.
Modifiche alle API
- Sono state aggiunte API sperimentali per le metriche personalizzate e la configurazione di microservizi (ad es. profiler e tracciamento). (I86101, b/291820856)
Correzioni di bug
- Segnala un errore in macrobench quando il sistema operativo è configurato in modo errato per il tracciamento, come 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 risolto il problema di recente. (I8c815, b/282191686)
- Imposta
androidx.test.uiautomator:uiautomator:2.2.0
come dipendenzaapi
anzichéimplementation
. (I1981e)
Versione 1.2.0-beta01
18 luglio 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta01
. La versione 1.2.0-beta01 contiene questi commit.
Correzioni di bug
- Correggere gli avvisi a volte soppressi nell'output del benchmark in Studio e la soluzione alternativa agli spazi vuoti iniziali dell'output del benchmark che non venivano visualizzati in Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
- Commento corretto per
FrameTimingMetric
. La sottometrica è denominataframeDurationCpuMs
. (Ib097f, b/288830934).
Versione 1.2.0-alpha16
21 giu 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha16
. 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 Microbenchmark è passata a una fase separata, quindi viene eseguita in sequenza dopo la misurazione, anziché essere sostituita. Ora anche le sezioni di traccia
MethodTracing
sono incluse nella traccia Perfetto acquisita, se presente. (I9f657, b/285014599) - Aggiungi la misurazione del conteggio a
TraceSectionMetric
conMode.Sum
. (Ic121a, b/264398606)
Versione 1.2.0-alpha15
7 giugno 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha15
. La versione 1.2.0-alpha15 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un valore
MemoryUsageMetric
sperimentale per monitorare l'utilizzo della memoria di un'applicazione target. (I56453, b/133147125, b/281749311) - Aggiungi il supporto per configurazioni Perfetto completamente personalizzate con
PerfettoTrace.record
(If9d75, b/280460183) - È stata aggiunta una proprietà per saltare la generazione del profilo di riferimento. Utilizzo:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
Modifiche alle API
- L'API
collectBaselineProfile
genera sempre profili di riferimento stabili. L'APIcollectStableBaselineProfile
è stata rimossa e al suo posto dovrebbe essere utilizzatocollectBaselineProfile
. (I17262, b/281078707) - L'argomento
filterPredicate
diBaselineProfileRule
è stato modificato in un argomento non nullo, con un valore predefinito equivalente in modo che il comportamento del filtro predefinito sia più chiaro nella documentazione. (I3816e)
Correzioni di bug
- Disattiva
IsolationActivity
e il tracciamento di Perfetto indryRunMode
per migliorare significativamente le prestazioni, poiché si trattava della maggior parte del runtime. (Ie4f7d). - Supporto per il campionamento dello stack di chiamata in Macrobenchmark utilizzando gli argomenti del test di strumentazione
androidx.benchmark.profiling.mode=StackSampling
eandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Corregge l'arresto anomalo durante il rilascio di Shader su Android U (API 34) e sugli emulatori. (I031ca, b/274314544)
Versione 1.2.0-alpha14
3 maggio 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha14
. La versione 1.2.0-alpha14 contiene questi commit.
Correzioni di bug
- Correggi
FrameTimingMetric
ignorando i frame con ID frame incoerenti. Di conseguenza, alcune animazioni nelle versioni recenti della piattaforma (API 31 e versioni successive) ignoravano molti frame durante l'animazione diRenderThread
, ad esempio durante un'ondata. (I747d2, b/279088460) - È stata corretta l'analisi del processore di traccia per tracce superiori a 64 Mb. (Ief831, b/269949822)
- È stato corretto il problema di generazione del profilo di base su Android U a causa del diverso output del comando
pm dump-profiles
. (Id1392, b/277645214) - Correggi lo script di blocco dell'orologio GPU per confrontare correttamente le stringhe (I53e54, b/213935715)
Versione 1.2.0-alpha13
5 aprile 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha13
. La versione 1.2.0-alpha13 contiene questi commit.
Modifiche alle API
- È stato aggiunto il parametro del tipo di profilo durante la generazione di profili di riferimento per supportare la funzionalità del profilo di avvio imminente (Ie20d7, b/275093123)
- È stata aggiunta una nuova API
TraceMetric
sperimentale per definire metriche completamente personalizzate in base ai contenuti di una traccia Perfetto. (I4ce31, b/219851406) - Aggiungi una metrica sperimentale per determinare il numero di errori di pagina durante un benchmark. (I48db0)
Versione 1.2.0-alpha12
22 marzo 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha12
. La versione 1.2.0-alpha12 contiene questi commit.
Nuove funzionalità
- Il nuovo plug-in Gradle del profilo di base viene rilasciato in versione alpha, semplificando la generazione di un profilo di base e il flusso di lavoro degli sviluppatori.
Modifiche alle API
- Rimosso il supporto del tracciamento Perfetto sulle API 21 e 22, che include sia Microbenchmarks che le API sperimentali
PerfettoTrace
. Prima di questa versione,UiAutomation
connessioni non erano affidabili su alcuni dispositivi. (I78e8c) - È stata aggiunta un'API sperimentale pubblica per
PerfettoTraceProcessor
al fine di abilitare l'analisi dei contenuti della traccia. Si tratta di un passo verso metriche completamente personalizzate basate sui dati di traccia di Perfetto. (I2659e, b/219851406)
Versione 1.2.0-alpha11
8 marzo 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha11
. La versione 1.2.0-alpha11 contiene questi commit.
Correzioni di bug
- Sono stati corretti gli arresti anomali in
MacrobenchmarkRule
eBaselineProfileRule
durante la reinstallazione o l'estrazione di profili da un app bundle con più APK. (I0d8c8, b/270587281)
Versione 1.2.0-alpha10
22 febbraio 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha10
. La versione 1.2.0-alpha10 contiene questi commit.
Nuove funzionalità
- Su Android 14 e versioni successive, grazie a una nuova funzionalità della piattaforma, Macrobenchmark non reinstalla più le applicazioni target per reimpostare lo stato di compilazione. In precedenza, era necessario disporre di un dispositivo rooted oppure dover rimuovere tutti gli stati dell'applicazione (ad es. l'accesso dell'utente) prima dell'esecuzione di ogni benchmark. (I9b08c, b/249143766)
Correzioni di bug
- Correggi
DryRunMode
per evitare che si verifichi un arresto anomalo con un profilo vuoto a causa dell'esclusione della compilazione. Esegue invece una singola iterazione ed estrae il profilo per garantire l'acquisizione di qualcosa. (I2f05d, b/266403227) - È stato corretto l'arresto anomalo di
PowerMetric
durante il controllo della presenza di statistiche su livelli API precedenti. (5faaf9, b/268253898)
Versione 1.2.0-alpha09
11 gennaio 2023
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha09
. La versione 1.2.0-alpha09 contiene questi commit.
Correzioni di bug
- È stato attivato il passaggio di
None
aandroidx.benchmark.enabledRules
argomento di strumentazione per disattivare tutti i benchmark / la generazione del profilo di riferimento. (I3d7fd, b/258671856) - Correggi l'acquisizione di
PerfettoTrace
nei moduli dell'app (ad esempio APK di test non self-instrumentati) (I12cfc) - Ordine corretto dell'argomento pull adb del profilo di base nell'output di Studio (I958d1, b/261781624)
- L'API 33 dell'emulatore ARM ora viene riconosciuta come tale quando si tenta di eseguire un macrobenchmark e stampa correttamente l'avviso. (69133b,b/262209591)
- Salta il controllo del livello della batteria sui dispositivi senza batteria in Macrobenchmark (fe4114, b/232448937)
Versione 1.2.0-alpha08
7 dicembre 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha08
. La versione 1.2.0-alpha08 contiene questi commit.
Modifiche alle API
- Sono state aggiunte nuove API sperimentali
PerfettoTrace.record {}
ePerfettoTraceRule
per acquisire le tracce Perfetto (note anche come tracce di sistema) nell'ambito di un test, al fine di ispezionare il comportamento e le prestazioni dei test. (I3ba16) BaselineProfileRule
ora accetta un predicato di filtro anziché un elenco di prefissi dei pacchetti. In questo modo il test avrà il pieno controllo dei filtri. (I93240)- Aggiungi un'API sperimentale
BaselineProfileRule.collectStableBaselineProfile
che attende fino a quando un profilo di riferimento non è stabile per le iterazioni. (I923f3) - Aggiungi la possibilità di specificare un prefisso per il nome del file di output durante la generazione di profili di riferimento utilizzando
BaselineProfileRule
. (I7b59f, b/260318655)
Correzioni di bug
- Migliora la sicurezza della scrittura degli output dei file, il che dovrebbe impedire che i file di output non vengano scritti o aggiunti automaticamente, in particolare nell'API 21/22. (If8c44, b/227510293)
- Correggi l'output della traccia
simpleperf
per creare e posizionare il file correttamente. Inoltre, in genere questa soluzione dovrebbe risolvere i problemi relativi al pull di un file da Gradle non riuscito. (I12a1c, b/259424099) - Migliora il messaggio di errore del programma di installazione di profile visualizzato quando il programma di installazione di profile è troppo vecchio. Ora ti viene chiesto di aggiornare la versione del programma di installazione (1.2.1) per misurare i profili di riferimento sulle API dalla versione 31 alla versione 33, anziché indicare che non è supportata. (Ia517f, b/253519888)
- Correggi diversi errori dei comandi shell in seguito al messaggio di errore Stampa richiesta API <=23, inclusi errori perfetti per la configurazione binaria e l'acquisizione della traccia non riusciti (Ib6b87, b/258863685)
- Ordina automaticamente le regole del profilo generate per ridurre al minimo il numero di modifiche man mano che cambiano nel tempo (quando le regole del profilo vengono registrate nel controllo del codice sorgente). (Ie2509)
- È stato risolto l'arresto anomalo su build non rooted inferiori ad Android 13 (API 33) con 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 broadcast mancante nel manifest del programma di installazione del profilo, che non è ancora stato rilasciato. (I5c728, b/258619948) Per aggirare il problema nella tabella profileinstaller:1.3.0-alpha02
, aggiungi quanto segue al file AndroidManifest.xml della tua applicazione (non del tuo 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
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha07
. La versione 1.2.0-alpha07 contiene questi commit.
Modifiche alle API
- Aggiunge l'API
PowerMetric
per la misurazione dell'energia e della potenza in Macrobenchmarks. (Ife601, b/220183779) - È stato risolto il problema di
MacrobenchmarkScope.dropShaderCache()
che causava l'eliminazione effettiva della cache dello streamr. In questo modo vengono eliminati circa 20 ms di rumore dai benchmarkStartupMode.COLD
, poiché ora gli screener vengono cancellati in modo coerente a ogni iterazione. In precedenza, la compilazione diPartial
con iterazioni di riscaldamento indicava numeri erroneamente veloci, poiché la memorizzazione nella cache dello Shar era più probabile durante il riscaldamento. Questa correzione richiede un dispositivo rooted oppure l'utilizzo diprofileinstaller:1.3.0-alpha02
nell'app di destinazione. Per le modifiche all'API della libreriaProfileInstaller
, fai riferimento alla pagina ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) - È stato aggiunto il valore
TraceSectionMode("label", Mode.Sum)
, che consente di misurare il tempo totale trascorso in più sezioni di traccia con la stessa etichetta. Ad esempio,TraceSectionMetric("inflate", Mode.Sum)
registrerà una metricainflateMs
per il tempo totale in un macrobenchmark speso per l'inflazione. È stato anche rimosso il requisito dell'API 29, in quantoTraceSectionMetric
collabora conandroidx.tracing.Trace
per tornare a livelli API inferiori, con l'utilizzo diforceEnableAppTracing
all'interno dell'app di destinazione. (Id7b68, b/231455742)
Correzioni di bug
- È stata migliorata la sicurezza di tutti i comandi della shell interna mediante la convalida di tutti gli output e gli errori. (I5984d, b/255402908, b/253094958)
- Specifica il dispositivo nel comando
adb pull
del profilo di base, quindi il comando pull può essere semplicemente copiato se sono connessi più dispositivi (fino a un emulatore) (I6ac6c, b/223359380) - Aggiungi un errore se l'APK di test macrobenchmark non è configurato come auto-instrumentazione. Questo errore impedisce il processo macrobenchmarking dall'interno del processo dell'app di destinazione. Durante questo processo, macrobench non potrebbe essere in grado di compilare/chiudere/avviare a freddo l'app o di controllare le proprie autorizzazioni (I4279b)
- È stato risolto un problema in
measureRepeated()
per cuiStartupMode.COLD
non interrompeva il processo target dopo il giornosetupBlock
. OrasetupBlock
che interagisce con l'app non lascerà il processo dell'app in esecuzione e una misurazione dell'avvio a freddo non valida. (I8ebb7)
Versione 1.2.0-alpha06
24 ottobre 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha06
. La versione 1.2.0-alpha06 contiene questi commit.
Modifiche alle API
BaselineProfileRule
non richiede più il root su Android 13 (API 33) e non è più sperimentale. (Ie0a7d, b/250083467, b/253094958)- Questa modifica risolve anche il modo in cui i profili di un'app vengono scaricati su disco sui dispositivi non rooted, ma richiede l'aggiornamento della dipendenza del profile installatore dell'app di destinazione.
- Per utilizzare
BaselineProfileRule
oCompilationMode.Partial(warmupIterations)
su un dispositivo non rooted, devi anche aggiornare l'app di destinazione in modo che utilizziandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Ciò consente il flush del profilo su disco in modo corretto, in modo che possa essere compilato/estratto.
Correzioni di bug
- Corregge l'arresto anomalo di
SampledProfiling
sull'API 33 e versioni successive. (I40743, b/236109374)
Versione 1.2.0-alpha05
5 ottobre 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha05
. La versione 1.2.0-alpha05 contiene questi commit.
Correzioni di bug
- Correggi l'analisi dei frame nel visualizzatore tracce di sistema di Studio per le tracce acquisite di benchmark (I3f3ae, b/239677443)
- Correggi
FrameTimingMetric
per indicareFrameOverrun
come che richiede l'API 31 anziché 29 (I716dd, b/220702554) - Imposta l'iterazione in
BaselineProfileRule
e indica chiaramente se il pacchetto di destinazione non è installato (l'operazione era già stata eseguita per MacrobenchmarkRule). (Ic09a3, b/227991471)
Versione 1.2.0-alpha04
21 settembre 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha04
. La versione 1.2.0-alpha04 contiene questi commit.
Nuove funzionalità
Aggiungi al macrobenchmark il supporto per l'argomento della strumentazione
dryRunMode.enable
(già disponibile in micro) per uno sviluppo locale più rapido e la convalida dell'automazione delle app (ad es. durante l'invio). In questo modo le iterazioni vengono sostituite su 1, la compilazione viene saltata, vengono eliminati tutti gli errori di configurazione e viene disattivato l'output del file .json di misurazione. (Ib51b4, b/175149857)Nella riga di comando di Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
In build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Correzioni di bug
- È stato corretto il problema di
StartupTimingMetric
, che non richiedeva più l'avvio delle attività misurate fino al giornoMacrobenchmarkScope.startActivityAndWait()
. Ciò significa che la metrica può rilevare lanci ad es. notifiche,Context.startActivity()
, navigazione basata sull'attività in-app o comandi shell. (Ia2de6, b/245414235) - È stato corretto il bug per cui
startActivityAndWait
provava a scadere il tentativo di attesa del completamento dell'avvio sugli emulatori riducendo la severità del rilevamento del frame. (Ibe2c6, b/244594339, b/228946895)
Versione 1.2.0-alpha03
7 settembre 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha03
. La versione 1.2.0-alpha03 contiene questi commit.
Nuove funzionalità
- Sono state aggiunte API sperimentali per l'utilizzo di
BenchmarkState
in modo indipendente, separate daBenchmarkRule
/JUnit4
. (Id478f, b/228489614)
Correzioni di bug
- Aggiunto il fallback Leanback per
startActivityAndWait
. (01ed77, b/242899915)
Versione 1.2.0-alpha02
24 agosto 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha02
. La versione 1.2.0-alpha02 contiene questi commit.
Modifiche alle API
- Il valore predefinito è
am force stop
perMacrobenchmarkScope.killProcess()
, anche se rooted, tranne durante la generazione del profilo di riferimento. Può essere sostituito con un argomento booleano facoltativo. (02cce9, b/241214097)
Correzioni di bug
- Supporta la generazione di profili di base per le app di sistema. (I900b8, b/241214097)
- Supporto del controllo delle metriche di alimentazione ODPM sui dispositivi non rooted. (a38c78, b/229623230)
Versione 1.2.0-alpha01
27 luglio 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha01
. La versione 1.2.0-alpha01 contiene questi commit.
Nuove funzionalità
- Nuovo componente tracing-perfetto-common che consente agli strumenti di abilitare il tracciamento SDK Perfetto in un'app che lo espone (I2cc7f)
È stato aggiunto l'argomento di strumentazione
androidx.benchmark.enabledRules
per consentire di filtrare le esecuzioni del macrobenchmark solo per i benchmark o solo per la generazione del profilo di base. Passa in "Macrobenchmark" o "BaselineProfile" eseguire solo un tipo di test, ad esempio quando generiBaselineProfiles
su un emulatore. È supportato anche l'elenco separato da virgole. (I756b7, b/230371561)Ad es. nel file build.gradle del tuo 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
Modifiche alle API
- È stato aggiunto un nuovo
PowerMetric
per la misurazione delle attività relative a energia ed energia nei benchmark. (I9f39b, b/220183779) - È stata aggiunta una nuova modalità di compilazione
CompilationMode.Ignore
per saltare la reimpostazione e la compilazione del profilo. (Ibbcf8, b/230453509) - È stato aggiunto un nuovo parametro a
BaselineProfileRule#collectBaselineProfile
per filtrare il file di output in base ai nomi del pacchetto (If7338, b/220146561) - Consente allo sviluppatore di scaricare il dispositivo per misurare il consumo eccessivo di energia. (I6a6cb)
- Aggiunta la possibilità di svuotare la cache dello shaker in
MacrobenchmarkScope
. (I32122) - Consente allo sviluppatore di configurare la visualizzazione del tipo di metrica e del dettaglio delle categorie di sottosistema desiderate. (I810c9)
- In precedenza, nel benchmark veniva inserito un
UnsupportedOperationException
se eseguito su un dispositivo non supportato. Ora UOE si verifica solo se la metrica viene utilizzata sul dispositivo non supportato (ad es.PowerMetric.configure
). (I5cf20, b/227229375) - Sono stati aggiunti
TotalPowerMetric
eTotalEnergyMetric
per misurare la potenza e l'energia totali in ogni categoria di sistema nei macrobenchmark. (I3b26b, b/224557371)
Correzioni di bug
- Risolto un problema per cui i metodi compilati non venivano reimpostati correttamente tra ciascun macrobenchmark nelle build non rooted. Purtroppo questo richiede la reinstallazione dell'APK a ogni iterazione, che cancellerà i dati dell'applicazione per ogni macrobenchmark. (I31c74, b/230665435)
- Correggi l'arresto anomalo della registrazione di tracce sull'API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
- Rilevamento del completamento del lancio dell'attività di revisione per correggere "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)
Versione 1.1.1
Versione 1.1.1
9 novembre 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.1
. La versione 1.1.1 contiene questi commit.
Correzioni di bug
- Corregge
android.system.ErrnoException: open failed: EACCES
che si verificava su alcuni dispositivi Android11 (API 30) e versioni successive. Questa è una delle soluzioni consigliate da1.2.0-alpha01
. (aosp/2072249)
Versione 1.1.0
Versione 1.1.0
15 giugno 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0
. 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 per Jetpack Macrobenchmarks, che consente di misurare le interazioni nell'intera app come l'avvio e lo scorrimento, fornisce la possibilità di acquisire tracce e misurare le sezioni delle tracce.
Supporto per i profili di riferimento
CompilationMode.Partial
per misurare l'efficacia dei profili di riferimento.@BaselineProfileRule
per generare automaticamente profili di riferimento per un determinato percorso dell'utente critico.
Supporto per metriche di allocazione e Profilazione durante le esecuzioni di Microbenchmark.
Versione 1.1.0-rc03
1 giugno 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-rc03
. La versione 1.1.0-rc03 contiene questi commit.
Correzioni di bug
Evita di reinstallare il pacchetto di destinazione a ogni iterazione di benchmark. ( aosp/2093027, b/231976084)
Rimuovi il ritardo di
300ms
dapressHome()
. (aosp/2086030, b/231322975)Migliora la velocità di iterazione di Macrobenchmark ottimizzando i comandi Shell utilizzati in background. (aosp/2086023, b/231323582)
Supporto per i dispositivi Gradle gestiti durante la generazione di profili di riferimento con Macrobenchmark. (aosp/2062228, b/228926421)
Versione 1.1.0-rc02
11 maggio 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-rc02
. La versione 1.1.0-rc02 contiene questi commit.
- Tieni presente che questa release include una modifica del comportamento, poiché le app vengono ora completamente reinstallate tra un benchmark e l'altro per garantire misurazioni accurate.
Correzioni di bug/variazioni di comportamento
È stato risolto un problema per cui la compilazione delle app non veniva reimpostata correttamente tra i macrobenchmark e non veniva reimpostata su build non rooted. Questo risolve molti casi in cui l'esecuzione di più test avrebbe comportato un effetto minimo o nullo sulle misurazioni per
CompilationMode
. Per risolvere questo problema, l'app di destinazione sta reinstallando completamente ogni metodo di test, il che cancellerà i dati dell'applicazione tra ogni macrobenchmark. (I31c74, b/230665435)Poiché ciò impedisce alle app di impostare lo stato prima dei test, ora è possibile saltare la compilazione e la reinstallazione per consentire di aggirare questo problema. Ad esempio, puoi compilare completamente la destinazione con un comando shell
cmd package compile -f -m speed <package>
, quindi ignorare il passaggio di compilazione del macrobenchmark.Ad es. 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 possibile condividere un modulo tra macrobenchmark e un profilo di riferimento che genera test aggiungendo l'argomento di strumentazione
androidx.benchmark.enabledRules
. Passa in "Macrobenchmark" o "BaselineProfile" eseguire solo un tipo di test, ad esempio durante la generazione diBaselineProfiles
su un emulatore. (I756b7, b/230371561)Ad es. nel file build.gradle del tuo 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
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-rc01
. La versione 1.1.0-rc01 contiene questi commit.
Correzioni di bug
- I link di output del profilo di riferimento in Android Studio ora utilizzano un nome file univoco. In questo modo l'output riflette sempre gli ultimi risultati dell'utilizzo di un
BaselineProfileRule
. ( aosp/2057008, b/228203086).
Versione 1.1.0-beta06
6 aprile 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta06
. La versione 1.1.0-beta06 contiene questi commit.
Correzioni di bug
- Correggi l'arresto anomalo della registrazione di tracce sull'API 21/22 (If7fd6, b/227509388)
- Rilevamento del completamento del lancio dell'attività di revisione per correggere "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)
- Correggi le metriche di avvio per Macrobenchmark quando viene utilizzato
CompilationMode.None()
. Prima di questo cambiamento,CompilationMode.Partial()
sembrava essere più lento diCompilation.None()
. (611ac9).
Versione 1.1.0-beta05
23 marzo 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta05
. 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) - Risolto un problema per cui Macrobenchmarks non è in grado di raccogliere metriche di avvio quando si utilizza
StartupMode.COLD
. (aosp/2012227 b/218668335)
Versione 1.1.0-beta04
23 febbraio 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta04
. La versione 1.1.0-beta04 contiene questi commit.
Correzioni di bug
Correggere le metriche mancanti su Android 10 e
NoSuchElementException
dovuto alla mancata acquisizione dei nomi di processo correttamente nelle tracce. (Ib4c17, b/218668335)Usa
PowerManager
per il rilevamento della limitazione termica su Q (API 29) e successive. Questo riduce significativamente la frequenza dei falsi positivi nel rilevamento della limitazione termica (tentativo di benchmark dopo il 90 secondo assestamento) e velocizza in modo significativo i benchmark le build. Offre inoltre il rilevamento della limitazione anche quando l'orologio bloccato (se bloccato troppo in alto per il livello fisico del dispositivo dell'ambiente di rete). (I9c027, b/217497678, b/131755853)Filtra la profilazione campionata con simpleperf solo nel thread
measureRepeated
per semplificare l'ispezione (Ic3e12, b/217501939)Supporta le metriche relative a processi secondari di UI denominati nelle app con più processi (Ice6c0, b/215988434)
Filtra le regole del profilo di riferimento per avere come target Android 9 (SDK 28). aosp/1980331 b/216508418
Salta l'installazione del profilo quando utilizzi
Compilation.None()
. Inoltre, segnala gli avvisi quando l'app utilizza una versione precedente diandroidx.profileinstaller
e del plug-in Android Gradle. aosp/1977029
Versione 1.1.0-beta03
9 febbraio 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta03
. La versione 1.1.0-beta03 contiene questi commit.
Modifiche alle API
- È stato aggiunto
AudioUnderrunMetric
alla libreria macrobenchmark sotto il flag sperimentale per consentire il rilevamento di inadeguatezze audio (Ib5972) BaselineProfileRule
non accetta più un bloccosetup
perché funzionava allo stesso modo delprofileBlock
. (Ic7dfe, b/215536447)Ad es.
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
Correzioni di bug
- Risolto il problema per cui le tracce del profiler microbench non venivano aggiornate nelle esecuzioni successive se collegate nell'output di Studio (I5ae4d, b/214917025)
- Impedisci la compilazione dei comandi shell sull'API 23 (Ice380)
- Ridenominazione di
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
per 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
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta02
. La versione 1.1.0-beta02 contiene questi commit.
Correzioni di bug
- Profilo di campionamento dello stack / di tracciamento del metodo Microbenchmark i risultati sono ora collegati nell'output di Studio, in modo simile ad altri output di profilazione e non sopprimono metrica di allocazione. (Idcb65, b/214440748, b/214253245)
- Ora BaselineProfileRule stampa il comando
adb pull
in logcat e l'output di Studio per il pull del file di testo BaselineProfile generato. (F08811)
Versione 1.1.0-beta01
12 gennaio 2022
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta01
. La versione 1.1.0-beta01 contiene questi commit.
Correzioni di bug
- Corregge l'abilitazione dell'argomento del profiler che viene ignorata. (I37373, b/210619998)
- L'elemento
CompliationModes
deprecato (I98186, b/213467659) è stato rimosso - Argomento del profilo di riferimento di
CompilationMode.Partial
cambiato in enum per chiarezza. (ID67ea)
Versione 1.1.0-alpha13
15 dicembre 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha13
. La versione 1.1.0-alpha13 contiene questi commit.
Modifiche alle API
- Aggiungi il tracciamento del sistema con overhead ridotto all'output del microservizio su Android Q (API 29 e versioni successive). Tieni presente che al momento questa operazione non acquisisce il tracciamento personalizzato (tramite le API Jetpack
android.os.Trace
oandroidx.tracing
) per evitare di influire sui risultati. Il tracciamento dovrebbe essere utile per diagnosticare instabilità, soprattutto da fonti esterne al benchmark. (I298be, b/205636583, b/145598917) - Specifica
CompilationModes
in tre classi: Completa, Nessuna, Parziale. In precedenza, i nomi utilizzati in modo incoerente derivavano da argomenti di compilazione (che ora consideriamo dettagli di implementazione) e caratteristiche. Ciò rende più chiari i compromessi, le potenziali combinazioni e il comportamento delle varie versioni della piattaforma. (I3d7bf, b/207132597) - Configurazione e misurazione adesso sono sempre in coppia, in ordine. Ora puoi eseguire una query sul nome del pacchetto e sull'iterazione (anche se l'iterazione potrebbe essere
null
in alcuni scenari di riscaldamento). (Id3b68, b/208357448, b/208369635)
Correzioni di bug
- Corretto
CompilationMode.Speed
trattato in modo errato comeNone
(I01137)
Versione 1.1.0-alpha12
17 novembre 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha12
. La versione 1.1.0-alpha12 contiene questi commit.
Nuove funzionalità
- Aggiungi TracesectionMetric sperimentale per usi personalizzati basati su traccia misurazioni dei tempi. (I99db1, b/204572664)
Correzioni di bug
- Riattiva il dispositivo a ogni iterazione, per garantire che l'UI possa essere testata - richiede che la schermata di blocco sia disattivata. (Ibfa28, b/180963442)
- Corregge più arresti anomali in modalità di profilazione StackSampling su emulatori e dispositivi non rooted (Icdbda, b/202719335)
- Rimosso 0,5 secondi di sonno alla fine di ogni iterazione - se vedi metriche mancanti con questa modifica, segnala un bug. (Iff6aa).
- Riduci le possibilità di perdere i dati e l'overhead della memoria dovuto al tracciamento (Id2544, b/199324831, b/204448861)
- Riduci le dimensioni della traccia di circa il 40% passando al formato di archiviazione pianificata compatto. (Id5fb6, b/199324831)
- Le implementazioni aggiornate delle metriche di avvio in modo che terminino sempre alla fine del thread di rendering. Il contesto sarà più costante sulla piattaforma ed è più vicino alle misurazioni in-app. (Ic6b55).
Versione 1.1.0-alpha11
3 novembre 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha11
. La versione 1.1.0-alpha11 contiene questi commit.
Modifiche alle API
- Macrobenchmark ora ha un valore
minSdkVersion
di23
. (If2655). - Aggiunge un nuovo
BaselineProfileRule
sperimentale in grado di generare profili di riferimento per il percorso dell'utente critico dell'app. Seguirà la documentazione dettagliata. (Ibbefa, b/203692160) - Rimuove la variante dell'interfacciameasureRipetita, che è stata aggiunta per i chiamanti Java, in quanto causava ambiguità nel completamento/risoluzione . I chiamanti Java dovranno di nuovo restituire Unit.Instance da misurazioneRipeti. Se questo è un inconveniente, segnala un bug, in una versione futura. (Ifb23e, b/204331495)
Versione 1.1.0-alpha10
27 ottobre 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha10
. La versione 1.1.0-alpha10 contiene questi commit.
Modifiche alle API
- Backport StartupTimingMetric per ripristinare l'API 23. Questo la nuova implementazione gestisce meglio reportFullyDrawn() per attendere fino al rendering dei contenuti corrispondenti. (If3ac9, b/183129298)
- JvmOverloads è stato aggiunto a più metodi MacrobenchmarkScope per i chiamanti Java. (I644fe, b/184546459)
- Fornisci una funzione MacrobenchmarkRule.measureRipetita alternativa che usa un valore
Consumer<MacrobenchmarkScope>
per l'uso idiomatico nel linguaggio Java. (If74ab, b/184546459)
Correzioni di bug
- Correzione delle tracce che non iniziavano abbastanza presto e dei dati delle metriche mancanti. Questo problema dovrebbe risolvere il problema "Impossibile leggere le metriche durante il benchmark eccezioni causate dalla libreria stessa. (I6dfcb, b/193827052, b/200302931)
- Il nome FrameDisabledSlack è stato rinominato FrameOverrun per chiarirne il significato, ovvero quanto il frame ha superato il budget prefissato. (I6c2aa, b/203008701)
Versione 1.1.0-alpha09
13 ottobre 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha09
. La versione 1.1.0-alpha09 contiene questi commit.
Correzioni di bug
- È supportato l'eliminazione della cache delle pagine del kernel senza root sull'API 31/S+, con conseguente aumento dell'accuratezza dell'avvio di StartupMode.COLD. (Iecfdb, b/200160030)
Versione 1.1.0-alpha08
29 settembre 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha08
. La versione 1.1.0-alpha08 contiene questi commit.
Modifiche alle API
- Attiva l'esecuzione dei macrobenchmark a scorrimento per eseguire nuovamente l'API 23 (If39c2, b/183129298)
- Aggiungi un nuovo tipo di metrica campionata all'interfaccia utente e all'output JSON, incentrata su percentili di più campioni per iterazione. (I56247, b/199940612)
- Passa alle metriche con virgola mobile in tutto il benchmark librerie (troncate nell'interfaccia utente di Studio). (I69249, b/197008210)
Versione 1.1.0-alpha07
1° settembre 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha07
. La versione 1.1.0-alpha07 contiene questi commit.
Modifiche alle API
- Aumento del livello API minimo a 21 per riflettere il livello API più basso previsto da supportare in futuro. L'attuale API minima supportata continua a essere trasmessa tramite requiredApi() e attualmente è 29 (I440d6, b/183129298)
Correzioni di bug
- Corregge
ProfileInstaller
per consentire alle app che usano profili di riferimento di eseguire più facilmente MacroBenchmarks utilizzandoCompilationMode.BaselineProfile
. (I42657, b/196074999) NOTA: è necessario eseguire anche l'aggiornamento aandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
o versioni successive. - I benchmark di
StartupMode.COLD
+CompilationMode.None
sono ora più stabili. (I770cd, b/196074999)
Versione 1.1.0-alpha06
18 agosto 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha06
. La versione 1.1.0-alpha06 contiene questi commit.
Modifiche alle API
- È stato aggiunto l'argomento di strumentazione
androidx.benchmark.iterations
per consentire l'override manuale del numero di iterazioni durante i test o la profilazione locale. (6188be, b/194137879)
Correzioni di bug
- Passaggio a Simpleperf come profiler di campionamento predefinito sull'API 29 e versioni successive. (Ic4b34, b/158303822)
Problemi noti
CompilationMode.BaselineProfile
è ancora in fase di sviluppo. Evita di usarlo per stabilire quanto è valido un profilo per il momento.
Versione 1.1.0-alpha05
4 agosto 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha05
. La versione 1.1.0-alpha05 contiene questi commit.
1.1.0-alpha04
è stato annullato prima della release a causa di un arresto anomalo sporadico. b/193827052
Modifiche alle API
- startActivityAndwait è stato cambiato per richiamare l'avvio tramite
am start
, con una riduzione dei tempi il tempo di ogni iterazione di misurazione di circa 5 secondi, senza il costo del supporto oggetti "intenti" (intenzionali). (I5a6f5, b/192009149)
Correzioni di bug
- Ridurre l'aggressività del rilevamento della limitazione termica e ricalcola la base di riferimento se vengono rilevate frequentemente limitazioni. (I7327b)
- Corregge FrameTimingMetric per il funzionamento su Android S beta (Ib60cc, b/193260119)
- Usa un
EmptyActivity
per portare l'app target dallo stato di interruzione forzata e supportare meglioCompilationMode.BaselineProfile
. (Id7cac, b/192084204) - Estensione del file di traccia modificata in
.perfetto-trace
per adeguarla allo standard della piattaforma. (I4c236, b/174663039) - StartupTimingMetric ora restituisce il valore "completeDrawnMs" metrica per misurare il tempo che manca al completamento del rendering dell'applicazione. A definisci questa metrica per la tua app, chiama Activity.reportFullyDrawn quando i contenuti iniziali sono pronti, ad esempio quando gli elementi iniziali dell'elenco vengono caricati dal database o dalla rete. (metodo reportFullyDrawn disponibile senza controlli della versione di build su ComponentActivity). Tieni presente che il test deve essere eseguito abbastanza a lungo da acquisire la metrica (startActivityAndwait non attende reportFullyDrawn). (If1141, b/179176560)
- Riduci di oltre 50 ms il costo dell'aggiunta di metadati UI alle tracce (Ic8390, b/193923003)
- Aumento drasticamente della frequenza di polling all'arresto di tracciamento, che può ridurre, ad es. del 30% in più del tempo di esecuzione del benchmark di avvio (Idfbc1, b/193723768)
Versione 1.1.0-alpha03
16 giugno 2021
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha03
. La versione 1.1.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un nuovo
CompilationMode.BaselineProfile
ai profili di supporto installati utilizzando la libreria Jetpack ProfileInstaller. (aosp/1720930)
Correzioni di bug
Il codice Gradle di esempio per l'eliminazione degli errori di benchmark è stato aggiornato in modo da utilizzare un'API non deprecata con una sintassi che supporta anche gli utenti .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 del benchmark porta un grande componente al benchmarking: Macrobenchmark. Oltre a benchmark, che 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 ulteriori informazioni, consulta la documentazione della libreria.
Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha02
. La versione 1.1.0-alpha02 contiene questi commit.
Nuove funzionalità
Artefatti Macrobenchmark aggiunti (androidx.benchmark:benchmark-macro-junit4
e androidx.benchmark:benchmark-macro
)
- Acquisisci metriche sulle prestazioni di avvio, scorrimento e animazione dalla tua app, in locale o in CI
- Acquisisci e controlla le tracce da Android Studio
Correzioni di bug
- Soluzione alternativa problema di autorizzazioni della shell con la directory di output su Android 12 (nota: potrebbe richiedere l'aggiornamento del plug-in Android 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)
- Supporta la memorizzazione nella cache della configurazione in Benchmarkplug (6be1c1, b/159804788)
- Output file semplificato: attivo per impostazione predefinita, in una directory che non richiede
requestLegacyExternalStorage=true
(8b5a4d, b/172376362) - Corregge gli avvisi di stampa della libreria relativi alla mancata ricerca Thread JIT sulle versioni della piattaforma in cui non è presente. (I9cc63, b/161847393)
- Correzione della frequenza massima del dispositivo di lettura. (I55c7a).
Versione 1.1.0-alpha01
10 giugno 2020
Vengono rilasciate le funzionalità 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
. La versione 1.1.0-alpha01 contiene questi commit.
Nuove funzionalità di 1.1
- Metrica di allocazione: dopo il riscaldamento e il tempo, i benchmark ora eseguono una fase aggiuntiva, registrando i conteggi delle allocazioni. Le allocazioni possono causare problemi di prestazioni sulle versioni precedenti della piattaforma (140 ns in O diventano 8 ns in M - misurati su Nexus5X, con orologi bloccati). Questa metrica viene visualizzata nell'output della console di Android Studio e nella
- Supporto della profilazione - Ora puoi acquisire i dati di profilazione per un'esecuzione di benchmark, in modo da esaminare i motivi per cui il codice potrebbe essere eseguito lentamente. Il benchmark supporta l'acquisizione del tracciamento dei metodi o del campionamento dei metodi da ART. Questi file possono essere ispezionati con il profiler all'interno di Android Studio utilizzando File > Apri.
- Il plug-in Benchmark Gradle ora fornisce valori predefiniti per una configurazione più semplice:
testBuildType
è impostato per il rilascio per impostazione predefinita, per evitare di utilizzare dipendenze con copertura del codice integrata. Il tipo di build della release viene configurato anche come buildType predefinito, che consente ad Android Studio di selezionare automaticamente la variante di build corretta alla prima apertura di un progetto. (b/138808399)signingConfig.debug
viene utilizzata come configurazione predefinita della firma (b/153583269)
** Correzioni di bug **
- Riduzione significativa dell'overhead della transizione di riscaldamento, in cui la prima misurazione per ogni benchmark era artificialmente più elevata rispetto ad altre. Questo problema era più pronunciato nei benchmark molto piccoli (1 microsecondo o meno). (b/142058671)
- È stato corretto
InstrumentationResultParser
errore stampato per ogni benchmark durante l'esecuzione dalla riga di comando. (I64988, b/154248456)
Problemi noti
- Riga di comando e chiamate gradle del benchmark non stampano i risultati direttamente. Puoi ovviare a questo problema eseguendo in Studio o analizzando il file di output JSON per trovare i risultati.
- I report di benchmark non riescono a generare 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 Gradle alla versione 4.2-alpha01 o versioni successive.
Versione 1.0.0
Versione benchmark 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 rilasciate senza modifiche dalla versione 1.0.0-rc01. La versione 1.0.0 contiene questi commit.
Funzionalità principali di 1.0.0
La libreria di benchmark ti consente di scrivere benchmark delle prestazioni del codice dell'app e 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 in integrazione continua per osservare le prestazioni del codice nel tempo ed evitare regressioni.
Le principali funzionalità includono:
- Stabilizzazione orologio
- Assegnazione automatica della priorità ai thread
- Supporto per i test delle prestazioni dell'interfaccia utente, ad esempio nell'esempio di RecyclerView
- Riscaldamento e loop con JIT
- Output benchmark JSON per la post-elaborazione
Versione 1.0.0-rc01
23 ottobre 2019
Vengono rilasciate le funzionalità 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
. La versione 1.0.0-rc01 contiene questi commit.
Nuove funzionalità
- Aggiunta del tracciamento di systrace ai benchmark
Correzioni di bug
- È stato risolto il problema di instabilità delle metriche per cui JIT non veniva terminata prima del riscaldamento a causa della riduzione delle priorità (b/140773023)
- Directory di output JSON unificata su Android Gradle Plugin 3.5 e 3.6
Versione 1.0.0-beta01
9 ottobre 2019
Vengono rilasciate le funzionalità 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
. La versione 1.0.0-beta01 contiene questi commit.
Nuove funzionalità
- Esegui la garbage collection prima di ogni riscaldamento per ridurre la pressione della memoria da un benchmark alla perdita 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 strumentazione
additionalTestOutputDir
per l'output nel plug-in Android Gradle 3.6, per sapere quando AGP gestirà la copia dei dati. - Correggi la frequenza di orologio non rilevata in JSON per stampare correttamente
-1
(b/141945670).
Versione 1.0.0-alpha06
18 settembre 2019
Vengono rilasciate le funzionalità 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
. La versione 1.0.0-alpha06 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un controllo relativo all'utilizzo non corretto del pacchetto precedente per l'esecutore del test, 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
Vengono rilasciate le funzionalità 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
. 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 dell'orologio, che non andava a buon fine sui dispositivi in cui mancavano le utilità della shell
cut
oexpr
. - È stato risolto un problema relativo all'attività
./gradlew lockClocks
che si bloccava sui dispositivi rooted con una versione precedente dell'utilità su, che non supportava il flag-c
.
Versione 1.0.0-alpha04
7 agosto 2019
Vengono rilasciate le funzionalità 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
. I commit inclusi in questa versione sono disponibili qui.
È stata aggiunta anche nuova documentazione su come utilizzare la libreria di benchmark senza Gradle, sia per l'utilizzo con diversi sistemi di build (come Bazel o Buck) sia durante l'esecuzione in CI. Per saperne di più, vedi Creare benchmark senza Gradle ed Eseguire benchmark nell'integrazione continua.
Nuove funzionalità
- Plug-in Gradle
- Ora la copertura di test viene disabilitata automaticamente e viene impostato il valore
AndroidBenchmarkRunner
per impostazione predefinita (b/138374050) - Aggiunto il supporto per la nuova copia dei dati basata su AGP durante l'esecuzione di benchmark e l'utilizzo di AGP 3.6 o versioni successive
- Ora la copertura di test viene disabilitata automaticamente e viene impostato il valore
- Aggiunte in formato JSON
- Tempo di esecuzione totale del test benchmark dell'output (b/133147694)
- I benchmark di
@Parameterized
che utilizzano una stringa di nomi (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 prova per eseguire ogni loop di benchmark una sola volta, al fine di verificare la presenza di errori/arresti anomali senza acquisire le misurazioni. Può essere utile, ad esempio, Ad esempio, eseguire rapidamente dei benchmark prima dell'invio per verificare che non siano danneggiati.
Modifiche alle API
- La struttura del modulo è cambiata e la libreria è stata suddivisa (b/138451391)
benchmark:benchmark-junit4
contiene classi con dipendenza JUnit:AndroidBenchmarkRunner
eBenchmarkRule
, entrambe spostate nel pacchettoandroidx.benchmark.junit4
benchmark:benchmark-common
contiene il resto della logica, inclusa l'API BenchmarkState- Questa suddivisione consentirà alla libreria di supportare il benchmarking senza API JUnit4 in futuro
- Gli avvisi relativi alla configurazione ora vengono trattati come errori e causano l'arresto anomalo del test (b/137653596)
- Questo viene fatto per incoraggiare ulteriormente misurazioni accurate, soprattutto in CI
- 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 una memoria esterna sui dispositivi Q forniscono messaggi più descrittivi, con suggerimenti su come risolvere il problema
- Le schermate vengono attivate automaticamente durante le esecuzioni di benchmark anziché non riuscire quando lo schermo è spento
Contributi esterni
- Grazie a Sergey Zakharov per il suo contributo ai miglioramenti dell'output JSON e per la correzione dei problemi di blocco dello schermo.
Versione 1.0.0-alpha03
2 luglio 2019
Vengono rilasciate le versioni androidx.benchmark:benchmark:1.0.0-alpha03
e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Esponi la durata del sonno a causa della limitazione termica per benchmark nel report JSON completo
Correzioni di bug
- Non dovrebbe più essere necessario applicare il plug-in Gradle dopo i plug-in Android e il blocco Android
- Aggiunge il supporto dei report di benchmark sui dispositivi Android 10 che usano l'archiviazione mirata
Versione 1.0.0-alpha02
6 giugno 2019
androidx.benchmark:1.0.0-alpha02
e
Vengono rilasciati androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
. La
i commit inclusi in questa versione sono disponibili qui.
Tieni presente che consideriamo lo schema JSON come un'API. Abbiamo intenzione di seguire lo stesso vincoli di stabilità come altre API: stabili (con eccezioni molto rare) una volta sola beta e risolti nella versione finale, con aggiunte solo a release di minore entità e modifiche/rimozioni nelle release principali.
Modifiche alle API
Schema JSON revisionato. È probabile che ulteriori modifiche allo schema JSON siano limitato alle aggiunte:
- Struttura degli oggetti dei risultati riorganizzata per supportare gruppi di metriche aggiuntivi nel futuro (b/132713021)
- Sono state aggiunte informazioni sul contesto dell'esecuzione dei test, ad esempio 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 la parola "ns" (b/132714527)
- Statistiche aggiuntive aggiunte per metrica registrata (massima, mediana, minima) e "nano" semplificati rimossi statistica riepilogo (b/132713851)
Output XML rimosso (b/132714414)
Rilevamento della limitazione termica rimosso dall'API
BenchmarkState.reportData
(b/132887006)
Correzioni di bug
- Risolto il problema di
./gradlew lockClocks
non bloccato su alcuni dispositivi con sistemi operativi recenti (b/133424037) - Rilevamento della limitazione disabilitato per l'emulatore (b/132880807)
Versione 1.0.0-alpha01
7 maggio 2019
Viene rilasciato androidx.benchmark:benchmark:1.0.0-alpha01
. I commit inclusi
in questa versione sono disponibili
qui