Benchmark

Misura con precisione il rendimento del tuo codice in Android Studio.
Aggiornamento più recente Release stabile Candidato per la release Versione beta Release alpha
14 maggio 2024 1.2.4 - - 1.3.0-alpha05

Dichiarazione delle dipendenze

Per aggiungere una dipendenza a 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:

Groovy

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

Kotlin

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

Microbenchmark

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

Groovy

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

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

Kotlin

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

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

The Microbenchmark library also provides a Gradle plugin to use with your microbenchmark module. This plugin sets build configuration defaults for the module, sets up benchmark output copy to the host, and provides the ./gradlew lockClocks task.

To use the plugin, include the following line in the `plugins` block in your top-level build.gradle file:

Groovy

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

Kotlin

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

Then apply the plugin to your benchmark module's build.gradle file

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Crea un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 1.3

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

  • Genera un'eccezione più chiara quando la metrica macrobench restituisce un valore pari a zero per tutte le iterazioni (Iab58f, b/314931695)
  • Ulteriori regole di soluzione alternativa aggiunte alle regole ProGuard del microbench, compreso il supporto delle regole dei listener e di altri avvisi / errori osservati. (I14d8f, b/329126308, b/339085669).
  • Il tracciamento del metodo viene eseguito come fase separata durante un Macrobenchmark e non influisce più sulle misurazioni. (If9a50, b/285912360, b/336588271).
  • Sono stati aggiunti ulteriori suggerimenti di debug per eliminare il messaggio di errore della trasmissione dello strumento di analisi. (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 alle API

  • È stata aggiunta la variante sperimentale MacrobenchmarkRule#measureRepeated che utilizza un PerfettoConfig personalizzato per la registrazione della traccia Perfetto completamente personalizzata. Tieni presente che configurazioni non corrette potrebbero causare errori delle classi delle metriche integrate. (Idfd3d, b/309841164, b/304038384)
  • Rinomina PowerMetric.deviceSupportsPowerEnergy in PowerMetric.deviceSupportsHighPrecisionTracking per maggiore chiarezza (I5b82f)
  • Sono stati aggiunti PowerMetric.deviceBatteryHasMinimumCharge() e PowerMetric.deviceSupportsPowerEnergy() per consentire la modifica o l'esclusione dei benchmark in base alla capacità di misurazione della potenza del dispositivo. (I6a591, b/322121218).

Correzioni di bug

  • Aggiunto un confronto con il profilo di riferimento precedente (I824c8, b/269484510)
  • Aggiunta DSL per disattivare gli avvisi (Ic4deb, b/331237001)
  • Modificata l'eccezione al log informativo quando le varianti di benchmark sono disattivate (I8a517, b/332772491)
  • Semplifica l'acquisizione delle tracce del metodo per un Macrobenchmark con l'ambito della durata dell'effettivo measureBlock(). In precedenza, veniva avviato al momento del lancio del processo target e supportava solo gli avvii a freddo (Iee85a, b/300651094)
  • Evita gli arresti anomali quando il processore di traccia 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 pubbliche PerfettoTraceProcessor.Session.queryMetrics dell'API con varianti JSON, textproto e protocollo binario (non decodificato). che consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382)
  • È stato aggiunto profilerOutput all'output JSON per semplificare la creazione di strumenti per le tracce di profilazione (ad es. perfetto, tracce del metodo). (I05ddd, b/332604449).
  • È stato aggiunto un power tag al benchmark di Perfetto Config. Questa operazione acquisisce, ad esempio, i punti di traccia dei wakelock. (Icfe44, b/286551983).
  • L'argomento inst androidx.benchmark.profiling.skipWhenDurationRisksAnr aggiunto può essere impostato su false per evitare di saltare le tracce del metodo quando la durata prevista potrebbe causare un errore ANR, vivamente consigliato da evitare nelle esecuzioni di CI.
  • Aggiunto l'argomento inst sperimentale androidx.benchmark.profiling.perfCompare.enable. Imposta questo valore su true per eseguire le tempistiche di confronto tra le fasi di misurazione e profilazione. Utili, ad esempio, per valutare l'overhead del tracciamento dei metodi. (I61fb4, b/329146942).

Modifiche alle API

  • È stato cambiato TraceSectionMetric.Mode in classe sigillata per consentire l'espansione futura senza interrompere l'esauriente quando le istruzioni (I71f7b)
  • Sono stati aggiunti TraceSectionMetric.Mode.Average e .Count e sono stati riordinati gli argomenti in modo che l'argomento più comune (mode) fosse precedente nell'elenco degli argomenti, riducendo la necessità di specificare i nomi dei parametri. (Ibf0b0, b/315830077, b/322167531).
  • Rinominato Metric.getResult in getMeasurements in base al tipo restituito (I42595)

Correzioni di bug

  • Risolvi il problema per assicurarti che i benchmark utilizzino profili di riferimento generati quando automaticGenerationDuringBuild è disattivato (Ic144f, b/333024280)
  • Correggi gli override delle proprietà del plug-in Gradle di BaselineProfile per attivare la generazione del profilo di riferimento e il benchmarking quando personalizzi un tipo di build nonMinified o benchmark. (Ib8f05, b/324837887).
  • Le tracce del metodo vengono svuotate nel macrobenchmark, in modo che le tracce del metodo vengano acquisite completamente e siano valide, anche su dispositivi più lenti. (I6349a, b/329904950)
  • Attiva il blocco dell'avvio nel record di traccia Perfetto per ridurre il rischio di dati mancanti all'inizio della traccia. Funzionalità supportata solo sull'API 33 e versioni successive (Ie6e41, b/310760059).
  • È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, in quanto i file JSON di output per modulo verranno sovrascritti ripetutamente. (Ia1af6, b/286899049).
  • Forza i separatori delle migliaia "," (virgola) per garantire la coerenza nell'output di Studio, ignorando le impostazioni internazionali del dispositivo (I3e921, b/313496656)
  • TraceSectionMetric ora supporta le sezioni create utilizzando Trace.{begin|end}AsyncSection. (I91b32, b/300434906).
  • Sono state aggiunte log.w / etichette di eccezione a tutti gli errori di rilevamento dell'avvio. Questa operazione non cambia il comportamento corrente (ad esempio, alcuni errori vengono visualizzati e altri non riescono a rilevare automaticamente l'avvio), ma la comprensione è più comprensibile. In genere, quelle per cui Log.w() non riescono a segnalare le metriche di avvio sono quelle in cui mancano eventi non frame; vengono generate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sulla durata frame (dalle sezioni UI/RT). (Id240f, b/329145809)
  • Annulla i job di riduzione in background prima di eseguire un Macrobenchmark per ridurre le interferenze. (I989ed)
  • È stata aggiunta la misurazione frameCount a FrameTimingMetric 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 annullamento della convalida risolti). (I1e5aa).
  • È stato chiarito che frameOverrunMs è la metrica preferita per il monitoraggio, se disponibile nei documenti, e perché. (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 minimizzare i test dei moduli delle librerie. Utilizza quanto segue per abilitare la minimizzazione/ottimizzazione di R8 nel build.gradle del modulo di benchmark, 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

  • Correggere l'avviso di tracciamento dei metodi in modo che si trovi su una riga separata dall'output del 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 alle API

  • Parametri booleani MicrobenchmarkConfig rinominati per evitare la parola non necessaria "dovrebbe" (Ia8f00, b/303387299)
  • È stato aggiunto BenchmarkRule.measureRepeatedOnMainThread in modo che i benchmark dei thread principali (ad esempio quelli che toccano le UI di Visualizzazioni o Scrivi) possano evitare di attivare errori ANR, soprattutto durante suite di grandi dimensioni in CI. (I5c86d).
  • È stata aggiunta FrameTimingGfxInfoMetric, un'implementazione alternativa sperimentale di FrameTimingMetric con misurazioni provenienti direttamente dalla piattaforma, anziché estratte dalla traccia Perfetto. (I457cb, b/322232828).
  • Aggiungi la possibilità di eseguire il dump di un profilo ART durante singole iterazioni warmUp. (I17923)
  • Diverse modifiche all'API TraceSectionMetric:
    • Aggiungi Mode.Min, Mode.Max
    • Aggiungi un argomento di etichetta per sostituire il nome della sezione come etichetta della metrica
    • Aggiunto il nome della modalità all'output per chiarire il significato della metrica
    • Il valore predefinito è stato modificato in somma, poiché la maggior parte dell'utilizzo di questa metrica è per eventi ripetuti Tieni presente queste modifiche nell'utilizzo di CI, poiché potrebbero creare discontinuità o interrompere l'analisi. (Ic1e82, b/301892382, b/301955938).

Correzioni di bug

  • Miglioramento del messaggio di errore nel plug-in Gradle del profilo di base quando non esiste un dispositivo gestito specificato (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)
  • URL di output del profilo di avvio e di riferimento fisso alla fine dell'attività di generazione (I802e5, b/313976958)
  • Timeout dell'origine dati modificati per tentare di correggere java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Aggiungi due argomenti sulla strumentazione per eseguire l'override del comportamento di eliminazione delloshar negli arresti anomali della soluzione alternativa durante il benchmarking di app senza ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : può essere utilizzato per ignorare tutte le operazioni di eliminazione dello Shadr (incluso quello eseguito nei lanci StartupMode.Cold), soprattutto quando si esegue il benchmarking per le app che non utilizzano ancora il programma di installazione del profilo 1.3
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : può essere usato per tollerare gli errori quando si cerca di eliminare gli ombrelli, ad esempio quando si esegue il benchmarking delle app senza profilo di installazione 1.3 (I4f573)
  • Salta il tracciamento del metodo nel thread dell'interfaccia utente se dovrebbe richiedere più di qualche secondo e le tracce del metodo di pulizia durante il lancio. (I6e768)
  • Genera quando i nomi file sono più lunghi di 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione di file. (I4a5ab).
  • Risolvi il problema per cui i frame non terminati all'inizio e alla fine della traccia potevano essere accoppiati, il che veniva segnalato erroneamente come un singolo frame estremamente lungo. (I39353, b/322232828)
  • Usa --skip verification sull'API 30 o versioni successive quando reinstalli un pacchetto sull'API 30-33 per cancellare i profili ART nelle build degli utenti. Ciò consente di bypassare gli avvisi di Play Protect che causano guasti su alcuni tipi di dispositivi. (Ic9e36).
  • Usa am force-stop per terminare le app quando non è presente un'app di sistema come UI di sistema o Avvio app. (I5e028).
  • Macrobenchmark ora attende che 1 second l'applicazione di destinazione esegua lo svuotamento di un profilo ART (in precedenza aspettava 500 ms). (I85a50, b/316082056)
  • Migliora l'errore FrameTimingMetric quando non vengono prodotti frame e mostra sempre il link di output per tracciare l'errore di analisi delle metriche per facilitare la diagnosi del problema. (I956b9)
  • Risolto il problema di arresto anomalo in FrameTimingMetric che non riesce ad analizzare l'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276).
  • Riduci il livello di 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

  • Corregge il srcset del profilo di riferimento non configurato nelle varianti di benchmark. Corregge anche automaticGenerationDuringBuild nelle librerie che causano una dipendenza circolare. (I28ab7, b/333024280).
  • Usa am force-stop per terminare le app quando non è presente un'app di sistema come UI di sistema o Avvio app. Questa operazione corregge l'arresto anomalo di StartupMode.COLD benchmark dal messaggio "Il pacchetto $package non deve essere in esecuzione prima dell'avvio a freddo." A causa di un'interruzione del processo non riuscita. (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

  • Rimossa l'eccezione dal plug-in Baseline Profile per Gradle quando la versione AGP è 8.3.0 o successiva.
  • Correzione per l'inclusione dei profili di base della libreria in AAR prima di AGP 8.3.0-alpha15.

Versione 1.2.2

1° dicembre 2023

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

Profili di riferimento

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à

  • Miglioramento del messaggio di errore relativo alla disattivazione delle varianti di test da parte dell'utente (b/307478189)
  • Sono state aggiunte proprietà per supportare l'integrazione dell'esecuzione dei test dell'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 per Gradle profilo base automatizza l'acquisizione e l'inclusione dei profili di base nel flusso di lavoro di test e creazione.
  • BaselineProfileRule.collect ora stabile, una versione semplificata e semplificata della precedente API BaselineProfileRule.collectBaselineProfile sperimentale
    • Devi solo specificare packageName e gestire la tua app
  • Per le librerie che generano profili di base, ora puoi filtrare le regole generate nel codice (argomento BaselineProfileRule.collect) o anche più semplicemente nel plug-in Gradle
  • Correzioni
    • Raccolta di profili di riferimento corretta su Android U e versioni successive (Id1392, b/277645214)

Macrobenchmark

  • Compilation
    • Macrobenchmark ora ripristina correttamente lo stato della compilazione per ogni compilazione. Ciò richiede la reinstallazione dell'APK prima di Android 14, quindi è vivamente consigliato eseguire il benchmarking su Android 14 e versioni successive se vuoi mantenere lo stato (ad esempio l'accesso utente) nei dati che vengono misurati.
    • Puoi anche risolvere questo problema controllando separatamente la compilazione dell'app e saltandola con CompilationMode.Ignore() o con l'argomento di strumentazione.
  • Argomenti di strumentazione

    • Supporto dell'argomento di strumentazione androidx.benchmark.dryRunMode.enable (già disponibile nel microbenchmark) per esecuzioni di convalida più rapide (ad es. durante la creazione del benchmark o in fase di pre-invio)
    • Supporto per androidx.benchmark.profiling.mode=StackSampling e MethodTracing.
    • È stato aggiunto androidx.benchmark.enabledRules per consentire il profilo di riferimento del filtro di runtime rispetto ai test delle regole macrobenchmark
    • Aggiunto l'argomento androidx.benchmark.perfettoSdkTracing.enable per attivare il tracciamento con tracing-perfetto, ad esempio il tracciamento della ricomposizione di Compose. Tieni presente che, se utilizzato con StartupMode.COLD, la sincronizzazione influirà in modo significativo poiché la libreria di tracciamento viene caricata e attivata durante l'avvio dell'app.
  • Requisiti

    • Macrobenchmark ora richiede ProfileInstaller 1.3.0 o versioni successive nell'app di destinazione, per attivare l'acquisizione / reimpostazione del profilo e lo svuotamento della cache dello smoothr.
  • Nuove API delle metriche sperimentali

    • È stata aggiunta l'opzione sperimentale TraceSectionMetric, che consente di estrarre tempi semplici dai blocchi trace("") {} nella tua app, oppure TraceMetric per sfruttare tutte le funzionalità di query di Perfetto TraceProcessor.
    • È stata aggiunta l'esperienza sperimentale PowerMetric per acquisire informazioni sull'utilizzo avanzato
    • Aggiunta dell'esperimento sperimentale MemoryCountersMetric per conteggiare gli errori di pagina
    • È stata aggiunta l'API sperimentale PerfettoTraceProcessor, utilizzata internamente per estrarre metriche dalle tracce di sistema (ovvero le tracce Perfetto)
  • Correzioni

    • Sono stati corretti gli arresti anomali durante l'installazione o l'estrazione di profili da un'app installata da più APK (ad esempio da app bundle).
    • Risolto il problema di FrameTimingMetric ignorando i frame con ID frame incoerenti (di solito, frame durante gli echi sull'API 31 e versioni successive) (I747d2, b/279088460)
    • Correzione degli errori di analisi su tracce superiori a 64 MB (Ief831, b/269949822)
    • Sono stati chiariti gli errori quando l'immagine del sistema operativo del dispositivo (in particolare l'emulatore) non è configurata correttamente per il tracciamento o la compilazione
    • Salta il controllo del livello della batteria per i dispositivi senza batteria (micro e macro)
    • Output file migliorato, con errori più evidenti per directory di output non valide e valori predefiniti più sicuri
    • È stata migliorata la stabilità di StartupMode.COLD, perché è stata eliminata in modo coerente la cache dello strumento di identificazione (esposta anche tramite MacrobenchmarkScope.dropShaderCache)
    • Correzione di riserva Leanback per startActivityAndWait.

