Benchmark
Ultimo aggiornamento | Release stabile | Candidato per la release | Versione beta | Versione alpha |
---|---|---|---|---|
13 novembre 2024 | 1.3.3 | - | - | 1.4.0-alpha05 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza da Benchmark, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.
Macrobenchmark
Per utilizzare Macrobenchmark nel tuo progetto, aggiungi le seguenti dipendenze al file build.gradle
per il modulo macrobenchmark:
Alla moda
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.0") }
Microbenchmark
Per utilizzare Microbenchmark nel tuo progetto, aggiungi le seguenti dipendenze al file build.gradle
per il modulo microbenchmark:
Alla moda
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
La libreria Microbenchmark fornisce inoltre un plug-in Gradle da utilizzare con il modulo microbenchmark.
Questo plug-in imposta le impostazioni predefinite della configurazione di compilazione per il modulo,
copia dell'output del benchmark nell'host,
e fornisce la
./gradlew lockClocks
attività.
Per utilizzare il plug-in, includi la seguente riga nel blocco "plugins" nella finestra di primo livello
File build.gradle
:
Alla moda
plugins { id 'androidx.benchmark' version '1.3.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.0" apply false }
Quindi applica il plug-in al file build.gradle
del modulo di benchmark
Alla moda
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 crearne uno nuovo, 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 ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.
Versione 1.4
Versione 1.4.0-alpha05
13 novembre 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05
viene rilasciato. La versione 1.4.0-alpha05 contiene questi commit.
Correzioni di bug
- È stato risolto un problema nell'API 34 e versioni successive per cui
CompilationMode.None()
aveva un rendimento incoerente non rappresentativo del rendimento iniziale peggiore. In questo modo si aggira una modifica della piattaforma che consente allo stato di compilazione di ARTverify
di compilare parzialmente le app (influendo solo sul caricamento delle classi) poco dopo il primo avvio. (Ie48d0) - È stato risolto un problema per cui potevano essere acquisite tracce (in particolare brevi) che non registravano la misurazione delle metriche Macrobenchmark integrate, a causa del troncamento del nome del processo all'interno della traccia Perfetto. Ora macrobenchmark risolve il problema cercando il nome del pacchetto troncato in tutte le query predefinite, oltre al nome del pacchetto previsto. Tieni presente che le implementazioni personalizzate di
TraceMetric
o altri chiamanti diretti diPerfettoSession.query
possono implementare lo stesso comportamento sostituendoprocess.name LIKE "$packageName"
in una query Perfetto con(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
. (I5bf01, b/377565760)
Versione 1.4.0-alpha04
30 ottobre 2024
androidx.benchmark:benchmark-*:1.4.0-alpha04
viene rilasciato. La versione 1.4.0-alpha04 contiene questi commit.
Nuove funzionalità
- (Sperimentale) Attiva la generazione del profilo di riferimento e il benchmarking delle app installate per un utente secondario, ad esempio qualsiasi app sui 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
- Ora
isProfileable
viene sempre sostituito nelle build di benchmark e ancheisDebuggable
viene sempre sostituito nelle build di benchmark enonMinified
(acquisizione del profilo di riferimento). (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 in modo errato) (Ic3e08, b/374362482) - Nelle metriche
CpuEventCounter
, viene generato un errore 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
viene rilasciato. La versione 1.4.0-alpha03 contiene questi commit.
Modifiche all'API
- Macrobenchmark: aggiunge
ArtMetric
, che può essere utilizzato per controllare la copertura del profilo o il rendimento generale del runtime di Android. Acquisisce il numero e la durata totale di JIT, dell'inizializzazione della classe (se disponibile) e della verifica della classe. Inoltre, modificaCaptureInfo
in modo da includere la versione principale ART facoltativa con quella predefinita. (I930f7) - Aggiungi
coefficientOfVariation
all'output JSON del benchmark per mostrare la stabilità all'interno di una determinata esecuzione del benchmark. (Ib14ea)
Correzioni di bug
- È stato corretto il problema
CollectBaselineProfileTask
quando il dispositivo AVD contiene spazi. (Ia0225, b/371642809) - Correzione speculativa per gli errori delle eccezioni
StartupMode.COLD
:Package <packagename> must not be running prior to cold start!
. Ora,MacrobenchmarkScope.killProcess()
(inclusa quella eseguita prima di ogni iterazione, utilizzata per implementare il comportamento diStartupMode.COLD
) attenderà per verificare che tutti i processi dell'app siano stati interrotti. (I60aa6, b/351582215) - È stato risolto un problema per cui veniva visualizzato l'errore UNLOCKED_ su alcuni emulatori con root. (Ic5117)
- Questa libreria ora utilizza le annotazioni di nullità JSpecify, che sono di tipo di utilizzo. Gli sviluppatori Kotlin devono utilizzare i seguenti argomenti del compilatore per applicare l'utilizzo corretto:
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
(I7104f, b/326456246)
Versione 1.4.0-alpha02
2 ottobre 2024
androidx.benchmark:benchmark-*:1.4.0-alpha02
viene rilasciato. La versione 1.4.0-alpha02 contiene questi commit.
Modifiche all'API
- Le attività Gradle
lockClocks
eunlockClocks
sono state spostate nei progetti di benchmark, anziché essere disponibili a livello superiore. Questa modifica è stata necessaria perché, purtroppo, non è possibile registrarle come azioni di primo livello senza compromettere l'isolamento del progetto. (I02b8f, b/363325823)
Correzioni di bug
BaselineProfileRule
ora raccoglie i profili per le app multi-processo segnalando a ogni processo in esecuzione alla fine del blocco di eseguire il dump dei profili. Se una compilazione basata su profilo non trova mai un processo di trasmissione, la compilazione non andrà a buon fine, in quanto non è previsto che contenga dati del profilo. Inoltre, è stato aggiunto un argomento di misurazione per controllare la durata dell'attesa del dump:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469)- Da Benchmark
1.3.2
: è stato corretto il problema che impediva a Firebase Test Lab (FTL) di estrarre i file dei risultati del profilo di riferimento o del benchmark macro dal plug-in Gradle del profilo di riferimento. (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 riferimento:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Versione 1.4.0-alpha01
18 settembre 2024
androidx.benchmark:benchmark-*:1.4.0-alpha01
viene rilasciato. La versione 1.4.0-alpha01 contiene questi commit.
Nuova funzionalità: App Startup Insights
- La versione iniziale degli approfondimenti sull'avvio dell'app può essere attivata in Macrobenchmark. (09fae38)
Per attivare un benchmark all'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 all'avvio analizzerà la traccia per cercare i problemi più comuni e li stamperà dopo le metriche nell'output del test di Studio nella scheda del 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 e sono previsti miglioramenti alla documentazione e all'estensibilità, ma sono ben accetti i feedback.
Nuove funzionalità
- È stata aggiunta la proprietà gradle
androidx.baselineprofile.suppressWarnings
per eliminare tutti gli avvisi relativi al profilo di riferimento. (314153a) - Le metriche di Microbench ora vengono visualizzate nelle tracce di Perfetto come contatori. (3214854)
- Aggiungi script sperimentali per disattivare il JIT (richiede il riavvio di root / runtime) e reimpostare lo stato di test/prestazioni del dispositivo. Al momento non vengono pubblicati come attività Gradle. (7c3732b)
- È stato aggiunto l'argomento benchmark per saltare i test durante l'esecuzione sull'emulatore. Quando la compilazione
automaticGenerationDuring
è attivata, i benchmark attiveranno anche la generazione del profilo di riferimento. L'operazione non andrà a buon fine se vengono utilizzati emulatori. Con il nuovo argomentoskipBenchmarksOnEmulator
possiamo invece saltare il test. (0c2ddcd) - Modifica della logica di abilitazione degli eventi relativi alle prestazioni per l'esecuzione su API 23 e versioni successive (2550048)
Modifiche all'API
- L'argomento
PerfettoConfig
sperimentale esistente perMacrobenchmarkRule.measureRepeated()
è stato spostato nel nuovo oggettoExperimentalConfig
.
Correzioni di bug
- Aumenta il numero di tentativi
lockClocks.sh
(99e9dac) - Non creare tipi di build
nonMinified
e di benchmark se esistono già. A causa di un bug, anche se i tipi di buildnonMinified
e benchmark esistevano, sarebbero stati ricreati. (e75f0a5) - Ignora i segmenti non terminanti dai risultati di
TraceSectionMetric
. (a927d20) - Controllo dell'emulatore migliorato per prendere in considerazione il prefisso
sdk_
. (1587de8) - Tratta i pacchetti non in esecuzione come approvati in
FrameTimingGfxInfoMetric
. (35cc79c) - Correzione del problema che causava la generazione di valori corrotti per gli eventi non di istruzione da parte di
androidx.benchmark.cpuEventCounter
. (06edd59) - Correggi
resumeTiming/runWithTimingDisabled
in modo da rispettare l'ordine di priorità delle metriche e riduci in modo significativo l'impatto della sospensione/ripresa delle metriche con priorità inferiore sui risultati delle metriche con priorità più elevata. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di misurazionecpuEventCounter.enable
, il tempo in nanosecondi non viene più ridotto in modo significativo quando si verificano interruzioni/ripresi. (5de0968)
Versione 1.3
Versione 1.3.3
16 ottobre 2024
androidx.benchmark:benchmark-*:1.3.3
viene rilasciato. La versione 1.3.3 contiene questi commit.
Correzioni di bug
- È stato corretto il problema relativo al valore
CollectBaselineProfileTask
quando il dispositivo AVD contiene spazi (Ia0225, b/371642809)
Versione 1.3.2
2 ottobre 2024
androidx.benchmark:benchmark-*:1.3.2
viene rilasciato. La versione 1.3.2 contiene questi commit.
Correzioni di bug
- È stato corretto il problema per cui Firebase Test Lab (FTL) non riusciva a estrarre i file dei risultati del profilo di riferimento o del benchmark macro dal plug-in Gradle del profilo di riferimento. (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 riferimento:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Versione 1.3.1
18 settembre 2024
androidx.benchmark:benchmark-*:1.3.1
viene rilasciato. La versione 1.3.1 contiene questi commit.
Correzioni di bug
- È stata aggiunta la proprietà gradle
androidx.baselineprofile.suppressWarnings
per eliminare tutti gli avvisi relativi al profilo di riferimento (I7c36e, b/349646646) - È stato corretto il plug-in Gradle del profilo di riferimento in modo che utilizzi
nonMinified…
ebenchmark…
preesistenti, se creati dall'app, anziché creare wrapper. (Ia8934, b/361370179) - È stato corretto il problema relativo a
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
quandoautomaticGenerationDuringBuild
è attivato 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.RunListener
nella libreria di benchmark ProGuard (Ic8ed5, b/354264743) - Correggi
TraceSectionMetric
in Ignora sezioni non terminanti. In precedenza, questi elementi erano considerati con una durata pari a -1, ad esempio durante la somma o la ricerca della durata minima. (If74b7) - È stato risolto un problema in
FrameTimingGfxInfoMetric
per cui l'avvio della metrica causava un arresto anomalo se il processo non era già in esecuzione. (I6e412)
Versione 1.3.0
21 agosto 2024
androidx.benchmark:benchmark-*:1.3.0
viene rilasciato. La versione 1.3.0 contiene questi commit.
Modifiche ai microbenchmark dalla versione 1.2.0
- Il monitoraggio dei metodi è attivo per impostazione predefinita nei microbenchmark quando viene eseguito sulla maggior parte dei dispositivi.
- Il monitoraggio dei metodi viene eseguito come fase separata, dopo le misurazioni, in modo da poter generare misurazioni e tracce dei metodi accurate da un'unica esecuzione del benchmark.
- Il monitoraggio dei metodi su alcune versioni del sistema operativo Android e di ART influisce sulle fasi di misurazione successive. In queste versioni, il monitoraggio dei metodi è disattivato per impostazione predefinita e viene stampato un avviso nell'output di Studio
- Benchmark del thread principale e ANR
- È stato aggiunto
measureRepeatedOnMainThread
per i benchmark dei thread dell'interfaccia utente (ad es. quelli che interagiscono con le UI di Compose/View) per evitare ANR quando vengono eseguiti per molti secondi. - Le tracce dei metodi vengono ignorate se si prevede che supereranno la scadenza per l'evitare ANR. Imposta
androidx.benchmark.profiling.skipWhenDurationRisksAnr
su false per disattivare questo comportamento (non consigliato per le esecuzioni di CI, poiché gli ANR possono causare problemi nelle esecuzioni di CI lunghe).
- È stato aggiunto
- Minimizzazione
- Regole ProGuard incorporate per migliorare il microbenchmarking con la minimizzazione abilitata
- La minimizzazione/R8 in un modulo della libreria richiede AGP 8.3 e può essere attivata tramite
android.buildTypes.release.androidTest.enableMinification
inbuild.gradle
- È stata aggiunta l'API
BlackHole.consume()
sperimentale per impedire l'eliminazione del codice inutilizzato (If6812, b/286091643)
- Metriche
- Funzionalità sperimentale del contatore di eventi della CPU (metriche da
perf_event_open
, che richiede il privilegio di accesso come utente root sulla maggior parte delle versioni della piattaforma), accesso tramiteInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(può essere impostato sutrue
) eandroidx.benchmark.cpuEventCounter.events
può essere impostato ad esempio su (Instructions,CpuCycles
). Questa funzionalità dovrebbe essere supportata su alcuni emulatori userdebug, ma il supporto non è stato testato su tutti gli emulatori disponibili
- Funzionalità sperimentale del contatore di eventi della CPU (metriche da
Modifiche a MACRObenchmark dalla versione 1.2.0
- Revisione del monitoraggio dei metodi per i macrobenchmark.
- Ora le tracce dei metodi sono limitate alla durata del
measureBlock
e possono acquisire più sessioni se il processo viene avviato più volte. - In precedenza, il monitoraggio dei metodi funzionava solo per i benchmark
StartupMode.COLD
e non acquisiva nulla permeasureBlocks
che non riavviava il processo target - È stato corretto lo svuotamento delle tracce dei metodi nel macrobenchmark, in modo che le tracce dei metodi siano completamente acquisite e valide, anche su dispositivi più lenti. (I6349a, b/329904950)
- Ora le tracce dei metodi sono limitate alla durata del
- Esegui il dump corretto del profilo ART durante le singole iterazioni di
warmUp
quando il processo viene interrotto in modo che le misurazioni diCompilationMode.Partial(warmup=N)
siano più precise. (I17923) - Messaggio di errore di trasmissione del shader in caso di abbandono
- Sono stati aggiunti suggerimenti di debug per il messaggio di errore di trasmissione dell'shader
- Aggiungi due argomenti di strumenti per eseguire l'override del comportamento di abbandono degli shader per risolvere i problemi di arresto anomalo durante il benchmarking delle app senza
ProfileInstaller
1.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 delle app che non utilizzano ancora ProfileInstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: può essere utilizzato per tollerare gli errori quando si tenta di inserire shader, ad esempio durante il benchmarking delle app senza profileinstaller 1.3 (I4f573)
- È stata aggiunta la variante sperimentale
MacrobenchmarkRule#measureRepeated
che accetta unPerfettoConfig
personalizzato per la registrazione di tracce Perfetto completamente personalizzate. Tieni presente che le configurazioni configurate in modo errato potrebbero causare l'errore delle classi Metric integrate. (Idfd3d, b/309841164, b/304038384) - Annullare i job dexopt in background prima di eseguire un benchmark macro per ridurre le interferenze. (I989ed)
- Ora Macrobenchmark attende 1 secondo affinché l'applicazione di destinazione svuoti un profilo ART (in precedenza attendeva 500 ms). (I85a50, b/316082056)
- Revisione di TraceSectionMetric
- Nota: le modifiche
TraceSectionMetric
riportate di seguito possono influire sugli output nell'utilizzo del CI e potrebbero creare discontinuità o interrompere l'analisi sintattica - La somma è ora il valore predefinito, poiché la maggior parte dell'utilizzo di questa metrica riguarda eventi ripetuti e la prima escluderebbe i dati in questi casi.
- È stata modificata per essere più personalizzabile e sono disponibili più modalità
- I nomi delle modalità ora sono incorporati nel nome dell'output della metrica (in Studio e JSON)
- Ora supporta i segmenti creati utilizzando
Trace.{begin|end}AsyncSection
.
- Nota: le modifiche
- Metriche
- Alimentazione: sono stati aggiunti
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
ePowerMetric.deviceSupportsPowerEnergy()
Metric.getResult
è stato rinominato ingetMeasurements
per corrispondere al tipo di ritorno- Sono state aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento all'avvio. Ciò non cambia il comportamento attuale (quindi alcuni errori vengono generati e altri non riescono a rilevare l'avvio in silenzio), ma lo rende più comprensibile. In genere, quelli che
Log.w()
e non riescono a registrare le metriche di avvio sono quelli in cui mancano gli eventi non frame, vengono lanciate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sui tempi dei frame (dalle sezioni UI/RT). (Id240f, b/329145809) - È stata aggiunta la misurazione
frameCount
aFrameTimingMetric
per facilitare il rilevamento di scenari in cui le misurazioni cambiano a causa della modifica del numero di frame prodotti (nuove animazioni aggiunte, problemi di convalida risolti). (I1e5aa) - È stato chiarito che
frameOverrunMs
è la metrica preferita per il monitoraggio, se disponibile nei documenti, e il motivo. (I18749, b/329478323) - È stato risolto il problema per cui i fotogrammi non terminati all'inizio e alla fine della traccia potevano essere accoppiati, il che generava un report errato come un singolo fotogramma estremamente lungo. (I39353, b/322232828)
- Migliora l'errore
FrameTimingMetric
quando non vengono prodotti frame e sempre l'output del link alla traccia in caso di analisi delle metriche non riuscita per contribuire alla diagnosi del problema. (I956b9) - È stato corretto l'arresto anomalo in
FrameTimingMetric
dovuto alla mancata analisi dell'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276) - È stata allentata la severità dei controlli in
FrameMetrics
e sono stati aggiunti ulteriori dettagli ai messaggi di errore. (Iadede)
- Alimentazione: sono stati aggiunti
Modifiche al plug-in Gradle / Baseline Profile Capture dalla versione 1.2.0
- È stata aumentata la versione massima consigliata di AGP a 9.0.0-alpha01.
- Assicurati che le attività
mergeArtProfile
emergeStartupProfile
aspettino sempre la generazione del profilo di riferimento. (I623d6, b/343086054) - La generazione di un profilo di riferimento riuscito genera un riepilogo delle modifiche (I824c8, b/269484510)
- È stato aggiunto un DSL per disattivare gli avvisi (Ic4deb, b/331237001)
- Correzione per garantire che i benchmark utilizzino i profili di riferimento generati quando
automaticGenerationDuringBuild
è disattivato (Ic144f, b/333024280) - Correggi le sostituzioni delle proprietà del plug-in
BaselineProfile
per abilitare la generazione del profilo di riferimento e il benchmarking durante la personalizzazione di un tipo di buildnonMinified
o di benchmark. (Ib8f05, b/324837887) - Correzione per l'inclusione dei profili di riferimento della libreria nell'AAR precedente ad 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)
Altre modifiche significative dalla versione 1.2.0
- Acquisizione di traccia
- Errore EXITCODE 2 ridotto all'avvio di perfetto da un errore ad avviso registrato
- Attiva il monitoraggio AIDL per impostazione predefinita nei benchmark(richiede l'API 28) (Ia0af2, b/341852305)
- Attiva il monitoraggio dei tag porter per impostazione predefinita nei benchmark. Vengono acquisiti, ad esempio, i tracepoint di wakelock. (Icfe44, b/286551983)
- È stato aumentato il timeout di inizio dell'acquisizione delle tracce per evitare arresti anomali all'avvio del monitoraggio su dispositivi più lenti (I98841, b/329145808)
- Sono state aggiunte le API pubbliche
PerfettoTraceProcessor.Session.queryMetrics
con varianti JSON, textproto e proto binary (non decodificate). Ti consentono di eseguire query sulle metriche integrate inTraceProcessor
(I54d7f, b/304038382) - Attiva l'avvio bloccato nel record della traccia Perfetto per ridurre il rischio di dati mancanti all'inizio della traccia. Supportato solo su API 33 e versioni successive. (Ie6e41, b/310760059)
- Output JSON
- Sono state aggiunte informazioni aggiuntive 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
- Deve essere uguale a android.os.Build.IDcontext.build.version.codename
- È uguale a android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
: corrisponde alla prima lettera del nome in codice della pre-release (incluse le build di release) (Ie5020)
- È stato aggiunto l'elenco
profilerOutput
all'output JSON per semplificare gli 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ò comporterà la sovrascrittura ripetuta dei file JSON di output per modulo. (Ia1af6, b/286899049)
- Viene lanciato 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
viene rilasciato. La versione 1.3.0-rc01 contiene questi commit.
Correzioni di bug
- Correzione di
androidx.benchmark.cpuEventCounter
che genera valori corrotti per gli eventi non di istruzione (I7386a, b/286306579) - Correggi
resumeTiming
/runWithTimingDisabled
in modo da rispettare l'ordine di priorità delle metriche e riduci in modo significativo l'impatto della sospensione/ripresa della metrica con priorità inferiore sui risultati delle metriche con priorità più elevata. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di misurazionecpuEventCounter.enable
, il tempo in nanosecondi non viene più ridotto in modo significativo quando si verificano interruzioni/ripresi. (I39c2e, b/286306579, b/307445225) - Possibilità ridotta che il campionamento dello stack causi il raggiungimento del timeout rigido del thread principale di
measureRepeatedOnMainThread
spostando la conversione del campionamento dello stack dal thread principale. (I487a8, b/342237318) - È stato rimosso il riepilogo manuale dell'accesso alle nuove API di piattaforma, poiché questo avviene automaticamente tramite la definizione del modello API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). I clienti che non utilizzano AGP sono invitati a eseguire l'aggiornamento alla versione 8.1 o successive di D8. Consulta questo articolo per ulteriori dettagli. (I9496c, b/345472586)
- È stato aggiunto il controllo della versione agp per inviare il nome del pacchetto come argomento instr. Prima di AGP 8.4.0, il nome del pacchetto dell'app di destinazione non poteva essere inviato all'app di misurazione tramite gli argomenti di misurazione. (0c72a3f)
Versione 1.3.0-beta02
10 luglio 2024
androidx.benchmark:benchmark-*:1.3.0-beta02
viene rilasciato. La versione 1.3.0-beta02 contiene questi commit.
Correzioni di bug
- Gestisci in modo elegante il codice di uscita
2
all'avvio di Perfetto per registrare un avviso, ma procedi.
Versione 1.3.0-beta01
12 giugno 2024
androidx.benchmark:benchmark-*:1.3.0-beta01
viene rilasciato. La versione 1.3.0-beta01 contiene questi commit.
Modifiche all'API
- Per coerenza,
MethodTracing.affectsMeasurementOnThisDevice
è stato rinominato inAFFECTS_MEASUREMENT_ON_THIS_DEVICE
. (I1bdfa) - È stata aggiunta l'API sperimentale
BlackHole.consume()
per impedire l'eliminazione del codice inutilizzato nei microbenchmark. (If6812, b/286091643) - Ora il microbenchmark viene lanciato correttamente per impedire che il monitoraggio dei metodi interferisca con le misurazioni. Questo si verifica su alcuni dispositivi quando il monitoraggio dei metodi viene attivato forzatamente (tramite gli argomenti di strumenti 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 esecuzione tramiteProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. (Iafb92, b/303660864)
Correzioni di bug
- La versione massima dell'agp consigliata è stata aumentata a 9.0.0-alpha01. (I5bbb0)
- È stata aggiunta la modalità di compilazione al contesto del benchmark (If5612, b/325512900)
- Attiva il monitoraggio AIDL per impostazione predefinita (richiede l'API 28) (Ia0af2, b/341852305)
- Sono state aggiunte informazioni aggiuntive 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 pre-release (anche nelle build di release) (Ie5020)
- Corregge
StackSampling
in modo che rispettiandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53) - Modifica la dipendenza macro->comune in
api()
, in modo che sia più facile da utilizzare, ad esempioPerfettoTrace
ePerfettoConfig
. (Icdae3, b/341851833) - Assicurati che le attività
mergeArtProfile
emergeStartupProfile
aspettino sempre la generazione del profilo di riferimento. (I623d6, b/343086054) - Tieni conto dello stato di attivazione della variante quando decidi se attivarla. (I5d19e, b/343249144)
- È stato 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
viene rilasciato. La versione 1.3.0-alpha05 contiene questi commit.
Correzioni di bug
- Generare un'eccezione più chiara quando la metrica macrobench restituisce valori pari a zero per tutte le iterazioni (Iab58f, b/314931695)
- Regole di workaround aggiuntive aggiunte alle regole ProGuard di microbench, incluso il supporto per le regole di listener e altri avvisi / errori osservati. (I14d8f, b/329126308, b/339085669)
- Il monitoraggio 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 per eliminare il messaggio di errore di trasmissione degli shader. (I5efa6, b/325502725)
Versione 1.3.0-alpha04
1° maggio 2024
androidx.benchmark:benchmark-*:1.3.0-alpha04
viene rilasciato. La versione 1.3.0-alpha04 contiene questi commit.
Modifiche all'API
- È stata aggiunta la variante sperimentale
MacrobenchmarkRule#measureRepeated
che accetta unPerfettoConfig
personalizzato per la registrazione di tracce Perfetto completamente personalizzate. Tieni presente che le configurazioni configurate in modo errato potrebbero causare l'errore delle classi Metric 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'omissione dei benchmark in base alla capacità 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 un DSL per disattivare gli avvisi (Ic4deb, b/331237001)
- È stata modificata l'eccezione nel log di informazioni quando le varianti di benchmark sono disattivate (I8a517, b/332772491)
- Semplifica l'acquisizione delle tracce dei metodi per un macrobenchmark il cui ambito è limitato alla durata dell'
measureBlock()
effettivo. In precedenza, veniva avviato al momento del lancio del processo target e supportava solo gli avviamenti a freddo (Iee85a, b/300651094) - Evitare 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
viene rilasciato. La versione 1.3.0-alpha03 contiene questi commit.
Nuove funzionalità
- Aggiunge API
PerfettoTraceProcessor.Session.queryMetrics
pubbliche con varianti JSON, textproto e proto binary (non decodificate). Ti consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382) - È stato aggiunto
profilerOutput
all'output JSON per semplificare gli strumenti per le tracce di profilazione (ad es. perfetto, tracce dei metodi). (I05ddd, b/332604449) - È stato aggiunto il tag potenza al benchmark Perfetto Config. Vengono acquisiti, ad esempio, i tracepoint di wakelock. (Icfe44, b/286551983)
- È stato aggiunto l'argomento inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, che può essere impostato su false per evitare di saltare le tracce del metodo quando la durata prevista potrebbe causare un ANR. Si consiglia vivamente di evitarlo nelle esecuzioni CI. - È stato aggiunto l'argomento inst sperimentale
androidx.benchmark.profiling.perfCompare.enable
. Imposta questo parametro su true per eseguire il confronto dei tempi tra le fasi di misurazione e di profilazione. Utile, ad esempio, per valutare il sovraccarico del monitoraggio dei metodi. (I61fb4, b/329146942)
Modifiche all'API
- È stata modificata la classe
TraceSectionMetric.Mode
in una classe sigillata per consentire l'espansione futura senza interrompere le istruzioni when esaustive (I71f7b) - Sono stati aggiunti
TraceSectionMetric.Mode.Average
e.Count
e gli argomenti sono stati riordinati in modo che l'argomento più comune (mode) fosse all'inizio dell'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 di reso (I42595)
Correzioni di bug
- Correzione per garantire che i benchmark utilizzino i profili di riferimento generati quando
automaticGenerationDuringBuild
è disattivato (Ic144f, b/333024280) - Correggi le sostituzioni delle proprietà del plug-in
BaselineProfile
per abilitare la generazione del profilo di riferimento e il benchmarking durante la personalizzazione di un tipo di buildnonMinified
o di benchmark. (Ib8f05, b/324837887) - È stato corretto lo svuotamento delle tracce dei metodi nel macrobenchmark, in modo che le tracce dei metodi siano completamente acquisite e valide, anche su dispositivi più lenti. (I6349a, b/329904950)
- Attiva l'avvio bloccato nel record della traccia Perfetto per ridurre il rischio di dati mancanti all'inizio della traccia. Supportato solo su API 33 e versioni successive. (Ie6e41, b/310760059)
- È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, in quanto ciò comporterà la sovrascrittura ripetuta dei file JSON di output per modulo. (Ia1af6, b/286899049)
- Forzare l'utilizzo di "," (virgola) come separatore di migliaia per garantire la coerenza dell'output di Studio, ignorando le impostazioni internazionali del dispositivo (I3e921, b/313496656)
TraceSectionMetric
ora supporta i segmenti creati utilizzandoTrace.{begin|end}AsyncSection
. (I91b32, b/300434906)- Sono state aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento all'avvio. Ciò non cambia il comportamento attuale (quindi alcuni errori vengono generati e altri non riescono a rilevare l'avvio in silenzio), ma lo rende più comprensibile. In genere, quelli che
Log.w()
e non riescono a registrare le metriche di avvio sono quelli in cui mancano gli eventi non frame, vengono lanciate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sui tempi dei frame (dalle sezioni UI/RT). (Id240f, b/329145809) - Annullare i job dexopt in background prima di eseguire un benchmark macro per ridurre le interferenze. (I989ed)
- È stata aggiunta la misurazione
frameCount
aFrameTimingMetric
per facilitare il rilevamento di scenari in cui le misurazioni cambiano a causa della modifica del numero di frame prodotti (nuove animazioni aggiunte, problemi di convalida risolti). (I1e5aa) - È stato chiarito che
frameOverrunMs
è la metrica preferita per il monitoraggio, se disponibile nei documenti, e il motivo. (I18749, b/329478323)
Versione 1.3.0-alpha02
20 marzo 2024
androidx.benchmark:benchmark-*:1.3.0-alpha02
viene rilasciato. La versione 1.3.0-alpha02 contiene questi commit.
Nuove funzionalità
Supporto sperimentale di R8 in microbench 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/l'ottimizzazione R8 in
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 relativo al monitoraggio dei metodi in modo che sia su una riga separata dall'output di microbench. (I0455c, b/328308833)
Versione 1.3.0-alpha01
21 febbraio 2024
androidx.benchmark:benchmark-*:1.3.0-alpha01
viene rilasciato. La versione 1.3.0-alpha01 contiene questi commit.
Modifiche all'API
- I parametri booleani
MicrobenchmarkConfig
sono stati rinominati per evitare l'uso della parola "deve" non necessaria (Ia8f00, b/303387299) - È stato aggiunto
BenchmarkRule.measureRepeatedOnMainThread
in modo che i benchmark del thread principale (ad es. quelli che toccano le UI di Views o Compose) possano evitare di attivare ANR, in particolare durante suite di grandi dimensioni in CI. (I5c86d) - È stato aggiunto
FrameTimingGfxInfoMetric
, un'implementazione alternativa sperimentale diFrameTimingMetric
con misurazioni provenienti direttamente dalla piattaforma, anziché estratte dalla traccia Perfetto. (I457cb, b/322232828) - Aggiungere 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 label per sostituire il nome della sezione come etichetta della metrica
- È stato aggiunto il nome della modalità all'output per chiarire il significato della metrica
- Impostazione predefinita modificata in somma, poiché la maggior parte dell'utilizzo di questa metrica è per eventi ripetuti. Fai attenzione a queste modifiche nell'utilizzo del 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 riferimento quando il dispositivo gestito specificato non esiste (Idea2b, b/313803289)
- Correzione per l'inclusione dei profili di riferimento 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 il problema
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788) - Aggiungi due argomenti di strumenti per eseguire l'override del comportamento di abbandono degli shader per risolvere i problemi di arresto anomalo durante il benchmarking delle app senza
ProfileInstaller
1.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 delle app che non utilizzano ancora ProfileInstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: può essere utilizzato per tollerare gli errori quando si tenta di inserire shader, ad esempio durante il benchmarking delle app senza profileinstaller 1.3 (I4f573)
- Salta la tracciatura dei metodi nel thread dell'interfaccia utente se si prevede che l'operazione richieda più di qualche secondo e le tracce del metodo di pulizia quando viene generato un errore. (I6e768)
- Viene lanciato 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)
- È stato risolto il problema per cui i fotogrammi non terminati all'inizio e alla fine della traccia potevano essere accoppiati, il che generava un report errato come un singolo fotogramma estremamente lungo. (I39353, b/322232828)
- Utilizza
--skip verification
sull'API 30 e versioni successive quando reinstalli un pacchetto sull'API 30-33 per cancellare i profili ART nelle build utente. In questo modo puoi bypassare gli avvisi di Play Protect che causano errori su alcune classi di dispositivi. (Ic9e36) - Usa
am force-stop
per uccidere le app quando non si tratta di un'app di sistema come UI di sistema o Avvio applicazioni. (I5e028) - Macrobenchmark ora attende
1 second
affinché l'applicazione di destinazione svuoti un profilo ART (in precedenza attendeva500 ms
). (I85a50, b/316082056) - Migliora l'errore
FrameTimingMetric
quando non vengono prodotti frame e sempre l'output del link alla traccia in caso di analisi delle metriche non riuscita per contribuire alla diagnosi del problema. (I956b9) - È stato corretto l'arresto anomalo in
FrameTimingMetric
dovuto alla mancata analisi dell'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276) - È stata allentata la severità dei controlli in
FrameMetrics
e sono stati aggiunti ulteriori dettagli ai messaggi di errore. (Iadede)
Versione 1.2
Versione 1.2.4
17 aprile 2024
androidx.benchmark:benchmark-*:1.2.4
viene rilasciato. La versione 1.2.4 contiene questi commit.
Correzioni di bug
- È stato corretto il problema relativo alla mancata configurazione dell'attributo srcset del profilo di riferimento nelle varianti di benchmark. Corregge anche
automaticGenerationDuringBuild
nelle librerie che causa una dipendenza circolare. (I28ab7, b/333024280) - Usa
am force-stop
per uccidere le app quando non si tratta di un'app di sistema come UI di sistema o Avvio applicazioni. Questo corregge l'arresto anomalo dei benchmarkStartupMode.COLD
da "Il pacchetto $package non deve essere in esecuzione prima dell'avvio a freddo" a causa del mancato completamento dell'uccisione del processo. (I5e028)
Versione 1.2.3
24 gennaio 2024
androidx.benchmark:benchmark-*:1.2.3
viene rilasciato. La versione 1.2.3 contiene questi commit.
Correzioni di bug
- È stata rimossa l'eccezione dal plug-in Gradle del profilo di riferimento quando la versione di AGP è 8.3.0 o successiva.
- Correzione per l'inclusione dei profili di riferimento della libreria nell'AAR precedente ad AGP 8.3.0-alpha15.
Versione 1.2.2
1° dicembre 2023
androidx.benchmark:benchmark-*:1.2.2
viene rilasciato. 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 riferimento come URI file locale (aosp/2843918, aosp/2853665, b/313976958)
Versione 1.2.1
15 novembre 2023
androidx.benchmark:benchmark-*:1.2.1
viene 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 del test AS (b/309805233), (b/309116324)
Versione 1.2.0
18 ottobre 2023
androidx.benchmark:benchmark-*:1.2.0
viene rilasciato. La versione 1.2.0 contiene questi commit.
Modifiche importanti dalla versione 1.1.0
Profili di riferimento
- Il nuovo plug-in Gradle per i profili di riferimento automatizza l'acquisizione e l'inclusione dei profili di riferimento nel flusso di lavoro di test e compilazione.
BaselineProfileRule.collect
ora stabile, una versione semplificata e ottimizzata della precedente APIBaselineProfileRule.collectBaselineProfile
sperimentale- Basta specificare
packageName
e promuovere la tua app
- Basta specificare
- Per le librerie che generano profili di riferimento, ora puoi filtrare le regole generate nel codice (argomento
BaselineProfileRule.collect
) o, ancora più semplicemente, nel plug-in gradle - Correzioni
- Raccolta dei profili di riferimento corretti su Android U e versioni successive (Id1392, b/277645214)
Macrobenchmark
- Compilation
- Macrobenchmark ora reimposta correttamente lo stato di compilazione per ogni compilazione. Questa operazione richiede la reinstallazione dell'APK prima di Android 14, pertanto è vivamente consigliato eseguire il benchmarking su Android 14 e versioni successive se vuoi mantenere lo stato (ad esempio 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 l'argomento di strumentazione
Argomenti di strumentazione
- Supporto per l'argomento di misurazione
androidx.benchmark.dryRunMode.enable
(già disponibile in microbenchmark) per esecuzioni di convalida più rapide (ad es. durante la creazione del benchmark o in presubmit) - Supporto per
androidx.benchmark.profiling.mode=StackSampling
eMethodTracing
. - È stato aggiunto
androidx.benchmark.enabledRules
per consentire i test delle regole di macrobenchmark rispetto al profilo di riferimento del filtro in fase di runtime - È stato aggiunto l'argomento
androidx.benchmark.perfettoSdkTracing.enable
per attivare il monitoraggio con tracing-perfetto, ad esempio il monitoraggio della ricompozione di Compose. Tieni presente che, se utilizzata conStartupMode.COLD
, la tempistica sarà notevolmente influenzata dal caricamento e dall'attivazione della libreria di monitoraggio durante l'avvio dell'app.
- Supporto per l'argomento di misurazione
Requisiti
- Macrobenchmark ora richiede
ProfileInstaller
1.3.0 o versioni successive nell'app di destinazione per attivare l'acquisizione / il ripristino del profilo e lo svuotamento della cache degli shader.
- Macrobenchmark ora richiede
Nuove API Metric sperimentali
- È stato aggiunto
TraceSectionMetric
sperimentale, che consente di estrarre semplici tempistiche dai blocchitrace("") {}
nella tua app oppure TraceMetric per sfruttare la funzionalità di query completa di PerfettoTraceProcessor
. - È stato aggiunto il comando sperimentale
PowerMetric
per acquisire informazioni sull'utilizzo dell'alimentazione - È stato aggiunto un parametro sperimentale
MemoryCountersMetric
per conteggiare gli errori di pagina - È stata aggiunta l'API sperimentale
PerfettoTraceProcessor
, utilizzata internamente per estrarre le metriche dalle tracce di sistema (ovvero tracce Perfetto)
- È stato aggiunto
Correzioni
- Sono stati corretti i crash durante l'installazione o l'estrazione dei profili da un'app installata da più APK (ad esempio da un app bundle).
- È stato corretto il problema relativo all'
FrameTimingMetric
che ignorava i frame con ID frame incoerenti (in genere, i frame durante le increspature nell'API 31 e versioni successive) (I747d2, b/279088460) - Sono stati corretti gli errori di analisi delle tracce di dimensioni superiori a 64 MB (Ief831, b/269949822)
- Sono stati chiariti gli errori quando l'immagine del sistema operativo del dispositivo (in particolare dell'emulatore) non è configurata correttamente per il monitoraggio o la compilazione
- Saltare il controllo del livello della 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 valori predefiniti più sicuri
- Maggiore stabilità di
StartupMode.COLD
grazie all'eliminazione costante della cache degli shader (esposta anche tramiteMacrobenchmarkScope.dropShaderCache
) - È stato corretto il fallback leanback per
startActivityAndWait
.
Microbenchmark
- Funzionalità
- Il profiling è stato spostato in una fase separata, dopo le altre metriche, in modo che un'esecuzione di test possa mostrare sia i tempi accurati che i risultati del profiling.
- API sperimentali
- È stata aggiunta l'API
MicrobenchmarkConfig
sperimentale per definire metriche personalizzate e configurare il monitoraggio e il profiling. Può essere utilizzato per acquisire tracce dei metodi o acquisire tracepoint (ma tieni presente l'overhead del monitoraggio). - Sono state aggiunte API sperimentali per il controllo di
BenchmarkState
separatamente daBenchmarkRule
, senza JUnit - È stato aggiunto il record sperimentale
PerfettoTrace
per consentire l'acquisizione delle tracce di Perfetto, con configurazione personalizzata, separata dalle API di benchmark.
- È stata aggiunta l'API
- Correzioni
- Sfrutta la soluzione alternativa per gli spazi iniziali mancanti nell'output del benchmark di Android Studio.
- È stato risolto il problema per cui la stampa degli avvisi poteva non riuscire nell'output del benchmark di Android Studio.
- È stato corretto l'arresto anomalo di
SampledProfiling
su Android 13 (API 33) e versioni successive. - Prestazioni notevolmente migliorate di
dryRunMode
grazie all'eliminazione diIsolationActivity
e del monitoraggio Perfetto (fino a 10 volte più veloce la modalità di prova secca sulle versioni precedenti del sistema operativo).
Versione 1.2.0-rc02
6 ottobre 2023
androidx.benchmark:benchmark-*:1.2.0-rc02
viene rilasciato. La versione 1.2.0-rc02 contiene questi commit.
Correzioni di bug
- Correggere 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 vedesse. (I8dbcc, b/303034735, b/296453339) - Sono stati chiariti i messaggi di errore di caricamento
tracing-perfetto
durante l'iniezione dal modulo macrobenchmark nell'applicazione di destinazione.
Versione 1.2.0-rc01
20 settembre 2023
androidx.benchmark:benchmark-*:1.2.0-rc01
viene rilasciato. La versione 1.2.0-rc01 contiene questi commit.
Correzioni di bug
- Ora viene lanciata un'eccezione (con istruzioni per la correzione) quando il monitoraggio dell'SDK Perfetto non riesce a essere inizializzato in un benchmark. (I6c878, b/286228781)
- Correzione dell'arresto anomalo OOM durante la conversione della traccia del metodo ART in formato perfetto. (I106bd, b/296905344)
- (Macrobenchmark) È stata chiarita l'etichetta del monitoraggio dei metodi quando è collegata all'output del test di Studio e sono stati corretti i nomi dei file di monitoraggio dei metodi in modo che siano univoci sul dispositivo/host, in modo che non vengano sovrascritti quando viene eseguito più di un benchmark. (I08e65, b/285912360)
- Garantisce che il dispositivo sia attivo quando viene acquisito un profilo di riferimento. (I503fc)
Versione 1.2.0-beta05
30 agosto 2023
androidx.benchmark:benchmark-*:1.2.0-beta05
viene rilasciato. La versione 1.2.0-beta05 contiene questi commit.
Nuove funzionalità
- Il plug-in Gradle del profilo di riferimento ora supporta il plug-in Android Gradle 8.3. (aosp/2715214)
Versione 1.2.0-beta04
23 agosto 2023
androidx.benchmark:benchmark-*:1.2.0-beta04
viene rilasciato. La versione 1.2.0-beta04 contiene questi commit.
Nuove funzionalità
- Il plug-in Gradle Profili di riferimento ora supporta il plug-in Android 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) sottoponendo a ulteriore sanificazione i nomi dei file di output, evitando "=" e ":" nei nomi dei file di output. (I759d8)
Versione 1.2.0-beta03
9 agosto 2023
androidx.benchmark:benchmark-*:1.2.0-beta03
viene rilasciato. La versione 1.2.0-beta03 contiene questi commit.
Modifiche all'API
- È stato aggiunto un argomento per filtrare
TraceSectionMetric
solo per il pacchetto di destinazione, attivo per impostazione predefinita (Ia219b, b/292208786)
Correzioni di bug
- L'argomento di misurazione
fullTracing.enable
è stato rinominato inperfettoSdkTracing.enable
per coerenza con il nome dell'elemento e altri riferimenti.fullTracing.enable
continuerà a funzionare come opzione di riserva. (I7cc00) - I tracepoint interni della libreria di benchmark (inclusa la tracciatura di loop/fasi di microbenchmark) ora vengono visualizzati nel visualizzatore di tracce di sistema di Studio e nidificati sotto il processo corretto in Perfetto. (I6b2e7, b/293510459)
- È stato rimosso l'errore NON-PROFILEABLE del macrobenchmark sull'API 31 e versioni successive ed è stato ignorato il controllo di profiliabilità sui dispositivi con accesso root eng/userdebug. (I2abac, b/291722507)
- Quando utilizzi le ottimizzazioni del layout di Dex, le regole del profilo di avvio vengono ora considerate anche come regole del profilo di riferimento. (aosp/2684246, b/293889189)
Versione 1.2.0-beta02
26 luglio 2023
androidx.benchmark:benchmark-*:1.2.0-beta02
viene rilasciato. La versione 1.2.0-beta02 contiene questi commit.
Modifiche all'API
- Sono state aggiunte API sperimentali per la configurazione e le metriche personalizzate di microbench (ad es. profiler e tracing). (I86101, b/291820856)
Correzioni di bug
- Segnala un errore in macrobench quando il sistema operativo non è configurato correttamente per il monitoraggio, come è stato recentemente corretto negli emulatori ARM64 delle API 26/28. (I0a328, b/282191686)
- È stato aggiunto un dettaglio all'errore di reimpostazione della compilazione per suggerire l'aggiornamento dell'emulatore, poiché alcuni emulatori hanno risolto di recente questo problema. (I8c815, b/282191686)
- Rendi
androidx.test.uiautomator:uiautomator:2.2.0
una dipendenzaapi
anzichéimplementation
. (I1981e)
Versione 1.2.0-beta01
18 luglio 2023
androidx.benchmark:benchmark-*:1.2.0-beta01
viene rilasciato. La versione 1.2.0-beta01 contiene questi commit.
Correzioni di bug
- Correzione degli avvisi che a volte vengono ignorati nell'output del benchmark in Studio e della soluzione alternativa per gli spazi iniziali dell'output del benchmark che non vengono visualizzati in Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
- Commento corretto per
FrameTimingMetric
. La metrica secondaria è denominataframeDurationCpuMs
. (Ib097f, b/288830934).
Versione 1.2.0-alpha16
21 giu 2023
androidx.benchmark:benchmark-*:1.2.0-alpha16
viene rilasciato. La versione 1.2.0-alpha16 contiene questi commit.
Modifiche all'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) - Il profiling dei microbenchmark è stato spostato in una fase separata, quindi si verifica in sequenza dopo la misurazione, anziché sostituirla. Le sezioni di traccia
MethodTracing
sono ora incluse anche 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
androidx.benchmark:benchmark-*:1.2.0-alpha15
viene rilasciato. La versione 1.2.0-alpha15 contiene questi commit.
Nuove funzionalità
- È stato aggiunto
MemoryUsageMetric
sperimentale per monitorare l'utilizzo della memoria di un'applicazione target. (I56453, b/133147125, b/281749311) - Aggiunta del supporto per le 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 all'API
- L'API
collectBaselineProfile
genera sempre profili di riferimento stabili. L'APIcollectStableBaselineProfile
è stata rimossa e al suo posto deve essere utilizzatacollectBaselineProfile
. (I17262, b/281078707) - L'argomento
filterPredicate
diBaselineProfileRule
è stato modificato in non null, 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 monitoraggio Perfetto indryRunMode
per migliorare notevolmente le prestazioni, poiché rappresentavano la maggior parte del tempo di esecuzione. (Ie4f7d) - Supporto del campionamento dello stack delle chiamate nei macrobenchmark utilizzando gli argomenti di test di misurazione
androidx.benchmark.profiling.mode=StackSampling
eandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Corregge l'arresto anomalo durante l'inserimento di shader su Android U (API 34) e su emulatori. (I031ca, b/274314544)
Versione 1.2.0-alpha14
3 maggio 2023
androidx.benchmark:benchmark-*:1.2.0-alpha14
viene rilasciato. La versione 1.2.0-alpha14 contiene questi commit.
Correzioni di bug
- Correggi
FrameTimingMetric
ignorando i frame con ID frame incoerenti. Ciò causerebbe ad alcune animazioni sulle versioni recenti della piattaforma (API 31 e versioni successive) di ignorare molti frame durante l'animazione diRenderThread
(ad es. durante un'ondulazione). (I747d2, b/279088460) - È stata corretta l'analisi del processore di traccia per le tracce più grandi di 64 MB. (Ief831, b/269949822)
- È stato corretto il problema di generazione del profilo di riferimento su Android U a causa dell'output diverso del comando
pm dump-profiles
. (Id1392, b/277645214) - Correggi lo script di blocco dell'orologio della GPU per confrontare correttamente le stringhe (I53e54, b/213935715)
Versione 1.2.0-alpha13
5 aprile 2023
androidx.benchmark:benchmark-*:1.2.0-alpha13
viene rilasciato. La versione 1.2.0-alpha13 contiene questi commit.
Modifiche all'API
- È stato aggiunto il parametro del tipo di profilo durante la generazione dei 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
androidx.benchmark:benchmark-*:1.2.0-alpha12
viene rilasciato. La versione 1.2.0-alpha12 contiene questi commit.
Nuove funzionalità
- Il nuovo plug-in Gradle del profilo di riferimento è stato rilasciato in versione alpha, semplificando la generazione di un profilo di riferimento e il flusso di lavoro degli sviluppatori.
Modifiche all'API
- È stato rimosso il supporto del monitoraggio Perfetto nelle API 21 e 22, che include sia i microbenchmark sia le API
PerfettoTrace
sperimentali. Prima di questa versione, le connessioniUiAutomation
non erano affidabili su alcuni dispositivi. (I78e8c) - È stata aggiunta un'API sperimentale pubblica per
PerfettoTraceProcessor
per consentire l'analisi dei contenuti della traccia. Si tratta di un passo verso metriche completamente personalizzate basate sui dati delle tracce di Perfetto. (I2659e, b/219851406)
Versione 1.2.0-alpha11
8 marzo 2023
androidx.benchmark:benchmark-*:1.2.0-alpha11
viene rilasciato. La versione 1.2.0-alpha11 contiene questi commit.
Correzioni di bug
- Sono stati corretti i crash in
MacrobenchmarkRule
eBaselineProfileRule
durante la reinstallazione o l'estrazione dei profili da un app bundle con più APK. (I0d8c8, b/270587281)
Versione 1.2.0-alpha10
22 febbraio 2023
androidx.benchmark:benchmark-*:1.2.0-alpha10
viene rilasciato. La versione 1.2.0-alpha10 contiene questi commit.
Nuove funzionalità
- Su Android 14 e versioni successive, Macrobenchmark non reinstalla più le applicazioni target per reimpostare lo stato di compilazione, grazie a una nuova funzionalità della piattaforma. In precedenza era necessario avere un dispositivo con root o gestire la rimozione di tutto lo stato dell'applicazione (ad es. l'accesso utente) prima di ogni esecuzione del benchmark. (I9b08c, b/249143766)
Correzioni di bug
- È stato corretto il problema per cui
DryRunMode
non si arrestava più in modo anomalo con un profilo vuoto a causa del salto della compilazione. Esegue invece una singola iterazione ed estrae il profilo per assicurarsi che venga acquisito qualcosa. (I2f05d, b/266403227) - Correzione dell'arresto anomalo di
PowerMetric
durante il controllo della presenza di powerstats nei vecchi livelli API. (5faaf9, b/268253898)
Versione 1.2.0-alpha09
11 gennaio 2023
androidx.benchmark:benchmark-*:1.2.0-alpha09
viene rilasciato. La versione 1.2.0-alpha09 contiene questi commit.
Correzioni di bug
- È stato attivato il passaggio di
None
all'arg di misurazioneandroidx.benchmark.enabledRules
per disattivare la generazione di tutti i benchmark / profili di riferimento. (I3d7fd, b/258671856) - Correzione della cattura di
PerfettoTrace
nei moduli dell'app (ad es. APK di test non auto-strumentati) (I12cfc) - È stato corretto l'ordine degli argomenti di adb pull del profilo di riferimento 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 stamperà correttamente l'avviso. (69133b,b/262209591)
- Saltare il controllo del livello della batteria sui dispositivi senza batteria in Macrobenchmark (fe4114, b/232448937)
Versione 1.2.0-alpha08
7 dicembre 2022
androidx.benchmark:benchmark-*:1.2.0-alpha08
viene rilasciato. La versione 1.2.0-alpha08 contiene questi commit.
Modifiche all'API
- Sono state aggiunte nuove API sperimentali
PerfettoTrace.record {}
ePerfettoTraceRule
per acquisire tracce Perfetto (note anche come tracce di sistema) nell'ambito di un test, al fine di ispezionare il comportamento e le prestazioni del test. (I3ba16) BaselineProfileRule
ora accetta un predicato di filtro anziché un elenco di prefissi dei pacchetti. In questo modo, il test ha il pieno controllo sul filtro. (I93240)- Aggiungi un'API sperimentale
BaselineProfileRule.collectStableBaselineProfile
che attende che un profilo di riferimento sia stabile per N iterazioni. (I923f3) - Aggiungi la possibilità di specificare un prefisso per il nome del file di output durante la generazione dei profili di riferimento utilizzando
BaselineProfileRule
. (I7b59f, b/260318655)
Correzioni di bug
- Migliora la sicurezza della scrittura dell'output dei file, il che dovrebbe impedire la mancata scrittura / aggiunta silenziosa dei file di output, in particolare nell'API 21/22. (If8c44, b/227510293)
- Correggi l'output della traccia
simpleperf
per creare e posizionare correttamente il file. In generale, questo dovrebbe risolvere anche i problemi relativi al recupero non riuscito di un file da parte di Gradle. (I12a1c, b/259424099) - Miglioramento del messaggio di errore di profileinstaller stampato quando il programma è 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 è supportata. (Ia517f, b/253519888)
- Correggere diversi errori di comando della shell nel messaggio di errore Stampa API richiesta <=23, inclusi errori di configurazione del file binario di acquisizione di perfetto ed errori di acquisizione della traccia (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 effettui il check-in delle regole del profilo nel controllo del codice sorgente). (Ie2509)
- È stato corretto un arresto anomalo nelle build non rooted 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 registry di trasmissione mancante nel manifest di ProfileInstaller, che non è stato ancora rilasciato. (I5c728, b/258619948) Per risolvere il problema descritto in profileinstaller:1.3.0-alpha02
, aggiungi quanto segue ad AndroidManifest.xml della tua applicazione (non del benchmark):
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Versione 1.2.0-alpha07
9 novembre 2022
androidx.benchmark:benchmark-*:1.2.0-alpha07
viene rilasciato. La versione 1.2.0-alpha07 contiene questi commit.
Modifiche all'API
- Aggiunge l'API
PowerMetric
per la misurazione di energia e potenza nei macrobenchmark. (Ife601, b/220183779) - È stato corretto il problema
MacrobenchmarkScope.dropShaderCache()
relativo all'eliminazione della cache degli shader. In questo modo, vengono rimossi circa 20 ms di rumore dai benchmark diStartupMode.COLD
, poiché gli shader vengono ora cancellati in modo coerente a ogni iterazione. In precedenza, la compilazione diPartial
che utilizzava le iterazioni di riscaldamento registrava numeri erroneamente elevati, poiché la memorizzazione nella cache degli shader era più probabile che si verificasse durante il riscaldamento. Questa correzione richiede un dispositivo con root o l'utilizzo diprofileinstaller:1.3.0-alpha02
nell'app di destinazione. Per le modifiche all'API della libreriaProfileInstaller
, consulta la pagina ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) - È stato aggiunto
TraceSectionMode("label", Mode.Sum)
, che consente di misurare il tempo totale trascorso in più sezioni 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 rimosso anche il requisito dell'API 29, poichéTraceSectionMetric
funziona conandroidx.tracing.Trace
fino ai livelli API precedenti, con l'utilizzo diforceEnableAppTracing
all'interno dell'app target. (Id7b68, b/231455742)
Correzioni di bug
- Sicurezza migliorata di tutti i comandi della shell interna mediante la convalida di tutti gli output/errori. (I5984d, b/255402908, b/253094958)
- Specifica il dispositivo nel comando
adb pull
del profilo di riferimento, 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 benchmark macro non è configurato come autostrumentazione. Questo errore impedisce il macrobenchmarking all'interno del processo dell'app target. Durante il processo, macrobench non sarebbe in grado di compilare/uccidere/avviare a freddo l'app o di controllare le proprie autorizzazioni (I4279b)
- È stato risolto un problema in
measureRepeated()
per cuiStartupMode.COLD
non terminava il processo target doposetupBlock
. Ora l'interazione disetupBlock
con l'app non lascerà in esecuzione il processo dell'app e non verrà generata una misurazione dell'avvio a freddo non valida. (I8ebb7)
Versione 1.2.0-alpha06
24 ottobre 2022
androidx.benchmark:benchmark-*:1.2.0-alpha06
viene rilasciato. La versione 1.2.0-alpha06 contiene questi commit.
Modifiche all'API
BaselineProfileRule
non richiede più il 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 svuotati sul disco sui dispositivi non rooted, ma richiede l'aggiornamento della dipendenza di profileinstaller 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
. In questo modo, il profilo viene svuotato correttamente sul disco in modo che possa essere compilato/estratto.
Correzioni di bug
- Corregge l'arresto anomalo di
SampledProfiling
nell'API 33 e versioni successive. (I40743, b/236109374)
Versione 1.2.0-alpha05
5 ottobre 2022
androidx.benchmark:benchmark-*:1.2.0-alpha05
viene rilasciato. La versione 1.2.0-alpha05 contiene questi commit.
Correzioni di bug
- Correzione della suddivisione dei frame nello strumento di visualizzazione delle tracce di sistema di Studio per le tracce acquisite del benchmark (I3f3ae, b/239677443)
- Correggi
FrameTimingMetric
nell'elencoFrameOverrun
come che richiede l'API 31 anziché 29 (I716dd, b/220702554) - Imposta l'iterazione in
BaselineProfileRule
e lancia un messaggio chiaro se il pacchetto di destinazione non è installato (è già stato fatto per MacrobenchmarkRule). (Ic09a3, b/227991471)
Versione 1.2.0-alpha04
21 settembre 2022
androidx.benchmark:benchmark-*:1.2.0-alpha04
viene rilasciato. La versione 1.2.0-alpha04 contiene questi commit.
Nuove funzionalità
Aggiunta del supporto dell'argomento di misurazione
dryRunMode.enable
al macrobenchmark (già disponibile in micro) per uno sviluppo locale più rapido e la convalida dell'automazione delle app (ad es. in presubmit). Questo valore sostituisce le iterazioni con 1, salta la compilazione, elimina tutti gli errori di configurazione e disattiva l'output del file JSON di misurazione. (Ib51b4, b/175149857)Nella riga di comando Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
In build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Correzioni di bug
- È stato corretto
StartupTimingMetric
in modo che non sia più necessario lanciare le attività misurate tramiteMacrobenchmarkScope.startActivityAndWait()
. Ciò significa che la metrica può rilevare i lanci, ad esempio da notifiche,Context.startActivity()
, navigazione in-app basata sull'attività o comandi shell. (Ia2de6, b/245414235) - Correggere il bug per cui
startActivityAndWait
non riusciva a completare il lancio su emulatori a causa di un timeout, 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
viene rilasciato. La versione 1.2.0-alpha03 contiene questi commit.
Nuove funzionalità
- Sono state aggiunte API sperimentali per l'utilizzo indipendente di
BenchmarkState
, separatamente 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
viene rilasciato. La versione 1.2.0-alpha02 contiene questi commit.
Modifiche all'API
- Valore predefinito
am force stop
perMacrobenchmarkScope.killProcess()
, anche se il dispositivo è rootato, tranne durante la generazione del profilo di baseline. Questo valore può essere sostituito con un argomento booleano facoltativo. (02cce9, b/241214097)
Correzioni di bug
- Supporta la generazione del profilo di riferimento per le app di sistema. (I900b8, b/241214097)
- Supporto per il controllo delle metriche relative all'alimentazione ODPM sui dispositivi non rooted. (a38c78, b/229623230)
Versione 1.2.0-alpha01
27 luglio 2022
androidx.benchmark:benchmark-*:1.2.0-alpha01
viene rilasciato. La versione 1.2.0-alpha01 contiene questi commit.
Nuove funzionalità
- Nuovo componente tracing-perfetto-common che consente agli strumenti di attivare il monitoraggio dell'SDK Perfetto in un'app che lo espone (I2cc7f)
È stato aggiunto l'argomento di strumentazione
androidx.benchmark.enabledRules
per filtrare le esecuzioni del macrobenchmark solo sui benchmark o solo sulla generazione del profilo di riferimento. Passa "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio quando generi soloBaselineProfiles
su un emulatore. Supportato anche l'elenco separato da virgole. (I756b7, b/230371561)Ad esempio, nel file build.gradle del 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 all'API
- È stato aggiunto un nuovo
PowerMetric
per misurare le attività relative a energia e potenza nei benchmark. (I9f39b, b/220183779) - È stata aggiunta una nuova modalità di compilazione
CompilationMode.Ignore
per saltare il ripristino e la compilazione del profilo. (Ibbcf8, b/230453509) - È stato aggiunto un nuovo parametro a
BaselineProfileRule#collectBaselineProfile
per filtrare il file di output in base ai nomi dei pacchetti (If7338, b/220146561) - Consente allo sviluppatore di scaricare il dispositivo per misurare il consumo di energia. (I6a6cb)
- È stata aggiunta la possibilità di svuotare la cache degli shader in
MacrobenchmarkScope
. (I32122) - Consente allo sviluppatore di configurare la visualizzazione del tipo di metrica e dei dettagli delle categorie di sottosistema desiderate. (I810c9)
- In precedenza, nel benchmark veniva generato un
UnsupportedOperationException
se il benchmark veniva eseguito su un dispositivo non supportato. Ora l'UEO 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
- È stato risolto un problema per cui i metodi compilati non venivano reimpostati correttamente tra ogni macrobenchmark nelle build non rooted. Purtroppo, questo richiede la reinstallazione dell'apk a ogni iterazione, il che comporta l'eliminazione dei dati dell'applicazione per ogni macrobenchmark. (I31c74, b/230665435)
- Correzione dell'arresto anomalo della registrazione delle tracce nell'API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
- Revisione del rilevamento del completamento dell'avvio dell'attività per correggere l'eccezione "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)
Versione 1.1.1
Versione 1.1.1
9 novembre 2022
androidx.benchmark:benchmark-*:1.1.1
viene rilasciato. La versione 1.1.1 contiene questi commit.
Correzioni di bug
- Corregge i problemi
android.system.ErrnoException: open failed: EACCES
che si verificano su alcuni dispositivi Android 11 (API 30) e versioni successive. Questa è una selezione 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
viene 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 dei macrobenchmark di Jetpack, 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.Partial
per misurare l'efficacia dei profili di riferimento.@BaselineProfileRule
per generare automaticamente i profili di riferimento per un determinato Critical User Journey.
Supporto per le metriche di allocazione e il profiling durante le esecuzioni di microbenchmark.
Versione 1.1.0-rc03
1° giugno 2022
androidx.benchmark:benchmark-*:1.1.0-rc03
viene 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
300ms
dapressHome()
. (aosp/2086030, b/231322975)Migliora la velocità di iterazione del macrobenchmark ottimizzando i comandi Shell utilizzati sotto il cofano. (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
androidx.benchmark:benchmark-*:1.1.0-rc02
viene 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 al comportamento
È stato risolto un problema per cui la compilazione dell'app non veniva reimpostata correttamente tra i macrobenchmark e non veniva reimpostata affatto nelle build non rooted. In questo modo vengono corretti molti casi in cui l'esecuzione di più test comporta un effetto ridotto o nullo di
CompilationMode
sulle misurazioni. Per risolvere il problema, l'app di destinazione ora reinstalla completamente ogni metodo di test, il che comporta l'eliminazione dei 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 / la 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 del macrobenchmark.Ad esempio, nel file build.gradle del macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
In alternativa, dalla riga di comando Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
È stato reso possibile condividere un modulo tra i macrobenchmark e i test di generazione del profilo di riferimento aggiungendo l'argomento di strumentazione
androidx.benchmark.enabledRules
. Passa "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio quando generiBaselineProfiles
su un emulatore. (I756b7, b/230371561)Ad esempio, nel file build.gradle del 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
Versione 1.1.0-rc01
20 aprile 2022
androidx.benchmark:benchmark-*:1.1.0-rc01
viene rilasciato. 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 i risultati più recenti dell'utilizzo di un
BaselineProfileRule
. ( aosp/2057008, b/228203086 )
Versione 1.1.0-beta06
6 aprile 2022
androidx.benchmark:benchmark-*:1.1.0-beta06
viene rilasciato. La versione 1.1.0-beta06 contiene questi commit.
Correzioni di bug
- Correzione dell'arresto anomalo della registrazione delle tracce nell'API 21/22 (If7fd6, b/227509388)
- Revisione del rilevamento del completamento dell'avvio dell'attività per correggere l'eccezione "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)
- Correggi le metriche di avvio per i macrobenchmark quando viene utilizzato
CompilationMode.None()
. Prima di questa modifica,CompilationMode.Partial()
sembrava essere più lento diCompilation.None()
. (611ac9).
Versione 1.1.0-beta05
23 marzo 2022
androidx.benchmark:benchmark-*:1.1.0-beta05
viene rilasciato. La versione 1.1.0-beta05 contiene questi commit.
Correzioni di bug
- Uccidere il pacchetto dopo aver ignorato l'installazione del profilo quando si utilizza
CompilationMode.None
. (aosp/1991373) - 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
viene rilasciato. La versione 1.1.0-beta04 contiene questi commit.
Correzioni di bug
Correzione delle metriche mancanti su Android 10 e
NoSuchElementException
causata dalla mancata acquisizione corretta dei nomi dei processi nelle tracce. (Ib4c17, b/218668335)Utilizza
PowerManager
per il rilevamento del throttling termico su Q (API 29) e versioni successive. In questo modo, si riduce notevolmente la frequenza dei falsi positivi nel rilevamento del throttling termico (riprova del benchmark dopo 90 secondi di tempo di attesa) e si velocizzano notevolmente i benchmark nelle build dell'utente. Fornisce inoltre il rilevamento della limitazione anche quando gli orologi sono bloccati (se sono bloccati troppo in alto per l'ambiente fisico del dispositivo). (I9c027, b/217497678, b/131755853)Filtra la profilazione campionata di simpleperf solo sul thread
measureRepeated
per semplificare l'ispezione (Ic3e12, b/217501939)Supporto delle metriche dei sottoprocessi dell'interfaccia utente denominati nelle app multiprocesso (Ice6c0, b/215988434)
Filtra le regole del profilo di riferimento in base al 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
androidx.benchmark:benchmark-*:1.1.0-beta03
viene rilasciato. La versione 1.1.0-beta03 contiene questi commit.
Modifiche all'API
- È stato aggiunto
AudioUnderrunMetric
alla libreria macrobenchmark con il flag sperimentale per consentire il rilevamento di sottocarichi audio (Ib5972) BaselineProfileRule
non accetta più un bloccosetup
perché funzionava comeprofileBlock
. (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 un problema per cui le tracce del profiler di microbench non venivano aggiornate nelle esecuzioni successive quando erano collegate all'output di Studio (I5ae4d, b/214917025)
- Impedire i comandi shell di compilazione nell'API 23 (Ice380)
- I campi
FrameCpuTime
eFrameUiTime
sono stati rinominati inFrameDurationCpu
eFrameDurationUi
per chiarire che si tratta di durate e non di timestamp e per allinearli ai prefissi. (I0eba3, b/216337830)
Versione 1.1.0-beta02
26 gennaio 2022
androidx.benchmark:benchmark-*:1.1.0-beta02
viene rilasciato. La versione 1.1.0-beta02 contiene questi commit.
Correzioni di bug
- I risultati del profilo di campionamento dello stack / tracciamento dei metodi dei microbenchmark ora sono collegati nell'output di Studio, come per gli altri output di profilazione, e non eliminano la metrica di allocazione. (Idcb65, b/214440748, b/214253245)
- Ora BaselineProfileRule stampa il comando
adb pull
in logcat e nell'output di Studio per estrarre il file di testo BaselineProfile generato. (f08811)
Versione 1.1.0-beta01
12 gennaio 2022
androidx.benchmark:benchmark-*:1.1.0-beta01
viene rilasciato. La versione 1.1.0-beta01 contiene questi commit.
Correzioni di bug
- Corregge l'ignoranza dell'attivazione dell'argomento del profiler. (I37373, b/210619998)
- È stato rimosso
CompliationModes
(I98186, b/213467659) perché non più supportato - È stato modificato l'argomento del profilo di riferimento di
CompilationMode.Partial
in enum per maggiore chiarezza. (Id67ea)
Versione 1.1.0-alpha13
15 dicembre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13
viene rilasciato. La versione 1.1.0-alpha13 contiene questi commit.
Modifiche all'API
- Aggiungi il monitoraggio 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 monitoraggio personalizzato (tramite le API Jetpack
android.os.Trace
oandroidx.tracing
) per evitare di influire sui risultati. Questo monitoraggio dovrebbe essere utile per diagnosticare l'instabilità, in particolare da fonti esterne al benchmark. (I298be, b/205636583, b/145598917) - Chiarisci
CompilationModes
in tre classi: Completo, Nessuno, Parziale. In precedenza, i nomi non erano coerenti e si basavano su parametri di compilazione (che ora trattiamo come dettagli di implementazione) e funzionalità. In questo modo, i compromessi, le potenziali combinazioni e il comportamento nelle varie versioni della piattaforma sono più chiari. (I3d7bf, b/207132597) - La configurazione e la misurazione ora sono sempre in coppia, in ordine. Ora puoi eseguire query sul nome e sull'iterazione del pacchetto (anche se l'iterazione potrebbe essere
null
in determinati scenari di riscaldamento). (Id3b68, b/208357448, b/208369635)
Correzioni di bug
CompilationMode.Speed
trattato erroneamente comeNone
(I01137)
Versione 1.1.0-alpha12
17 novembre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha12
viene rilasciato. La versione 1.1.0-alpha12 contiene questi commit.
Nuove funzionalità
- Aggiungi la metrica sperimentale TraceSectionMetric per misurazioni dei tempi basate su tracce personalizzate. (I99db1, b/204572664)
Correzioni di bug
- Riattiva il dispositivo a ogni iterazione per assicurarti che l'interfaccia utente possa essere testata. È necessario disattivare la schermata di blocco. (Ibfa28, b/180963442)
- Sono stati corretti più arresti anomali nella modalità di profilazione di StackSampling su emulatori e dispositivi non rooted (Icdbda, b/202719335)
- È stato rimosso il tempo di attesa di 0,5 secondi alla fine di ogni iterazione.Se con questa modifica noti che mancano delle metriche, segnala un bug. (Iff6aa)
- Riduci le probabilità di perdita di dati e riduci il sovraccarico di memoria dovuto al monitoraggio (Id2544, b/199324831, b/204448861)
- Riduci le dimensioni delle tracce di circa il 40% passando al formato di archiviazione sched compatto. (Id5fb6, b/199324831)
- Implementazioni aggiornate delle metriche di avvio in modo che terminino sempre al termine del thread di rendering. In questo modo, i dati saranno più coerenti tra le varie versioni della piattaforma e corrisponderanno più da vicino alle misurazioni in-app. (Ic6b55)
Versione 1.1.0-alpha11
3 novembre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11
viene rilasciato. La versione 1.1.0-alpha11 contiene questi commit.
Modifiche all'API
- Macrobenchmark ora ha un
minSdkVersion
di23
. (If2655) - Aggiunge un nuovo
BaselineProfileRule
sperimentale in grado di generare profili di riferimento per il percorso dell'utente critico dell'app. Documentazione dettagliata a seguire. (Ibbefa, b/203692160) - Viene rimossa la variante dell'interfaccia measureRepeated, aggiunta per i chiamanti Java, in quanto causava ambiguità nel completamento/nella risoluzione del metodo. Gli utenti Java dovranno nuovamente restituire Unit.Instance da measureRepeated. Se questo è un inconveniente, segnala un bug, lo riprenderemo in una versione futura. (Ifb23e, b/204331495)
Versione 1.1.0-alpha10
27 ottobre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha10
viene rilasciato. La versione 1.1.0-alpha10 contiene questi commit.
Modifiche all'API
- Esegui il backport di StartupTimingMetric per ripristinare il funzionamento dell'API 23. Questa nuova implementazione gestisce meglio anche reportFullyDrawn() per attendere fino al rendering dei contenuti corrispondenti. (If3ac9, b/183129298)
- È stato aggiunto JvmOverloads a più metodi MacrobenchmarkScope per gli utenti Java. (I644fe, b/184546459)
- Fornisci una funzione MacrobenchmarkRule.measureRepeated alternativa che utilizzi 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 corrette 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: quanto il frame ha superato il budget di tempo. (I6c2aa, b/203008701)
Versione 1.1.0-alpha09
13 ottobre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha09
viene rilasciato. La versione 1.1.0-alpha09 contiene questi commit.
Correzioni di bug
- Supporto dell'eliminazione della cache delle pagine del kernel senza root su API 31/S+, che aumenterà la precisione dei lanci di StartupMode.COLD. (Iecfdb, b/200160030)
Versione 1.1.0-alpha08
29 settembre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha08
viene rilasciato. La versione 1.1.0-alpha08 contiene questi commit.
Modifiche all'API
- Attivare i macrobenchmark di 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 percentile di più campioni per iterazione. (I56247, b/199940612)
- Passa alle metriche in virgola mobile nelle librerie di benchmark (troncate nell'interfaccia utente di Studio). (I69249, b/197008210)
Versione 1.1.0-alpha07
1° settembre 2021
androidx.benchmark:benchmark-*:1.1.0-alpha07
viene rilasciato. La versione 1.1.0-alpha07 contiene questi commit.
Modifiche all'API
- È stato aumentato il livello API minimo a 21 per riflettere il livello API più basso previsto da supportare in futuro. L'API minima attualmente supportata continua a essere trasmessa tramite RequiredApi() ed è attualmente 29 (I440d6, b/183129298)
Correzioni di bug
- Sono stati corretti i problemi relativi a
ProfileInstaller
per semplificare l'esecuzione di MacroBenchmark da parte delle app che utilizzano i profili di riferimento utilizzandoCompilationMode.BaselineProfile
. (I42657, b/196074999) NOTA: richiede anche l'aggiornamento aandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
o versioni successive. - I benchmark
StartupMode.COLD
+CompilationMode.None
sono ora più stabili. (I770cd, b/196074999)
Versione 1.1.0-alpha06
18 agosto 2021
androidx.benchmark:benchmark-*:1.1.0-alpha06
viene rilasciato. La versione 1.1.0-alpha06 contiene questi commit.
Modifiche all'API
- È stato aggiunto l'argomento di strumenti
androidx.benchmark.iterations
per consentire l'override manuale del conteggio delle iterazioni durante il test/il profiling 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
è in fase di sviluppo. Per il momento, evita di utilizzarlo per determinare la qualità di un profilo.
Versione 1.1.0-alpha05
4 agosto 2021
androidx.benchmark:benchmark-*:1.1.0-alpha05
viene rilasciato. La versione 1.1.0-alpha05 contiene questi commit.
1.1.0-alpha04
è stato annullato prima del rilascio a causa di un arresto anomalo sporadico. b/193827052
Modifiche all'API
- È stato sostituito startActivityAndWait per invocare il lancio tramite
am start
, il che riduce il tempo di ogni iterazione di misurazione di circa 5 secondi, a costo di non supportare più i parcelable intent. (I5a6f5, b/192009149
Correzioni di bug
- Riduci l'aggressività del rilevamento della limitazione termica e calcola nuovamente il valore di riferimento se le limitazioni vengono rilevate di frequente. (I7327b)
- Corregge il funzionamento di FrameTimingMetric su Android S beta (Ib60cc, b/193260119)
- Utilizza un
EmptyActivity
per rimuovere l'app target da uno stato di arresto forzato per supportare meglioCompilationMode.BaselineProfile
. (Id7cac, b/192084204) - L'estensione del file di traccia è stata modificata in
.perfetto-trace
per renderla conforme allo standard della piattaforma. (I4c236, b/174663039) - Ora StartupTimingMetric genera la metrica "fullyDrawnMs" per misurare il tempo necessario per il 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 di compilazione su ComponentActivity). Tieni presente che il test deve essere eseguito per un periodo di tempo sufficiente a acquisire la metrica (startActivityAndWait non attende reportFullyDrawn). (If1141, b/179176560)
- Riduzione del costo dell'aggiunta dei metadati dell'interfaccia utente alle tracce di oltre 50 ms (Ic8390, b/193923003)
- È stata aumentata notevolmente la frequenza di polling quando si interrompe il monitoraggio, il che può ridurre, ad esempio, il tempo di esecuzione del benchmark di avvio di oltre il 30% (Idfbc1, b/193723768)
Versione 1.1.0-alpha03
16 giugno 2021
androidx.benchmark:benchmark-*:1.1.0-alpha03
viene rilasciato. La versione 1.1.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un nuovo
CompilationMode.BaselineProfile
per supportare i profili 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 per utilizzare un'API non ritirata con una sintassi che supporta anche gli utenti di .gradle.kts.
Ad es.
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Versione 1.1.0-alpha02
18 maggio 2021
La versione 1.1.0-alpha02 di Benchmark introduce un componente importante per i benchmark: Macrobenchmark. Oltre a consentire di misurare i loop della CPU, macrobenchmark consente di misurare le interazioni dell'intera app, come l'avvio e lo scorrimento, e di acquisire le tracce. Per saperne di più, consulta la documentazione della libreria.
androidx.benchmark:benchmark-*:1.1.0-alpha02
viene rilasciato. La versione 1.1.0-alpha02 contiene questi commit.
Nuove funzionalità
Sono stati aggiunti elementi artefatti dei benchmark macro (androidx.benchmark:benchmark-macro-junit4
e androidx.benchmark:benchmark-macro
)
- Acquisisci le metriche sul rendimento all'avvio, sullo scorrimento/sull'animazione della tua app, localmente o in CI
- Acquisisci e ispeziona le tracce da Android Studio
Correzioni di bug
- Sfrutta la soluzione alternativa per il problema delle autorizzazioni della shell con la directory di output su Android 12 (nota: potrebbe essere necessario aggiornare il plug-in Android Gradle alla versione 7.0.0 canary e Android Studio ad Arctic Fox (2020.3.1) per continuare a acquisire i file di output sui dispositivi interessati). (Icb039)
- Supporto della memorizzazione nella cache della configurazione in BenchmarkPlugin (6be1c1, b/159804788)
- Esportazione di file semplificata: attiva per impostazione predefinita in una directory che non richiede
requestLegacyExternalStorage=true
(8b5a4d, b/172376362) - Corregge la libreria che stampa avvisi logcat relativi alla mancata individuazione del thread JIT nelle versioni della piattaforma in cui non è presente. (I9cc63, b/161847393)
- Correzione per la lettura della frequenza massima del dispositivo. (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
vengono rilasciati. La versione 1.1.0-alpha01 contiene questi commit.
Nuove funzionalità della versione 1.1
- Metrica di allocazione: i benchmark ora eseguono un'ulteriore fase dopo il riscaldamento e la misurazione del tempo, 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 e nel
- Supporto per il profiling: ora puoi acquisire i dati di profilazione per un'esecuzione di benchmark, per verificare il motivo per cui il codice potrebbe essere lento. Il benchmark supporta l'acquisizione del monitoraggio dei metodi o del campionamento dei metodi dall'ART. Questi file possono essere esaminati con il Profiler in Android Studio utilizzando File > Apri.
- Il plug-in Gradle Benchmark ora fornisce i valori predefiniti per una configurazione più semplice:
testBuildType
è impostato su release per impostazione predefinita per evitare di utilizzare dipendenze con la copertura del codice integrata. Il buildType release viene configurato anche come buildType predefinito, il che consente ad Android Studio di selezionare automaticamente la variante di build corretta quando apri un progetto per la prima volta. (b/138808399)signingConfig.debug
viene utilizzato come configurazione di firma predefinita (b/153583269)
** Correzioni di bug **
- È stato ridotto in modo significativo il sovraccarico della transizione di riscaldamento, in cui la prima misurazione per ogni benchmark era artificialmente più alta rispetto alle altre. Questo problema era più evidente nei benchmark molto piccoli (1 microsecondo o meno). (b/142058671)
- È stato corretto l'errore
InstrumentationResultParser
stampato per ogni benchmark quando viene eseguito dalla riga di comando. (I64988, b/154248456)
Problemi noti
- Le invocazioni di Benchmark da riga di comando e Gradle non stampano direttamente i risultati. Per risolvere il problema, puoi eseguire il report in Studio o analizzare il file di output JSON per trovare i risultati.
- I report di benchmark non riescono a estrarre il report dai dispositivi su cui è installata un'app con un applicationId che termina con "android" o "download" (non è sensibile alle maiuscole). Gli utenti che riscontrano questo problema devono eseguire l'upgrade del plug-in Android per Gradle alla versione 4.2-alpha01 o successiva.
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 sul rendimento del codice dell'app e ottenere risultati rapidamente.
Evita problemi di configurazione di build e runtime e stabilizza le prestazioni del dispositivo per garantire misurazioni accurate e coerenti. Esegui i benchmark direttamente in Android Studio o nell'integrazione continua per osservare il rendimento del codice nel tempo ed evitare le regressioni.
Le funzionalità principali includono:
- Stabilizzazione dell'orologio
- Assegnazione automatica della priorità ai thread
- Supporto per i test delle prestazioni dell'UI, ad esempio nell'esempio RecyclerView
- Warmup e looping JIT-aware
- Output del benchmark JSON per il post-processing
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
vengono rilasciati. La versione 1.0.0-rc01 contiene questi commit.
Nuove funzionalità
- È stato aggiunto il monitoraggio systrace ai benchmark
Correzioni di bug
- È stato risolto il problema di instabilità delle metriche per cui il codice JIT non terminava prima del riscaldamento a causa della riassegnazione della priorità (b/140773023)
- Directory di output JSON unificata nei plug-in Android 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
vengono rilasciati. La versione 1.0.0-beta01 contiene questi commit.
Nuove funzionalità
- Esegui la raccolta dei rifiuti prima di ogni riscaldamento per ridurre la pressione sulla memoria da un benchmark all'altro (b/140895105)
Correzioni di bug
- È stata aggiunta la dipendenza
androidx.annotation:android-experimental-lint
, in modo che il codice Java generi correttamente errori di lint quando non viene utilizzata l'API sperimentale, in modo simile a quanto fornito dall'annotazione sperimentale di Kotlin per gli utenti di Kotlin. - Ora viene rilevato correttamente l'utilizzo dell'argomento di misurazione
additionalTestOutputDir
per l'output in Android Gradle Plugin 3.6, per sapere quando AGP gestirà la copia dei dati. - Correggi la frequenza del 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
vengono 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 programma di test, che ora fornisce un messaggio di errore più utile
Modifiche all'API
- L'annotazione sperimentale
ExperimentalAnnotationReport
è ora correttamente pubblica. L'utilizzo dell'API sperimentale BenchmarkState#report ora richiede questa annotazione
Versione 1.0.0-alpha05
5 settembre 2019
androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
e androidx.benchmark:benchmark-junit4:1.0.0-alpha05
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Modifiche all'API
- L'API
BenchmarkState.reportData
è ora contrassegnata come sperimentale
Correzioni di bug
- Correzione dello script di blocco dell'orologio, che non andava a buon fine sui dispositivi in cui mancavano le utilità di shell
cut
oexpr
. - È stato risolto un problema con il task
./gradlew lockClocks
che si bloccava sui dispositivi sottoposti a 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
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
È stata inoltre aggiunta nuova documentazione su come utilizzare la libreria Benchmark senza Gradle, sia per l'utilizzo con diversi sistemi di compilazione (come Bazel o Buck) sia per l'esecuzione in CI. Per ulteriori informazioni, consulta Eseguire benchmark senza Gradle ed Eseguire benchmark nell'integrazione continua.
Nuove funzionalità
- Plug-in Gradle
- Ora disattiva automaticamente la copertura dei test e imposta
AndroidBenchmarkRunner
per impostazione predefinita (b/138374050) - È stato aggiunto il supporto per la nuova copia dei dati basata su AGP, quando vengono eseguiti i benchmark e quando si utilizza AGP 3.6 e versioni successive
- Ora disattiva automaticamente la copertura dei test e imposta
- Aggiunta di elementi al formato JSON
- Tempo di esecuzione totale del test di benchmark in output (b/133147694)
- I benchmark
@Parameterized
che utilizzano una stringa di nome (ad es.@Parameters(name = "size={0},depth={1}")
) ora generano i nomi e i valori dei parametri per benchmark nell'output JSON (b/132578772)
- Modalità di prova (b/138785848)
- È stata aggiunta una modalità di "simulazione" per eseguire ogni ciclo di benchmark una sola volta, in modo da verificare la presenza di errori/arresti anomali senza acquisire misurazioni. Ad esempio, può essere utile per eseguire rapidamente i benchmark in presubmit per verificare che non siano danneggiati.
Modifiche all'API
- La struttura del modulo è cambiata, dividendo la libreria (b/138451391)
benchmark:benchmark-junit4
contiene classi con dipendenza JUnit:AndroidBenchmarkRunner
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 le API JUnit4 in futuro
- Gli avvisi di configurazione ora vengono trattati come errori e fanno arrestare in modo anomalo il test (b/137653596)
- Questo viene fatto per incoraggiare ulteriormente misurazioni accurate, in particolare nella CI
- Questi errori possono essere ridotti ad avvisi con un argomento di misurazione. Ad esempio:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Correzioni di bug
- Gli errori durante la scrittura su archiviazione esterna sui dispositivi Q forniscono messaggi più descrittivi, con suggerimenti su come risolvere il problema
- Gli schermi si accendono automaticamente durante le esecuzioni del benchmark, anziché non funzionare quando lo schermo è spento
Contributi esterni
- Grazie a Sergey Zakharov per aver contribuito con i miglioramenti all'output JSON e alla 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
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Mostra la durata della sospensione a causa del throttling termico per ogni 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
- Aggiunta del supporto per i report di benchmark sui dispositivi Android 10 che utilizzano lo spazio archiviazione limitato
Versione 1.0.0-alpha02
6 giugno 2019
androidx.benchmark:1.0.0-alpha02
e
androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Tieni presente che trattiamo lo schema JSON come un'API. Abbiamo intenzione di seguire gli stessi vincoli di stabilità delle altre API: stabile (con eccezioni molto rare) una volta in versione beta e corretta nella release finale, con solo aggiunte nelle release minori e modifiche/rimozioni nelle release principali.
Modifiche all'API
Schema JSON rivisto. È probabile che ulteriori modifiche allo schema JSON siano limitate alle aggiunte:
- È stata riorganizzata la struttura dell'oggetto risultato per supportare in futuro gruppi di metriche aggiuntivi (b/132713021)
- Nell'oggetto di primo livello sono state aggiunte informazioni contestuali relative alla prova, ad esempio informazioni sul dispositivo e sulla build e se gli orologi sono bloccati (b/132711920)
- I nomi delle metriche relative al tempo ora contengono "ns" (b/132714527)
- Statistiche aggiuntive aggiunte per metrica registrata (massima, media, minima) e stata rimossa la statistica di riepilogo "nano" semplificata (b/132713851)
Esito XML rimosso (b/132714414)
Il rilevamento della limitazione termica è stato rimosso dall'API
BenchmarkState.reportData
(b/132887006)
Correzioni di bug
- È stato corretto il problema relativo al mancato blocco del pulsante
./gradlew lockClocks
su alcuni dispositivi con sistemi operativi recenti (b/133424037) - Rilevamento della limitazione disabilitato per l'emulatore (b/132880807)
Versione 1.0.0-alpha01
7 maggio 2019
androidx.benchmark:benchmark:1.0.0-alpha01
viene rilasciato. I commit inclusi
in questa versione sono disponibili
qui.