Microbenchmark

  • Funzionalità
    • La profilazione è stata spostata in una fase separata, dopo altre metriche, in modo che un'esecuzione di test possa mostrare tempistiche precise e risultati della profilazione.
  • API sperimentali
    • È stata aggiunta l'API sperimentale MicrobenchmarkConfig per definire le metriche personalizzate e configurare il tracciamento e la profilazione. Può essere utilizzato per acquisire tracce del metodo o per acquisire i punti di traccia (ma fai attenzione al tracciamento dell'overhead).
    • Aggiunta di API sperimentali per controllare BenchmarkState separatamente da BenchmarkRule, senza JUnit
    • È stato aggiunto il record sperimentale PerfettoTrace per consentire l'acquisizione di tracce Perfetto, con configurazione personalizzata, separata dalle API di benchmark.
  • Correzioni
    • Nella soluzione alternativa mancano spazi vuoti principali nell'output del benchmark di Android Studio.
    • Risolvi il problema per cui gli avvisi non venivano stampati nell'output del benchmark di Android Studio.
    • È stato risolto l'arresto anomalo di SampledProfiling su Android 13 (API 33) e versioni successive.
    • Prestazioni di dryRunMode notevolmente migliorate saltando il tracciamento di IsolationActivity e Perfetto (modalità di prova fino a 10 volte più veloce sulle versioni precedenti del sistema operativo).

Versione 1.2.0-rc02

6 ottobre 2023

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

Correzioni di bug

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

Versione 1.2.0-rc01

20 settembre 2023

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

Correzioni di bug

  • Ora viene generata un'eccezione (con istruzioni di rimedio) quando il tracciamento dell'SDK Perfetto non viene inizializzato in un benchmark. (I6c878, b/286228781)
  • È stato risolto l'arresto anomalo OOM durante la conversione della traccia del metodo ART -> formato perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) È stata chiarita l'etichetta di tracciamento del metodo quando è stato effettuato il collegamento nell'output di test di Studio e il metodo fisso che traccia i nomi dei file 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 acquisisci 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 Baseline Profile per Gradle 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 per Gradle Baseline Profiles ora supporta il plug-in Android Gradle 8.3. (aosp/2715214)

Correzioni di bug

  • Correggi gli errori di scrittura, spostamento e pull dei file (in particolare quelli dei test con parametri) sanitizzando ulteriormente i nomi dei file di output, evitando i simboli "=" e ":" nei nomi 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 alle API

  • Aggiunto argomento per filtrare TraceSectionMetric in modo da visualizzare solo il pacchetto di destinazione, attivo per impostazione predefinita (Ia219b, b/292208786)

Correzioni di bug

  • Argomento di strumentazione fullTracing.enable rinominato in perfettoSdkTracing.enable per la coerenza con il nome dell'artefatto e altri riferimenti. fullTracing.enable continuerà a funzionare come riserva. (I7cc00)
  • Ora i punti di traccia interni della libreria di benchmark (incluso il tracciamento del ciclo/fase del microbenchmark) verranno visualizzati nel visualizzatore delle tracce del sistema di Studio e verranno nidificati in Perfetto secondo la procedura corretta. (I6b2e7, b/293510459).
  • È stato rimosso l'errore NOT-PROFILEABLE del macrobenchmark sull'API 31+ e ignora il controllo profilabile sui dispositivi rooted eng/userdebug. (I2abac, b/291722507).
  • Quando si utilizzano le ottimizzazioni del layout di Dex, anche le regole del profilo di avvio sono considerate come regole di base del profilo. (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 alle API

  • Sono state aggiunte API sperimentali per metriche e configurazione personalizzate di microbench (ad es. profiler e tracciamento). (I86101, b/291820856)

Correzioni di bug

  • Segnala errore in macrobench quando il sistema operativo è configurato in modo errato per il tracciamento, come è stato recentemente corretto negli emulatori ARM64 dell'API 26/28. (I0a328, b/282191686).
  • Sono stati aggiunti dettagli all'errore di reimpostazione della compilazione per suggerire l'aggiornamento dell'emulatore, poiché alcuni emulatori hanno risolto di recente il problema. (I8c815, b/282191686)
  • Imposta androidx.test.uiautomator:uiautomator:2.2.0 come dipendenza api 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

  • Sono stati corretti gli avvisi che a volte venivano soppressi nell'output Benchmark in Studio e gli spazi vuoti iniziali dell'output del benchmark non venivano visualizzati in Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
  • Commento corretto per FrameTimingMetric. Il nome della sottometrica è frameDurationCpuMs. (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 alle API

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

Correzioni di bug

  • Supporto di Macrobenchmark per androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360).
  • La profilazione del microbenchmark è passata a una fase separata, quindi avviene in sequenza dopo la misurazione, anziché sostituirla. Le sezioni della traccia MethodTracing sono ora incluse nella traccia Perfetto acquisita, se presente. (I9f657, b/285014599)
  • Aggiungi la misurazione del conteggio a TraceSectionMetric con Mode.Sum. (Ic121a, b/264398606).

Versione 1.2.0-alpha15

7 giugno 2023

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

Nuove funzionalità

  • Aggiunta l'esperimento MemoryUsageMetric sperimentale per monitorare l'utilizzo della memoria di un'applicazione di destinazione. (I56453, b/133147125, b/281749311)
  • Aggiungi il supporto per configurazioni Perfetto completamente personalizzate con PerfettoTrace.record (If9d75, b/280460183)
  • Proprietà aggiunta per saltare la generazione del profilo di riferimento. Utilizzo: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020).

Modifiche alle API

  • L'API collectBaselineProfile genera sempre profili di riferimento stabili. L'API collectStableBaselineProfile è stata rimossa e sarà necessario usare collectBaselineProfile. (I17262, b/281078707)
  • L'argomento filterPredicate di BaselineProfileRule è stato modificato in non null, con un valore predefinito equivalente, in modo che il comportamento predefinito del filtro sia più chiaro nella documentazione. (I3816e)

Correzioni di bug

  • Disattiva il tracciamento IsolationActivity e Perfetto in dryRunMode per migliorare notevolmente le prestazioni, poiché erano la maggior parte del runtime. (Ie4f7d)
  • Supporto per il campionamento dello stack di chiamate in Macrobenchmark utilizzando gli argomenti del test di strumentazione androidx.benchmark.profiling.mode=StackSampling e androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489).
  • È stato corretto l'arresto anomalo durante l'eliminazione degli wiper su Android U (API 34) e sugli 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

  • È stato risolto il problema FrameTimingMetric ignorando i frame con ID frame incoerenti. Di conseguenza, alcune animazioni sulle recenti versioni della piattaforma (API 31 e versioni successive) ignorano molti frame durante l'animazione di RenderThread, ad esempio durante un'eco. (I747d2, b/279088460)
  • Correzione dell'analisi del processore di traccia per tracce superiori a 64 MB. (Ief831, b/269949822)
  • È stata corretta la generazione del profilo di riferimento su Android U che non funzionava a causa del diverso output del comando pm dump-profiles. (Id1392, b/277645214)
  • Correggere lo script di blocco del clock della GPU per confrontare correttamente le stringhe (I53e54, b/213935715)

Versione 1.2.0-alpha13

5 aprile 2023

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

Modifiche alle API

  • Parametro del tipo di profilo aggiunto durante la generazione di profili di riferimento per supportare la funzionalità del profilo di avvio imminente (Ie20d7, b/275093123)
  • È stata aggiunta la nuova API sperimentale TraceMetric per definire metriche completamente personalizzate in base al contenuto 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 base viene rilasciato in versione alpha, semplificando la generazione di un profilo di base e semplificando il flusso di lavoro degli sviluppatori.

Modifiche alle API

  • È stato rimosso il supporto del tracciamento Perfetto nelle API 21 e 22, che include sia i microbenchmark sia le API sperimentali PerfettoTrace. Prima di questa versione, le connessioni UiAutomation erano inaffidabili su alcuni dispositivi. (I78e8c).
  • È stata aggiunta l'API pubblica sperimentale per PerfettoTraceProcessor per abilitare l'analisi dei contenuti della traccia. Questo è un passaggio verso metriche completamente personalizzate basate sui dati di traccia Perfetto. (I2659e, b/219851406).

Versione 1.2.0-alpha11

8 marzo 2023

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

Correzioni di bug

  • Sono stati corretti gli arresti anomali in MacrobenchmarkRule e BaselineProfileRule durante la reinstallazione o l'estrazione di 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 di destinazione per reimpostare lo stato di compilazione, grazie a una nuova funzionalità della piattaforma. In precedenza era necessario disporre di un dispositivo rooted o gestire la rimozione di tutto lo stato dell'applicazione (ad es. l'accesso utente) prima dell'esecuzione di ogni benchmark. (I9b08c, b/249143766).

Correzioni di bug

  • Correggi DryRunMode per evitare più l'arresto anomalo con un profilo vuoto a causa della mancanza di compilazione. Al contrario, esegue una singola iterazione ed estrae il profilo per garantire che l'elemento venga acquisito. (I2f05d, b/266403227).
  • Correggi l'arresto anomalo di PowerMetric durante il controllo della presenza di powerstats sui livelli API precedenti. (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

  • Attivazione del passaggio di None all'argomento della strumentazione androidx.benchmark.enabledRules per disabilitare tutti i benchmark / generazione del profilo di riferimento. (I3d7fd, b/258671856)
  • Correggi PerfettoTrace acquisizione in moduli dell'app (ad esempio APK di test non auto-strumentali) (I12cfc)
  • Ordine degli argomenti pull adb del profilo di riferimento corretto nell'output di Studio (I958d1, b/261781624)
  • L'API ARM emulatore 33 viene ora correttamente riconosciuta come tale quando si cerca di eseguire un macrobenchmark e si stamperà correttamente l'avviso. (69133b,b/262209591)
  • Salta il controllo del livello della batteria sui dispositivi senza batteria in Macrobenchmark (fe4114, b/232448937)

Versione 1.2.0-alpha08

7 dicembre 2022

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

Modifiche alle API

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

Correzioni di bug

  • Migliora la sicurezza della scrittura dell'output dei file, che dovrebbe impedire che i file di output vengano scritti / aggiunti automaticamente, soprattutto nell'API 21/22. (If8c44, b/227510293)
  • Correggi l'output della traccia simpleperf per creare e posizionare il file correttamente. In genere questo dovrebbe anche risolvere i problemi in cui Gradle non ha eseguito correttamente il pull di un file. (I12a1c, b/259424099).
  • Messaggio di errore Migliora programma di installazione visualizzato quando il programma di installazione del profilo è troppo vecchio. Questo ora indica di aggiornare la versione del programma di installazione del profilo (1.2.1) per la misurazione dei profili di riferimento sulle API dalla 31 alla 33, invece di dire che non è supportata. (Ia517f, b/253519888).
  • Correggi diversi errori dei comandi della shell nel messaggio di errore Stampa API necessaria <=23, inclusi errori di acquisizione binaria perfetto e errori di acquisizione delle tracce (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 esegui il check-in delle regole del profilo nel controllo del codice sorgente). (Ie2509)
  • È stato corretto l'arresto anomalo sulle 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 registro di broadcast mancante nel file manifest del programma di installazione del profilo, che non è ancora stato rilasciato. (I5c728, b/258619948) Per risolvere il problema in profileinstaller:1.3.0-alpha02, aggiungi quanto segue al file AndroidManifest.xml dell'applicazione (non del tuo benchmark):

  <!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
  <receiver
    android:name="androidx.profileinstaller.ProfileInstallReceiver"
    android:permission="android.permission.DUMP"
    android:exported="true">
    <intent-filter>
        <action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
    </intent-filter>
  </receiver>

Versione 1.2.0-alpha07

9 novembre 2022

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

Modifiche alle API

  • Aggiunge l'API PowerMetric per la misurazione di energia e potenza in Macrobenchmarks. (Ife601, b/220183779)
  • È stato corretto MacrobenchmarkScope.dropShaderCache() in modo da eliminare effettivamente la cache dello strumento di analisi. In questo modo vengono rimossi circa 20 ms di rumore dai benchmark di StartupMode.COLD, dato che gli Shader vengono ora regolarmente cancellati a ogni iterazione. In precedenza, la compilazione di Partial mediante iterazioni a caldo segnalava numeri errati e rapidi, poiché era più probabile che si verificasse la memorizzazione nella cache dello Shader durante il riscaldamento. Questa correzione richiede un dispositivo rooted o l'utilizzo di profileinstaller:1.3.0-alpha02 nell'app di destinazione. Per le modifiche all'API della libreria ProfileInstaller, fai riferimento alla pagina ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • È stato aggiunto TraceSectionMode("label", Mode.Sum), che consente la misurazione del tempo totale trascorso su più sezioni di traccia con la stessa etichetta. Ad esempio, TraceSectionMetric("inflate", Mode.Sum) riporterà una metrica inflateMs per il tempo totale trascorso in un macrobenchmark sull'inflazione. È stato inoltre rimosso il requisito dell'API 29, poiché TraceSectionMetric funziona insieme a androidx.tracing.Trace per tornare ai livelli API inferiori, con l'utilizzo di forceEnableAppTracing all'interno dell'app target. (Id7b68, b/231455742)

Correzioni di bug

  • È stata migliorata la sicurezza 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 errore se l'APK di test macrobenchmark non è configurato come auto-strumentazione. Questo errore impedisce il macrobenchmarking dall'interno del processo dell'app di destinazione. Nel corso del processo, Macrobench non sarebbe in grado di compilare/kill/avviare a freddo l'app o controllare le proprie autorizzazioni (I4279b)
  • Risolto il problema in measureRepeated() per cui StartupMode.COLD non interrompeva il processo target dopo il giorno setupBlock. Ora l'interazione di setupBlock con l'app non lascia il processo dell'app in esecuzione e la 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 alle 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 scaricati sul disco nei dispositivi non rooted, ma richiede l'aggiornamento della dipendenza del programma di installazione del profilo dell'app di destinazione.
    • Per utilizzare BaselineProfileRule o CompilationMode.Partial(warmupIterations) su un dispositivo non rooted, devi anche aggiornare l'app di destinazione in modo che utilizzi androidx.profileinstaller.profileinstaller:1.3.0-alpha01. Ciò consente lo svuotamento corretto del profilo su disco, in modo che possa essere compilato/estratto.

Correzioni di bug

  • Corregge l'arresto anomalo di SampledProfiling sull'API 33 o 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

  • Correggi la suddivisione dei frame nel visualizzatore delle tracce di sistema di Studio per le tracce acquisite tramite benchmark (I3f3ae, b/239677443)
  • Correggi FrameTimingMetric per indicare che FrameOverrun richiede l'API 31 anziché 29 (I716dd, b/220702554)
  • Imposta l'iterazione in BaselineProfileRule e genera chiaramente se il pacchetto di destinazione non è installato (è già stata eseguita 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à

  • Aggiungi il supporto dell'argomento di strumentazione dryRunMode.enable al macrobenchmark (già disponibile in micro) per velocizzare lo sviluppo locale e la convalida dell'automazione delle app (ad esempio, in fase di pre-invio). Questa operazione sostituisce le iterazioni con 1, ignora la compilazione, elimina tutti gli errori di configurazione e disattiva l'output del file .json di misurazione. (Ib51b4, b/175149857).

    Nella riga di comando di Gradle:

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

    In build.gradle:

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

Correzioni di bug

  • È stato risolto il problema StartupTimingMetric per non richiedere più l'avvio delle attività misurate tramite MacrobenchmarkScope.startActivityAndWait(). Ciò significa che la metrica può rilevare i lanci, ad esempio da notifiche, Context.startActivity(), navigazione basata sull'attività in-app o comandi shell. (Ia2de6, b/245414235).
  • Correggi il bug per cui startActivityAndWait tentava di attendere il completamento dell'avvio sugli emulatori per ridurre il livello di severità del rilevamento dei fotogrammi. (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, separate da BenchmarkRule / JUnit4. (Id478f, b/228489614)

Correzioni di bug

Versione 1.2.0-alpha02

24 agosto 2022

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

Modifiche alle API

  • Il valore predefinito è am force stop per MacrobenchmarkScope.killProcess(), anche se rooted, tranne durante la generazione del profilo di riferimento. Può essere sostituito con un argomento booleano facoltativo. (02cce9, b/241214097).

Correzioni di bug

  • Supporta la generazione del profilo di riferimento per le app di sistema. (I900b8, b/241214097)
  • Supporta la verifica delle metriche di potenza 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 di utilizzare strumenti per consentire il tracciamento di Perfetto SDK in un'app che lo espone (I2cc7f)
  • Aggiunto l'argomento di strumentazione androidx.benchmark.enabledRules per abilitare le esecuzioni del macrobenchmark di filtro solo ai benchmark o alla generazione del profilo di riferimento. Utilizza "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio quando generi soltanto BaselineProfiles su un emulatore. È supportato anche l'elenco separato da virgole. (I756b7, b/230371561)

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

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

    In alternativa, dalla riga di comando di Gradle:

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

Modifiche alle API

  • È stato aggiunto un nuovo PowerMetric per la misurazione delle attività relative all'energia e all'alimentazione nei benchmark. (I9f39b, b/220183779).
  • È stata aggiunta una nuova modalità di compilazione CompilationMode.Ignore per saltare la reimpostazione e la compilazione del profilo. (Ibbcf8, b/230453509).
  • È stato aggiunto un nuovo parametro a BaselineProfileRule#collectBaselineProfile per filtrare il file di output in base ai nomi dei pacchetti (If7338, b/220146561)
  • Consente allo sviluppatore di scaricare il dispositivo per misurare il consumo di corrente. (I6a6cb)
  • È stata aggiunta la possibilità di svuotare la cache dello smoothr in MacrobenchmarkScope. (I32122)
  • Consente allo sviluppatore di configurare la visualizzazione del tipo di metrica e dei dettagli delle categorie di sottosistemi desiderate. (I810c9)
  • In precedenza, un valore UnsupportedOperationException veniva aggiunto al benchmark se l'esecuzione su un dispositivo non supportato era supportata. Ora il valore UOE si verifica solo se la metrica viene utilizzata su un dispositivo non supportato (ad es. PowerMetric.configure). (I5cf20, b/227229375)
  • Sono stati aggiunti TotalPowerMetric e TotalEnergyMetric per la misurazione della potenza e dell'energia totali in ogni categoria di sistema nei macrobenchmark. (I3b26b, b/224557371).

Correzioni di bug

  • Risolto un problema per cui i metodi compilati non venivano reimpostati correttamente tra ogni macrobenchmark sulle build non rooted. Purtroppo, questa operazione richiede la reinstallazione dell'APK a ogni iterazione, in modo da cancellare i dati dell'applicazione per ogni macrobenchmark. (I31c74, b/230665435)
  • Correggi l'arresto anomalo della registrazione della traccia sull'API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
  • Rilevamento del completamento dell'avvio dell'attività di revisione 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 android.system.ErrnoException: open failed: EACCES, che si verificava su alcuni dispositivi Android 11 (API 30) e versioni successive. Questa è la soluzione migliore di 1.2.0-alpha01. (aosp/2072249)

Versione 1.1.0

Versione 1.1.0

15 giugno 2022

androidx.benchmark:benchmark-*:1.1.0 viene 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

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

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 completamente reinstallate tra un benchmark e l'altro per garantire misurazioni accurate.

Correzioni di bug/modifiche al comportamento

  • Risolto il problema per cui la compilazione dell'app non veniva reimpostata correttamente tra i macrobenchmark e non veniva reimpostata affatto nelle build non rooted. Questa operazione risolve molti casi in cui l'esecuzione di più test potrebbe comportare un effetto minimo o nullo sulle misurazioni di CompilationMode. Per risolvere il problema, l'app di destinazione sta reinstallando completamente ogni metodo di test, in modo da cancellare i dati dell'applicazione tra ogni macrobenchmark. (I31c74, b/230665435)

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

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

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

    In alternativa, dalla riga di comando di Gradle:

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

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

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

    In alternativa, dalla riga di comando di Gradle:

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

Versione 1.1.0-rc01

20 aprile 2022

androidx.benchmark:benchmark-*:1.1.0-rc01 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 gli ultimi risultati dell'utilizzo di un oggetto 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

  • Correggi l'arresto anomalo della registrazione della traccia sull'API 21/22 (If7fd6, b/227509388)
  • Rilevamento del completamento dell'avvio dell'attività di revisione per correggere l'eccezione "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)
  • Correggi le metriche di avvio per Macrobenchmark quando viene utilizzato CompilationMode.None(). Prima di questa modifica, l'app CompilationMode.Partial() sembrava essere più lenta di Compilation.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

  • Chiudi il pacchetto dopo aver saltato l'installazione del profilo quando utilizzi CompilationMode.None. (aosp/1991373).
  • Risolto il 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

  • Correggi le metriche mancanti su Android 10 e NoSuchElementException causati da nomi di processi non acquisiti correttamente nelle tracce. (Ib4c17, b/218668335).

  • Utilizza PowerManager per il rilevamento della limitazione termica su Q (API 29) e versioni successive. In questo modo si riduce in modo significativo la frequenza di falsi positivi nel rilevamento della limitazione termica (nuovo tentativo di benchmark dopo 90 secondi di attesa) e accelera i benchmark in modo significativo sulle build utente. Fornisce inoltre il rilevamento della limitazione anche quando gli orologi sono bloccati (se sono bloccati troppo in alto rispetto all'ambiente fisico del dispositivo). (I9c027, b/217497678, b/131755853).

  • Filtra la profilazione simpleperf campionata solo del thread measureRepeated per semplificare l'ispezione (Ic3e12, b/217501939)

  • Supporta le metriche dei sottoprocessi UI denominati nelle app multi-processo (Ice6c0, b/215988434)

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

  • Salta l'installazione del profilo quando utilizzi Compilation.None(). Inoltre, segnala gli avvisi quando l'app utilizza una versione precedente di androidx.profileinstaller e il plug-in Android per 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 alle API

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

    Ad esempio,

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

Correzioni di bug

  • Risolto il problema per cui le tracce del profiler microbench non venivano aggiornate nelle esecuzioni successive quando vengono collegate nell'output di Studio (I5ae4d, b/214917025)
  • Impedisci i comandi della shell di compilazione sull'API 23 (Ice380)
  • Rinominato FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi per chiarire che si tratta di durate, non timestamp e per corrispondere ai prefissi. (I0eba3, b/216337830).

Versione 1.1.0-beta02

26 gennaio 2022

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

Correzioni di bug

  • I risultati del campionamento dello stack di Microbenchmark e del profilo di tracciamento del metodo sono ora collegati nell'output di Studio, come ad altri output di profilazione, e non sopprimono la metrica di allocazione. (Idcb65, b/214440748, b/214253245).
  • BaselineProfileRule ora stampa il comando adb pull nel logcat e nell'output di Studio per eseguire il pull del 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

  • Correggere l'abilitazione dell'argomento profiler che viene ignorato. (I37373, b/210619998)
  • Rimosso CompliationModes deprecato (I98186, b/213467659)
  • È stato cambiato l'argomento del profilo di riferimento CompilationMode.Partial in enum per 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 alle API

  • Aggiungi il tracciamento di sistema a basso costo all'output del microbench su Android Q (API 29 e versioni successive). Tieni presente che al momento questa funzionalità non acquisisce il tracciamento personalizzato (tramite le API Jetpack android.os.Trace o androidx.tracing) per evitare di influire sui risultati. Questo tracciamento dovrebbe essere utile per diagnosticare l'instabilità, soprattutto da origini esterne al benchmark. (I298be, b/205636583, b/145598917).
  • Chiarisci CompilationModes in tre classi: Completa, Nessuna, Parziale. In precedenza, avevano un nome incoerente dopo gli argomenti di compilazione (che ora trattiamo come dettagli di implementazione) e le funzionalità. Ciò rende più chiari i compromessi, le potenziali combinazioni e il comportamento nelle versioni della piattaforma. (I3d7bf, b/207132597)
  • La configurazione e la misura ora sono sempre in coppia, in ordine. Ora puoi eseguire una query sul nome del pacchetto e sull'iterazione (anche se l'iterazione potrebbe essere null in alcuni scenari di riscaldamento). (Id3b68, b/208357448, b/208369635).

Correzioni di bug

  • Correzione di CompilationMode.Speed considerata erroneamente come None (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 TraceSezioneMetric dell'esperimento per le misurazioni dei tempi personalizzate basate su tracce. (I99db1, b/204572664).

Correzioni di bug

  • Riattiva il dispositivo a ogni iterazione per garantire che l'UI possa essere testata (richiede la disattivazione della schermata di blocco). (Ibfa28, b/180963442)
  • Corregge diversi arresti anomali nella modalità di profilazione di StackSampling su emulatori e dispositivi non rooted (Icdbda, b/202719335)
  • Rimosso 0,5 secondi di sospensione alla fine di ogni iterazione.Se con questa modifica noti che mancano metriche, segnala un bug. (Iff6aa).
  • Riduci le probabilità di perdita di dati e il sovraccarico della memoria derivante dal tracciamento (Id2544, b/199324831, b/204448861)
  • Riduci le dimensioni delle tracce di circa il 40% passando al formato compatto di archiviazione pianificata. (Id5fb6, b/199324831).
  • Implementazioni aggiornate delle metriche di avvio in modo che terminino sempre alla fine del renderingthread. Questo sarà più coerente tra le diverse versioni della piattaforma e più fedele 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 alle API

  • Macrobenchmark ora ha un minSdkVersion pari a 23. (If2655)
  • Aggiunge un nuovo BaselineProfileRule sperimentale in grado di generare profili di riferimento per il percorso dell'utente critico dell'app. Documentazione dettagliata da seguire. (Ibbefa, b/203692160).
  • Rimuove la variante di interfaccia misurata, che è stata aggiunta per i chiamanti Java, in quanto causava ambiguità nel completamento/risoluzione del metodo. I chiamanti Java dovranno nuovamente restituire Unit.Instance da measurerepeated. Se ciò rappresenta un inconveniente, segnala un bug e potremo esaminare questa modifica 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 alle API

  • Esegui il backport StartupTimingMetric per tornare all'API 23. Questa nuova implementazione gestisce anche meglio reportFullyDrawn() per attendere che venga eseguito il rendering dei contenuti corrispondenti. (If3ac9, b/183129298)
  • Aggiunta di JvmOverloads a più metodi MacrobenchmarkScope per chiamanti Java. (I644fe, b/184546459).
  • Fornisci una funzione MacrobenchmarkRule.measurerepeated alternativa che utilizza un Consumer<MacrobenchmarkScope> per un utilizzo idiomatico nel linguaggio Java. (If74ab, b/184546459).

Correzioni di bug

  • Correzione per le tracce che non si avviavano abbastanza presto e che mancavano dati delle metriche. Questo dovrebbe risolvere il problema "Impossibile leggere le metriche durante il benchmark" causate dalla libreria stessa. (I6dfcb, b/193827052, b/200302931).
  • FrameNegaSlack è stato rinominato FrameOverrun per chiarirne il significato, ovvero quanto il frame ha superato il budget temporale. (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

  • È supportato l'eliminazione della cache delle pagine del kernel senza root sull'API 31/S e versioni successive, in modo da aumentare l'accuratezza dei lanci 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 alle API

  • Attiva i macrobenchmark a scorrimento per l'esecuzione dell'API 23 (If39c2, b/183129298)
  • Aggiungi un nuovo tipo di metrica campionata all'output di UI e JSON, focalizzata sui percentili di più campioni per iterazione. (I56247, b/199940612)
  • Passa alle metriche in virgola mobile in tutte le librerie di benchmark (tronchete 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 alle API

  • È stato aumentato il valore minimo dell'API a 21 per riflettere il livello API più basso che si prevede venga supportato in futuro. L'API minima attuale supportata continua a essere comunicata tramite requiredApi() e al momento è 29 (I440d6, b/183129298)

Correzioni di bug

  • Corregge ProfileInstaller per consentire alle app che utilizzano profili di riferimento di eseguire più facilmente i MacroBenchmark con CompilationMode.BaselineProfile. (I42657, b/196074999) NOTA: richiede anche l'aggiornamento a androidx.profileinstaller:profileinstaller:1.1.0-alpha04 o a una versione successiva.
  • I benchmark StartupMode.COLD e 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 alle API

  • Aggiunto l'argomento di strumentazione androidx.benchmark.iterations per consentire il override manuale del conteggio delle iterazioni durante i test/la profilazione localmente. (6188be, b/194137879)

Correzioni di bug

  • Passaggio a Simpleperf come profiler di campionamento predefinito sull'API 29 e versioni successive (Ic4b34, b/158303822).

Problemi noti

  • CompilationMode.BaselineProfile è ancora in fase di sviluppo. Evita di usarla per determinare lo stato attuale 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 incidente sporatico. b/193827052

Modifiche alle API

  • È stato cambiato startActivityAndAttend per richiamare il lancio tramite am start, il che riduce il tempo di ogni iterazione di misurazione di circa 5 secondi, a costo del fatto che non supporta più i pacchetti di intent. (I5a6f5, b/192009149)

Correzioni di bug

  • Riduci l'aggressività del rilevamento della limitazione termica e ricalcola la base di riferimento se le limitazioni vengono rilevate frequentemente. (I7327b)
  • Corregge FrameTimingMetric in modo che funzioni su Android S beta (Ib60cc, b/193260119)
  • Utilizza un EmptyActivity per disattivare lo stato di arresto forzato dell'app di destinazione in modo da supportare meglio CompilationMode.BaselineProfile. (Id7cac, b/192084204)
  • Estensione del file di traccia modificata in .perfetto-trace in modo che corrisponda allo standard della piattaforma. (I4c236, b/174663039).
  • StartupTimingMetric ora restituisce la metrica "fullDrawnMs" per misurare il tempo che manca al completamento del rendering dell'applicazione. Per definire questa metrica per la tua app, chiama Activity.reportFullyDrawn quando i contenuti iniziali sono pronti, ad esempio quando gli elementi dell'elenco iniziali vengono caricati dal database o dalla rete. (metodo reportFullyDrawn disponibile senza controlli della versione build su ComponentiActivity). Tieni presente che il test deve essere eseguito per un tempo sufficiente ad acquisire la metrica (startActivityAndwait non attende reportFullyDrawn). (If1141, b/179176560)
  • Riduci il costo dell'aggiunta di metadati Ui alle tracce di oltre 50 ms (Ic8390, b/193923003)
  • Aumento drastico della frequenza di polling quando si interrompe il tracciamento, 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à

Correzioni di bug

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

    Ad esempio

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

Versione 1.1.0-alpha02

18 maggio 2021

La versione 1.1.0-alpha02 del benchmark introduce un componente importante del benchmarking: Macrobenchmark. Oltre al benchmark che consente di misurare i loop della CPU, macrobenchmark ti consente di misurare le interazioni dell'intera app, come l'avvio e lo scorrimento, e di acquisire le tracce. Per ulteriori informazioni, consulta la documentazione della raccolta.

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

Nuove funzionalità

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

  • Acquisisci metriche sulle prestazioni di avvio, scorrimento/animazione dalla tua app, in locale o in CI
  • Acquisisci e analizza le tracce da Android Studio

Correzioni di bug

  • Soluzione alternativa problema relativo alle 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 ad acquisire i file di output sui dispositivi interessati). (Icb039)
  • Supporto della memorizzazione nella cache della configurazione in BenchmarkPlugin (6be1c1, b/159804788)
  • Output file semplificato: attivo per impostazione predefinita, in una directory che non richiede requestLegacyExternalStorage=true (8b5a4d, b/172376362)
  • Corregge gli avvisi logcat di stampa della libreria relativi al mancato rilevamento dei thread JIT nelle versioni della piattaforma in cui non è presente. (I9cc63, b/161847393)
  • Correzione della frequenza massima del dispositivo di lettura. (I55c7a)

Versione 1.1.0-alpha01

10 giugno 2020

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 una fase aggiuntiva dopo il riscaldamento e la tempistica, acquisendo i conteggi dell'allocazione. Le allocazioni possono causare problemi di prestazioni sulle versioni precedenti della piattaforma (140 ns in O sono diventati 8 ns in M, misurati su Nexus5X, con orologi bloccati). Questa metrica viene visualizzata nell'output della console Android Studio, nonché
  • Supporto della profilazione: ora puoi acquisire i dati di profilazione per l'esecuzione di un benchmark, in modo da ispezionare i motivi per cui il codice potrebbe essere lento. Benchmark supporta l'acquisizione del tracciamento o del campionamento dei metodi da ART. Questi file possono essere ispezionati con il Profiler in Android Studio utilizzando File > Apri.
  • Il plug-in Benchmark Gradle ora fornisce valori predefiniti per una configurazione più semplice:
    • testBuildType è impostato per il rilascio per impostazione predefinita, per evitare di usare dipendenze con copertura del codice integrata. La release buildType è configurata anche come buildType predefinito, consentendo ad Android Studio di selezionare automaticamente la variante di build corretta quando apri un progetto per la prima volta. (b/138808399)
    • signingConfig.debug viene utilizzata come configurazione di firma predefinita (b/153583269)

** Correzioni di bug **

  • Ha ridotto significativamente l'overhead associato alla transizione del riscaldamento, dove la prima misurazione per ogni benchmark è stata artificialmente più alta di altre. Questo problema era più pronunciato in benchmark molto ridotti (1 microsecondo o meno). (b/142058671)
  • È stato corretto l'errore InstrumentationResultParser stampato per ogni benchmark durante l'esecuzione dalla riga di comando. (I64988, b/154248456)

Problemi noti

  • Dalla riga di comando e dalle chiamate gradle di Benchmark non vengono stampati i risultati direttamente. Puoi risolvere il problema eseguendo Studio o analizzando 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 ID applicazione che termina con "android" o "download" (senza distinzione tra maiuscole e minuscole). Gli utenti che riscontrano questo problema dovrebbero eseguire l'upgrade del plug-in Android per Gradle alla versione 4.2-alpha01 o successiva.

Versione 1.0.0

Versione benchmark 1.0.0

20 novembre 2019

Vengono rilasciate le versioni androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 e androidx.benchmark:benchmark-junit4:1.0.0 senza modifiche dalla 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 di rendimento per il codice dell'app e ottenere risultati rapidamente.

Questa funzionalità previene i problemi di configurazione e runtime e stabilizza le prestazioni del dispositivo per garantire che le misurazioni siano accurate e coerenti. Esegui i benchmark direttamente in Android Studio o nell'integrazione continua per osservare le prestazioni del codice nel tempo ed evitare regressioni.

Le funzionalità principali includono:

  • Stabilizzazione orologio
  • Assegnazione automatica della priorità dei thread
  • Supporto per i test delle prestazioni della UI, come nell'esempio di RecyclerView
  • Riscaldamento e looping-aware-JIT
  • Output benchmark JSON per la post-elaborazione

Versione 1.0.0-rc01

23 ottobre 2019

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

Nuove funzionalità

  • Aggiunta del tracciamento di systrace ai benchmark

Correzioni di bug

  • Risolto il problema di instabilità della metrica in cui JIT non terminava prima del riscaldamento a causa della riduzione della priorità (b/140773023)
  • Directory di output JSON unificata per il 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 garbage collection prima di ogni riscaldamento per ridurre la pressione della memoria da un benchmark a quello successivo (b/140895105)

Correzioni di bug

  • 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 Kotlin per i chiamanti Kotlin.
  • Ora rileva correttamente l'utilizzo dell'argomento di strumentazione additionalTestOutputDir per l'output nel plug-in Android per Gradle 3.6, per sapere quando AGP gestirà la copia dei dati.
  • Correggi la frequenza di clock non rilevata in JSON per stampare correttamente -1 (b/141945670).

Versione 1.0.0-alpha06

18 settembre 2019

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 e androidx.benchmark:benchmark-junit4:1.0.0-alpha06 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 l'esecutore del test, che ora fornisce un messaggio di errore più utile

Modifiche alle API

  • L'annotazione sperimentale ExperimentalAnnotationReport è ora pubblica correttamente. 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 alle API

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

Correzioni di bug

  • Correzione dello script di blocco dell'orologio, che non funzionava sui dispositivi in cui mancavano le utilità della shell cut o expr.
  • Risolto il problema con l'attività ./gradlew lockClocks che si bloccava su dispositivi rooted 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 aggiunta anche nuova documentazione su come utilizzare la libreria di benchmark senza Gradle, sia per l'utilizzo con diversi sistemi di compilazione (come Bazel o Buck), sia durante l'esecuzione in CI. Per maggiori informazioni, consulta Creare 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)
    • Aggiunto il supporto per la nuova copia dei dati basata su AGP, durante l'esecuzione di benchmark e l'uso di AGP 3.6 o versioni successive
  • Aggiunte al formato JSON
    • Tempo di esecuzione totale del test di benchmark di output (b/133147694)
    • I benchmark @Parameterized che utilizzano una stringa di nome (ad esempio @Parameters(name = "size={0},depth={1}")) ora restituiscono nomi e valori dei parametri per benchmark nell'output JSON (b/132578772)
  • Modalità di prova (b/138785848)
    • È stata aggiunta una modalità di prova per eseguire ogni loop di benchmark una sola volta, per verificare la presenza di errori/arresti anomali senza acquisire le misurazioni. Questo può essere utile, ad esempio, per eseguire rapidamente dei benchmark nella fase di pre-invio per verificare che non siano danneggiati.

Modifiche alle API

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

Correzioni di bug

  • Gli errori di scrittura su unità di archiviazione esterna sui dispositivi Q forniscono messaggi più descrittivi, con suggerimenti per la risoluzione del problema
  • Le schermate vengono accese automaticamente durante le esecuzioni di benchmark, anziché restituire errori quando lo schermo è spento

Contributi esterni

  • Ringraziamo Sergey Zakharov per aver contribuito ai miglioramenti dell'output JSON e per la correzione dei problemi di disattivazione 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à

  • Scopri la durata del sonno a causa della limitazione termica per benchmark nel report JSON completo

Correzioni di bug

  • Non è più necessario applicare il plug-in Gradle dopo i plug-in Android e il blocco di Android.
  • Aggiunge il supporto per i report di benchmark sui dispositivi Android 10 utilizzando lo spazio di archiviazione con ambito

Versione 1.0.0-alpha02

6 giugno 2019

Vengono rilasciate le versioni androidx.benchmark:1.0.0-alpha02 e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02. I commit inclusi in questa versione sono disponibili qui.

Tieni presente che lo schema JSON viene trattato come un'API. Prevediamo di seguire gli stessi vincoli di stabilità delle altre API: stabile (con eccezioni molto rare) una volta nella versione beta e corretti nella versione finale, con aggiunte solo a release di minore entità e modifiche/rimozioni nelle release principali.

Modifiche alle API

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

    • È stata riorganizzata la struttura degli oggetti dei risultati per supportare altri gruppi di metriche in futuro (b/132713021)
    • Sono state aggiunte informazioni sul contesto dell'esecuzione di test, ad esempio informazioni su dispositivo e build e se gli orologi sono bloccati, all'oggetto di primo livello (b/132711920)
    • I nomi delle metriche temporali ora contengono "ns" (b/132714527)
    • Sono state aggiunte statistiche aggiuntive per ogni metrica segnalata (massima, mediana, minima) e sono state rimosse statistiche di riepilogo "nanos" semplificate (b/132713851)
  • Output XML rimosso (b/132714414)

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

Correzioni di bug

  • Risolto il problema di ./gradlew lockClocks che non rimaneva fissa su alcuni dispositivi OS 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.