Benchmark

Misura con precisione il rendimento del codice in Android Studio.
Aggiornamento più recente Release stabile Candidato per l'uscita Versione beta Release alpha
10 luglio 2024 1.2.4 - 1.3.0-beta02 -

Dichiarazione delle dipendenze

Per aggiungere una dipendenza al benchmark, devi aggiungere il Repository Maven di Google al 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 tuo 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 scopri nuovi problemi o hai idee per migliorare questa raccolta. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a stella.

Crea un nuovo numero

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 1.3

Versione 1.3.0-beta02

10 luglio 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-beta02. La versione 1.3.0-beta02 contiene questi commit.

Correzioni di bug

  • Gestisci in modo corretto ESCI CODICE 2 all'avvio di Perfetto per registrare un avviso, ma procedi.

Versione 1.3.0-beta01

12 giugno 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-beta01. La versione 1.3.0-beta01 contiene questi commit.

Modifiche alle API

  • MethodTracing.affectsMeasurementOnThisDevice rinominato in AFFECTS_MEASUREMENT_ON_THIS_DEVICE per coerenza. (I1bdfa)
  • È stata aggiunta l'API BlackHole.consume() sperimentale per evitare l'eliminazione del codice morto nei microbenchmark. (If6812, b/286091643)
  • Ora Microbenchmark viene generato correttamente per evitare che il tracciamento del metodo interferisca con le misurazioni. Questo si verifica su alcuni dispositivi quando viene forzato il tracciamento del metodo (tramite argomenti di strumentazione o MicrobenchmarkConfig) e se viene tentata una misurazione dopo l'analisi del metodo. I dispositivi interessati eseguono l'API 26-30 o determinate versioni del modulo principale ART interessate da questa interferenza e possono essere rilevati in fase di runtime tramite ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864)

Correzioni di bug

  • Versione agp massima consigliata a 9.0.0-alpha01. (I5bbb0)
  • È stata aggiunta la modalità di compilazione al contesto di benchmark (If5612, b/325512900)
  • Abilita il tracciamento AIDL per impostazione predefinita (richiede l'API 28) (Ia0af2, b/341852305)
  • Sono state aggiunte ulteriori informazioni nel contesto del benchmark nell'output JSON:
    • context.artMainlineVersion: versione intera del modulo Art mainline (se presente sul dispositivo, -1 in caso contrario)
    • context.build.id - Uguale a android.os.Build.ID
    • context.build.version.codename - Uguale a android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename: corrisponde alla prima lettera del nome in codice della versione pre-release (anche nelle build di release) (Ie5020)
  • Corregge StackSampling per rispettare androidx.benchmark.profiling.sampleDurationSeconds (Ib1d53)
  • Cambia la dipendenza macro->comune in api(), quindi è più facile da usare, ad esempio PerfettoTrace e PerfettoConfig. (Icdae3, b/341851833)
  • Assicurati che le attività mergeArtProfile e mergeStartupProfile attendano sempre la generazione del profilo di base. (I623d6, b/343086054)
  • Prendi in considerazione lo stato di attivazione della variante al momento di decidere se attivarla. (I5d19e, b/343249144)
  • Aumento del timeout di avvio predefinito per il processore di traccia Perfetto. (I87e8c, b/329145808)

Versione 1.3.0-alpha05

14 maggio 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha05. La versione 1.3.0-alpha05 contiene questi commit.

Correzioni di bug

  • Genera un'eccezione più chiara quando la metrica macrobench restituisce valori zero per tutte le iterazioni (Iab58f, b/314931695)
  • Ulteriori regole alternative aggiunte alle regole ProGuard microbench, incluso il supporto per le regole listener e altri avvisi / errori osservati. (I14d8f, b/329126308, b/339085669)
  • Il tracciamento del metodo viene eseguito come fase separata durante un Macrobenchmark e non influisce più sulle misurazioni. (If9a50, b/285912360, b/336588271)
  • Sono stati aggiunti ulteriori suggerimenti di debug per eliminare il messaggio di errore di trasmissione dello shaker. (I5efa6, b/325502725)

Versione 1.3.0-alpha04

1° maggio 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha04. La versione 1.3.0-alpha04 contiene questi commit.

Modifiche alle API

  • Aggiunta una variante sperimentale MacrobenchmarkRule#measureRepeated che richiede un valore PerfettoConfig personalizzato per una registrazione della traccia Perfetto completamente personalizzata. Tieni presente che configurazioni non configurate correttamente potrebbero causare errori nelle classi di metriche integrate. (Idfd3d, b/309841164, b/304038384)
  • Rinomina PowerMetric.deviceSupportsPowerEnergy 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 funzionalità di misurazione della potenza del dispositivo. (I6a591, b/322121218)

Correzioni di bug

  • È stato aggiunto il confronto con il profilo di riferimento precedente (I824c8, b/269484510)
  • È stato aggiunto il formato DSL per la disattivazione degli avvisi (Ic4deb, b/331237001)
  • Eccezione modificata del log delle informazioni quando le varianti di benchmark sono disattivate (I8a517, b/332772491)
  • Semplifica l'acquisizione delle tracce del metodo per un Macrobenchmark con l'ambito della durata del measureBlock() effettivo. In precedenza, veniva avviata all'avvio del processo target e supportava solo gli avvii a freddo (Iee85a, b/300651094).
  • Evita l'arresto anomalo quando il processore di traccia perfetto è lento ad avviarsi (I98841, b/329145808)

Versione 1.3.0-alpha03

17 aprile 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha03. La versione 1.3.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Aggiunge le API pubbliche PerfettoTraceProcessor.Session.queryMetrics dell'API con varianti JSON, textproto e proto binario (non decodificato). Ti consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382)
  • È stato aggiunto profilerOutput all'output JSON per semplificare la gestione degli strumenti relativi alle tracce di profilazione (ad es. perfetto, tracce dei metodi). (I05ddd, b/332604449)
  • È stato aggiunto il tag di alimentazione al benchmark Perfetto Config. Questa operazione acquisisce, ad esempio, le tracce di wakelock. (Icfe44, b/286551983)
  • Aggiunto l'argomento inst androidx.benchmark.profiling.skipWhenDurationRisksAnr, può essere impostato su false per evitare di saltare le tracce del metodo quando la durata prevista potrebbe causare un errore ANR. Consigliamo vivamente di evitare nelle esecuzioni CI.
  • Aggiunto l'argomento inst sperimentale androidx.benchmark.profiling.perfCompare.enable. Imposta questo valore su true per eseguire il confronto tra le fasi di misurazione e profilazione. Utili, ad esempio, per valutare l'overhead del tracciamento dei metodi. (I61fb4, b/329146942)

Modifiche alle API

  • Il valore TraceSectionMetric.Mode è stato modificato in classe sigillata per consentire l'espansione futura senza violare esaustivi le istruzioni (I71f7b)
  • Sono stati aggiunti TraceSectionMetric.Mode.Average e .Count e sono stati riordinati gli argomenti in modo che l'argomento più comune (mode) si trovi in precedenza nell'elenco degli argomenti, riducendo la necessità di specificare i nomi dei parametri. (Ibf0b0, b/315830077, b/322167531)
  • Metric.getResult è stato rinominato in getMeasurements per corrispondere al tipo restituito (I42595)

Correzioni di bug

  • Risolvi il problema per assicurarti che i benchmark utilizzino i profili di riferimento generati quando la funzionalità automaticGenerationDuringBuild è disattivata (Ic144f, b/333024280)
  • Correggi gli override delle proprietà dei plug-in Gradle BaselineProfile per attivare la generazione del profilo di base e il benchmarking durante la personalizzazione di un tipo di build nonMinified o benchmark. (Ib8f05, b/324837887)
  • Le tracce del metodo fisso vengono eliminate in macrobenchmark, in modo che le tracce del metodo vengano acquisite completamente e valide, anche su dispositivi più lenti. (I6349a, b/329904950)
  • Attiva l'avvio del blocco sul record di traccia Perfetto per ridurre il rischio di dati mancanti all'inizio della traccia. Supportata solo sull'API 33 e versioni successive (Ie6e41, b/310760059).
  • È stato aggiunto un avviso quando viene utilizzato Android Test Orchestrator nei moduli di benchmark, poiché i file JSON di output per modulo verranno sovrascritti ripetutamente. (Ia1af6, b/286899049)
  • Forza il separatore delle migliaia con "," (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 le etichette log.w / eccezione a tutti gli errori di rilevamento dell'avvio. Questo non modifica il comportamento attuale (quindi alcuni errori generano e altri non rilevano automaticamente l'avvio), ma rende il tutto più comprensibile. In genere, quelle che Log.w() e che non riescono a segnalare le metriche di avvio sono quelle in cui mancano eventi senza frame. Vengono generate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sulla tempistica dei frame (dalle sezioni UI/RT). (Id240f, b/329145809)
  • Annulla i job di dexopt in background prima di eseguire un Macrobenchmark per ridurre le interferenze. (I989ed)
  • È stata aggiunta la misurazione frameCount a FrameTimingMetric per facilitare l'individuazione di scenari in cui le misurazioni cambiano perché è cambiato il numero di frame prodotti (aggiunta di nuove animazioni, problemi di annullamento della convalida risolti). (I1e5aa).
  • È stato chiarito che frameOverrunMs è la metrica preferita per il monitoraggio, se disponibile nella documentazione, e perché. (I18749, b/329478323)

Versione 1.3.0-alpha02

20 marzo 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha02. La versione 1.3.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Supporto sperimentale R8 in microbench tramite regole integrate di ProGuard. Tieni presente che questo supporto è sperimentale e richiede AGP 8.3 per la minimizzazione dei test dei moduli della libreria. Utilizza quanto segue per abilitare la minimizzazione/ottimizzazione R8 nell'build.gradle del modulo di benchmark, il che dovrebbe portare a un aumento significativo delle prestazioni, a seconda del carico di lavoro. (I738a3, b/184378053)

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

Correzioni di bug

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

Versione 1.3.0-alpha01

21 febbraio 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.3.0-alpha01. La versione 1.3.0-alpha01 contiene questi commit.

Modifiche alle API

  • Parametri booleani MicrobenchmarkConfig rinominati per evitare la parola superflua "dov" (Ia8f00, b/303387299)
  • È stato aggiunto BenchmarkRule.measureRepeatedOnMainThread in modo che i benchmark dei thread principali (ad esempio quelli che toccano le UI di Visualizzazioni o Scrivi) possano evitare di attivare ANR, soprattutto durante suite di grandi dimensioni in CI. (I5c86d).
  • È stata aggiunta FrameTimingGfxInfoMetric, un'implementazione alternativa sperimentale 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 di warmUp. (I17923)
  • Diverse modifiche all'API TraceSectionMetric:
    • Aggiungi Mode.Min, Mode.Max
    • Aggiungi argomento etichetta per sostituire il nome della sezione come etichetta della metrica
    • È stato aggiunto il nome della modalità all'output per chiarire il significato della metrica
    • Valore predefinito modificato in somma, poiché la maggior parte dell'utilizzo di questa metrica riguarda eventi ripetuti Tieni presente queste modifiche nell'utilizzo di CI, in quanto potrebbero creare discontinuità o interrompere l'analisi. (Ic1e82, b/301892382, b/301955938)

Correzioni di bug

  • Messaggio di errore migliorato nel plug-in Gradle del profilo di base quando non esiste un dispositivo gestito specificato (Idea2b, b/313803289)
  • Correzione per l'inclusione dei profili di riferimento della libreria in AAR precedenti ad AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • URL di output del profilo di avvio e di base fisso alla fine dell'attività di generazione (I802e5, b/313976958)
  • Timeout dell'origine dati corretti per tentare di correggere java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Aggiungi due argomenti di strumentazione per eseguire l'override del comportamento di rilascio dello shaker sugli arresti anomali della soluzione alternativa durante il benchmarking di app senza ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : può essere utilizzato per ignorare tutti i rilasci di Shar (compreso quello fatto nei lanci di StartupMode.Cold), soprattutto quando si effettuano benchmark di app che non utilizzano ancora profilelauncher 1.3
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : può essere utilizzato per tollerare gli errori durante il tentativo di eliminare gli Shaper, ad esempio durante il benchmarking di app senza profilelauncher 1.3 (I4f573)
  • Salta il tracciamento del metodo sul thread della UI quando dovrebbe richiedere più di qualche secondo e le tracce del metodo di pulizia durante il lancio. (I6e768)
  • Questo codice viene generato quando i nomi dei file superano i 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione dei file. (I4a5ab).
  • Corregge il problema per cui i frame non terminati all'inizio e alla fine della traccia potevano essere abbinati, che venivano erroneamente segnalati come un singolo frame estremamente lungo. (I39353, b/322232828)
  • Usa --skip verification nell'API 30 e versioni successive quando reinstalli un pacchetto nell'API 30-33 per cancellare i profili ART nelle build degli utenti. In questo modo è possibile bypassare gli avvisi di Play Protect che causano errori su alcune classi di dispositivi. (Ic9e36).
  • Utilizza am force-stop per terminare le app quando non si tratta di un'app di sistema come l'UI di sistema o Avvio app. (I5e028).
  • Macrobenchmark ora attende 1 second affinché l'applicazione di destinazione scarichi un profilo ART (in precedenza era attesa per 500 ms). (I85a50, b/316082056)
  • Migliora l'errore FrameTimingMetric quando non vengono generati frame e genera sempre un link da tracciare in caso di errore dell'analisi delle metriche, per facilitare la diagnosi del problema. (I956b9)
  • È stato risolto l'arresto anomalo in FrameTimingMetric che non riusciva ad analizzare l'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276)
  • Rilassamento della severità dei controlli in FrameMetrics e aggiunta di ulteriori dettagli ai messaggi di errore. (Iadede)

Versione 1.2

Versione 1.2.4

17 aprile 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.2.4. La versione 1.2.4 contiene questi commit.

Correzioni di bug

  • Corregge il problema srcset del profilo di riferimento non impostato nelle varianti del benchmark. Corregge anche automaticGenerationDuringBuild nelle librerie che causa una dipendenza circolare. (I28ab7, b/333024280)
  • Utilizza am force-stop per terminare le app quando non si tratta di un'app di sistema come l'UI di sistema o Avvio app. Questo è il problema per cui i benchmark di StartupMode.COLD si arrestano in modo anomalo perché il pacchetto $package non deve essere in esecuzione prima dell'avvio a freddo, perché il processo non ha esito positivo. (I5e028).

Versione 1.2.3

24 gennaio 2024

Viene rilasciato androidx.benchmark:benchmark-*:1.2.3. La versione 1.2.3 contiene questi commit.

Correzioni di bug

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

Versione 1.2.2

1 dicembre 2023

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

Profili di riferimento

Versione 1.2.1

15 novembre 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.1. La versione 1.2.1 contiene questi commit.

Nuove funzionalità

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

Versione 1.2.0

18 ottobre 2023

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

Modifiche importanti dalla versione 1.1.0

Profili di riferimento

  • Il nuovo plug-in Gradle del profilo di base automatizza l'acquisizione e l'inclusione di profili di riferimento nel flusso di lavoro di test e creazione.
  • Ora stabile: BaselineProfileRule.collect, una versione semplificata e semplificata della precedente API BaselineProfileRule.collectBaselineProfile sperimentale
    • Devi solo specificare packageName e guidare la tua app
  • Per le librerie che generano profili di base, ora puoi filtrare le regole generate nel codice (argomento BaselineProfileRule.collect) o ancora più semplicemente nel plug-in Gradle
  • Correzioni
    • Raccolta del profilo di riferimento corretta su Android U e versioni successive (Id1392, b/277645214)

Macrobenchmark

  • Compilazione
    • Macrobenchmark ora ripristina correttamente lo stato di compilazione per ogni compilazione. Ciò richiede la reinstallazione dell'APK prima di Android 14, quindi è vivamente consigliato il benchmarking su Android 14 e versioni successive se vuoi mantenere uno stato (come l'accesso utente) nei valori misurati.
    • Puoi anche aggirare il problema controllando la compilazione delle app separatamente e saltando la compilazione con CompilationMode.Ignore() o l'argomento instrumentation.
  • Argomenti strumentazione

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

    • Macrobenchmark ora richiede ProfileInstaller 1.3.0 o versioni successive nell'app di destinazione, per consentire l'acquisizione / reimpostazione del profilo e la cancellazione della cache dello streamr.
  • Nuove API sperimentali per le metriche

    • È stato aggiunto l'esperimento sperimentale TraceSectionMetric, che consente di estrarre facilmente il tempo dai blocchi trace("") {} nella tua app, oppure TraceMetric per sfruttare tutte le funzionalità di query di Perfetto TraceProcessor.
    • È stata aggiunta la funzionalità sperimentale PowerMetric per acquisire informazioni sul consumo energetico
    • È stato aggiunto il campo sperimentale MemoryCountersMetric al conteggio degli errori di pagina
    • È stata aggiunta l'API sperimentale PerfettoTraceProcessor, che viene utilizzata internamente per estrarre le metriche dalle tracce di sistema (note anche come tracce Perfetto).
  • Correzioni

    • Sono stati corretti gli arresti anomali durante l'installazione o l'estrazione di profili da un'app installata da più APK (ad esempio, da un app bundle).
    • È stato risolto il problema FrameTimingMetric ignorando i frame con ID frame incoerenti (in genere, frame durante le increzioni sull'API 31 e versioni successive) (I747d2, b/279088460)
    • Corretti gli errori di analisi per tracce > 64 MB (Ief831, b/269949822)
    • Sono stati chiariti gli errori quando l'immagine del sistema operativo del dispositivo (in particolare l'emulatore) non era configurata correttamente per il tracciamento o la compilazione
    • Salta il controllo del livello della batteria per i dispositivi senza batteria (micro e macro)
    • Output dei file migliorato, con errori più chiari per directory di output non valide e valori predefiniti più sicuri
    • Miglioramento della stabilità di StartupMode.COLD grazie all'eliminazione costante della cache dello shaker (esposta anche tramite MacrobenchmarkScope.dropShaderCache)
    • Leanback di riserva corretto per startActivityAndWait.

Microbenchmark

  • Funzionalità
    • La profilazione è stata spostata in una fase separata, dopo altre metriche, quindi un'esecuzione di test può mostrare tempistiche accurate e risultati di profilazione.
  • API sperimentali
    • È stata aggiunta l'API sperimentale MicrobenchmarkConfig per definire metriche personalizzate e configurare tracciamento e profilazione. Può essere utilizzato per acquisire tracce del metodo o acquisire i tracepoint (ma tieni presente il tracciamento dell'overhead).
    • Sono state aggiunte API sperimentali per controllare BenchmarkState separatamente da BenchmarkRule, senza JUnit
    • È stato aggiunto un record sperimentale PerfettoTrace per consentire l'acquisizione delle tracce Perfetto, con configurazione personalizzata, separata dalle API di benchmark.
  • Correzioni
    • Nella soluzione alternativa mancano gli spazi vuoti principali nell'output del benchmark di Android Studio.
    • È stato risolto il problema per cui gli avvisi potevano non essere stampati nell'output del benchmark di Android Studio.
    • È stato risolto l'arresto anomalo di SampledProfiling su Android 13 (API 33) e versioni successive.
    • Prestazioni di dryRunMode migliorate enormemente saltando IsolationActivity e tracciamento di Perfetto (modalità dry run fino a 10 volte più veloce su versioni precedenti del sistema operativo).

Versione 1.2.0-rc02

6 ottobre 2023

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

Correzioni di bug

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

Versione 1.2.0-rc01

20 settembre 2023

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

Correzioni di bug

  • Ora viene generata un'eccezione (con istruzioni per il rimedio) quando il tracciamento dell'SDK Perfetto non viene inizializzato in un benchmark. (I6c878, b/286228781)
  • Correggi l'arresto anomalo di OOM durante la conversione del metodo trace ART -> formato perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) È stata chiarita l'etichetta di tracciamento del metodo quando viene collegata nell'output del test di Studio e il metodo fisso che i nomi file di tracciamento sono univoci sul dispositivo/host, quindi non verranno sovrascritti quando vengono eseguiti più benchmark. (I08e65, b/285912360)
  • Garantisce che il dispositivo sia attivo durante l'acquisizione di un profilo di base. (I503fc)

Versione 1.2.0-beta05

30 agosto 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta05. La versione 1.2.0-beta05 contiene questi commit.

Nuove funzionalità

  • Il plug-in Gradle del profilo di base ora supporta il plug-in Android Gradle 8.3. (aosp/2715214)

Versione 1.2.0-beta04

23 agosto 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta04. La versione 1.2.0-beta04 contiene questi commit.

Nuove funzionalità

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

Correzioni di bug

  • Correggi gli errori di scrittura, spostamento e pull dei file (in particolare quelli provenienti da test con parametri) sanificando ulteriormente i nomi dei file di output ed evitando "=" e ":" nei nomi dei file di output. (I759d8)

Versione 1.2.0-beta03

9 agosto 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta03. La versione 1.2.0-beta03 contiene questi commit.

Modifiche alle API

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

Correzioni di bug

  • L'argomento di strumentazione fullTracing.enable è stato rinominato in perfettoSdkTracing.enable per garantire la coerenza con il nome dell'artefatto e altri riferimenti. fullTracing.enable continuerà a funzionare come alternativa. (I7cc00)
  • I punti di traccia interni della libreria di benchmark (incluso il tracciamento di fasi/loop del microbenchmark) ora appariranno nel visualizzatore della traccia del sistema di Studio e verranno nidificati in Perfetto secondo il processo corretto. (I6b2e7, b/293510459)
  • Rimosso l'errore macrobenchmark NOT-PROFILEABLE sull'API 31 e versioni successive e salta il controllo del profilo sui dispositivi rooted eng/userdebug. (I2abac, b/291722507)
  • Quando utilizzi le ottimizzazioni del layout Dex, anche le regole del profilo iniziale vengono ora considerate come regole del profilo di base. (aosp/2684246, b/293889189)

Versione 1.2.0-beta02

26 luglio 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta02. La versione 1.2.0-beta02 contiene questi commit.

Modifiche alle API

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

Correzioni di bug

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

Versione 1.2.0-beta01

18 luglio 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-beta01. La versione 1.2.0-beta01 contiene questi commit.

Correzioni di bug

  • Correggere gli avvisi a volte soppressi nell'output del benchmark in Studio e la soluzione alternativa agli spazi vuoti iniziali dell'output del benchmark che non venivano visualizzati in Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
  • Commento corretto per FrameTimingMetric. La sottometrica è denominata frameDurationCpuMs. (Ib097f, b/288830934).

Versione 1.2.0-alpha16

21 giu 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha16. La versione 1.2.0-alpha16 contiene questi commit.

Modifiche alle API

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

Correzioni di bug

  • Supporto di Macrobenchmark per androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • La profilazione Microbenchmark è passata a una fase separata, quindi viene eseguita in sequenza dopo la misurazione, anziché essere sostituita. Ora anche le sezioni di traccia MethodTracing sono incluse nella traccia Perfetto acquisita, se presente. (I9f657, b/285014599)
  • Aggiungi la misurazione del conteggio a TraceSectionMetric con Mode.Sum. (Ic121a, b/264398606)

Versione 1.2.0-alpha15

7 giugno 2023

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

Nuove funzionalità

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

Modifiche alle API

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

Correzioni di bug

  • Disattiva IsolationActivity e il tracciamento di Perfetto in dryRunMode per migliorare significativamente le prestazioni, poiché si trattava della maggior parte del runtime. (Ie4f7d).
  • Supporto per il campionamento dello stack di chiamata in Macrobenchmark utilizzando gli argomenti del test di strumentazione androidx.benchmark.profiling.mode=StackSampling e androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Corregge l'arresto anomalo durante il rilascio di Shader su Android U (API 34) e sugli emulatori. (I031ca, b/274314544)

Versione 1.2.0-alpha14

3 maggio 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha14. La versione 1.2.0-alpha14 contiene questi commit.

Correzioni di bug

  • Correggi FrameTimingMetric ignorando i frame con ID frame incoerenti. Di conseguenza, alcune animazioni nelle versioni recenti della piattaforma (API 31 e versioni successive) ignoravano molti frame durante l'animazione di RenderThread, ad esempio durante un'ondata. (I747d2, b/279088460)
  • È stata corretta l'analisi del processore di traccia per tracce superiori a 64 Mb. (Ief831, b/269949822)
  • È stato corretto il problema di generazione del profilo di base su Android U a causa del diverso output del comando pm dump-profiles. (Id1392, b/277645214)
  • Correggi lo script di blocco dell'orologio GPU per confrontare correttamente le stringhe (I53e54, b/213935715)

Versione 1.2.0-alpha13

5 aprile 2023

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

Modifiche alle API

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

Versione 1.2.0-alpha12

22 marzo 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha12. La versione 1.2.0-alpha12 contiene questi commit.

Nuove funzionalità

  • Il nuovo plug-in Gradle del profilo di base viene rilasciato in versione alpha, semplificando la generazione di un profilo di base e il flusso di lavoro degli sviluppatori.

Modifiche alle API

  • Rimosso il supporto del tracciamento Perfetto sulle API 21 e 22, che include sia Microbenchmarks che le API sperimentali PerfettoTrace. Prima di questa versione, UiAutomation connessioni non erano affidabili su alcuni dispositivi. (I78e8c)
  • È stata aggiunta un'API sperimentale pubblica per PerfettoTraceProcessor al fine di abilitare l'analisi dei contenuti della traccia. Si tratta di un passo verso metriche completamente personalizzate basate sui dati di traccia di Perfetto. (I2659e, b/219851406)

Versione 1.2.0-alpha11

8 marzo 2023

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

Correzioni di bug

  • Sono stati corretti gli arresti anomali in MacrobenchmarkRule 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

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha10. La versione 1.2.0-alpha10 contiene questi commit.

Nuove funzionalità

  • Su Android 14 e versioni successive, grazie a una nuova funzionalità della piattaforma, Macrobenchmark non reinstalla più le applicazioni target per reimpostare lo stato di compilazione. In precedenza, era necessario disporre di un dispositivo rooted oppure dover rimuovere tutti gli stati dell'applicazione (ad es. l'accesso dell'utente) prima dell'esecuzione di ogni benchmark. (I9b08c, b/249143766)

Correzioni di bug

  • Correggi DryRunMode per evitare che si verifichi un arresto anomalo con un profilo vuoto a causa dell'esclusione della compilazione. Esegue invece una singola iterazione ed estrae il profilo per garantire l'acquisizione di qualcosa. (I2f05d, b/266403227)
  • È stato corretto l'arresto anomalo di PowerMetric durante il controllo della presenza di statistiche su livelli API precedenti. (5faaf9, b/268253898)

Versione 1.2.0-alpha09

11 gennaio 2023

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha09. La versione 1.2.0-alpha09 contiene questi commit.

Correzioni di bug

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

Versione 1.2.0-alpha08

7 dicembre 2022

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

Modifiche alle API

  • Sono state aggiunte nuove API sperimentali PerfettoTrace.record {} 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 dei test. (I3ba16)
  • BaselineProfileRule ora accetta un predicato di filtro anziché un elenco di prefissi dei pacchetti. In questo modo il test avrà il pieno controllo dei filtri. (I93240)
  • Aggiungi un'API sperimentale BaselineProfileRule.collectStableBaselineProfile che attende fino a quando un profilo di riferimento non è stabile per le iterazioni. (I923f3)
  • Aggiungi la possibilità di specificare un prefisso per il nome del file di output durante la generazione di profili di riferimento utilizzando BaselineProfileRule. (I7b59f, b/260318655)

Correzioni di bug

  • Migliora la sicurezza della scrittura degli output dei file, il che dovrebbe impedire che i file di output non vengano scritti o aggiunti automaticamente, in particolare nell'API 21/22. (If8c44, b/227510293)
  • Correggi l'output della traccia simpleperf per creare e posizionare il file correttamente. Inoltre, in genere questa soluzione dovrebbe risolvere i problemi relativi al pull di un file da Gradle non riuscito. (I12a1c, b/259424099)
  • Migliora il messaggio di errore del programma di installazione di profile visualizzato quando il programma di installazione di profile è troppo vecchio. Ora ti viene chiesto di aggiornare la versione del programma di installazione (1.2.1) per misurare i profili di riferimento sulle API dalla versione 31 alla versione 33, anziché indicare che non è supportata. (Ia517f, b/253519888)
  • Correggi diversi errori dei comandi shell in seguito al messaggio di errore Stampa richiesta API <=23, inclusi errori perfetti per la configurazione binaria e l'acquisizione della traccia non riusciti (Ib6b87, b/258863685)
  • Ordina automaticamente le regole del profilo generate per ridurre al minimo il numero di modifiche man mano che cambiano nel tempo (quando le regole del profilo vengono registrate nel controllo del codice sorgente). (Ie2509)
  • È stato risolto l'arresto anomalo su build non rooted inferiori ad Android 13 (API 33) con messaggio Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183)

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

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

Versione 1.2.0-alpha07

9 novembre 2022

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

Modifiche alle API

  • Aggiunge l'API PowerMetric per la misurazione dell'energia e della potenza in Macrobenchmarks. (Ife601, b/220183779)
  • È stato risolto il problema di MacrobenchmarkScope.dropShaderCache() che causava l'eliminazione effettiva della cache dello streamr. In questo modo vengono eliminati circa 20 ms di rumore dai benchmark StartupMode.COLD, poiché ora gli screener vengono cancellati in modo coerente a ogni iterazione. In precedenza, la compilazione di Partial con iterazioni di riscaldamento indicava numeri erroneamente veloci, poiché la memorizzazione nella cache dello Shar era più probabile durante il riscaldamento. Questa correzione richiede un dispositivo rooted oppure l'utilizzo 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 il valore TraceSectionMode("label", Mode.Sum), che consente di misurare il tempo totale trascorso in più sezioni di traccia con la stessa etichetta. Ad esempio, TraceSectionMetric("inflate", Mode.Sum) registrerà una metrica inflateMs per il tempo totale in un macrobenchmark speso per l'inflazione. È stato anche rimosso il requisito dell'API 29, in quanto TraceSectionMetric collabora con androidx.tracing.Trace per tornare a livelli API inferiori, con l'utilizzo di forceEnableAppTracing all'interno dell'app di destinazione. (Id7b68, b/231455742).

Correzioni di bug

  • È stata migliorata la sicurezza di tutti i comandi della shell interna mediante la convalida di tutti gli output e gli errori. (I5984d, b/255402908, b/253094958)
  • Specifica il dispositivo nel comando adb pull del profilo di riferimento, quindi il comando pull può essere semplicemente copiato se sono connessi più dispositivi (fino a un emulatore) (I6ac6c, b/223359380)
  • Aggiungi un errore se l'APK di test macrobenchmark non è configurato come auto-instrumentazione. Questo errore impedisce il processo macrobenchmarking dall'interno del processo dell'app di destinazione. Durante questo processo, macrobench non potrebbe essere in grado di compilare/chiudere/avviare a freddo l'app o di controllare le proprie autorizzazioni (I4279b)
  • È stato risolto un problema in measureRepeated() per cui StartupMode.COLD non interrompeva il processo target dopo il giorno setupBlock. Ora setupBlock che interagisce con l'app non lascerà il processo dell'app in esecuzione e una misurazione dell'avvio a freddo non valida. (I8ebb7)

Versione 1.2.0-alpha06

24 ottobre 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha06. La versione 1.2.0-alpha06 contiene questi commit.

Modifiche alle API

  • BaselineProfileRule non richiede più il root su Android 13 (API 33) e non è più sperimentale. (Ie0a7d, b/250083467, b/253094958)
    • Questa modifica risolve anche il modo in cui i profili di un'app vengono scaricati su disco sui dispositivi non rooted, ma richiede l'aggiornamento della dipendenza del profile installatore dell'app di destinazione.
    • Per utilizzare BaselineProfileRule 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 il flush del profilo su disco in modo corretto, in modo che possa essere compilato/estratto.

Correzioni di bug

  • Corregge l'arresto anomalo di SampledProfiling sull'API 33 e versioni successive. (I40743, b/236109374)

Versione 1.2.0-alpha05

5 ottobre 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha05. La versione 1.2.0-alpha05 contiene questi commit.

Correzioni di bug

  • Correggi l'analisi dei frame nel visualizzatore tracce di sistema di Studio per le tracce acquisite di benchmark (I3f3ae, b/239677443)
  • Correggi FrameTimingMetric per indicare FrameOverrun come che richiede l'API 31 anziché 29 (I716dd, b/220702554)
  • Imposta l'iterazione in BaselineProfileRule e indica chiaramente se il pacchetto di destinazione non è installato (l'operazione era già stata eseguita per MacrobenchmarkRule). (Ic09a3, b/227991471)

Versione 1.2.0-alpha04

21 settembre 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha04. La versione 1.2.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Aggiungi al macrobenchmark il supporto per l'argomento della strumentazione dryRunMode.enable (già disponibile in micro) per uno sviluppo locale più rapido e la convalida dell'automazione delle app (ad es. durante l'invio). In questo modo le iterazioni vengono sostituite su 1, la compilazione viene saltata, vengono eliminati tutti gli errori di configurazione e viene disattivato l'output del file .json di misurazione. (Ib51b4, b/175149857)

    Nella riga di comando di Gradle:

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

    In build.gradle:

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

Correzioni di bug

  • È stato corretto il problema di StartupTimingMetric, che non richiede più l'avvio delle attività misurate fino al giorno MacrobenchmarkScope.startActivityAndWait(). Ciò significa che la metrica può rilevare lanci da, ad esempio, notifiche, Context.startActivity(), navigazione basata su Attività in-app o comandi della shell. (Ia2de6, b/245414235)
  • È stato corretto il bug per cui startActivityAndWait provava a scadere il tentativo di attesa del completamento dell'avvio sugli emulatori riducendo la severità del rilevamento del frame. (Ibe2c6, b/244594339, b/228946895)

Versione 1.2.0-alpha03

7 settembre 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha03. La versione 1.2.0-alpha03 contiene questi commit.

Nuove funzionalità

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

Correzioni di bug

Versione 1.2.0-alpha02

24 agosto 2022

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

Modifiche alle API

  • Il valore predefinito è am force stop 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 di profili di base per le app di sistema. (I900b8, b/241214097)
  • Supporto del controllo delle metriche di alimentazione ODPM sui dispositivi non rooted. (a38c78, b/229623230)

Versione 1.2.0-alpha01

27 luglio 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.2.0-alpha01. La versione 1.2.0-alpha01 contiene questi commit.

Nuove funzionalità

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

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

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

    In alternativa, dalla riga di comando di Gradle:

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

Modifiche alle API

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

Correzioni di bug

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

Versione 1.1.1

Versione 1.1.1

9 novembre 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.1. La versione 1.1.1 contiene questi commit.

Correzioni di bug

  • Corregge android.system.ErrnoException: open failed: EACCES che si verificava su alcuni dispositivi Android11 (API 30) e versioni successive. Questa è una delle soluzioni consigliate da 1.2.0-alpha01. (aosp/2072249)

Versione 1.1.0

Versione 1.1.0

15 giugno 2022

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

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

Modifiche importanti dalla versione 1.0.0

Versione 1.1.0-rc03

1 giugno 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-rc03. La versione 1.1.0-rc03 contiene questi commit.

Correzioni di bug

  • Evita di reinstallare il pacchetto di destinazione a ogni iterazione di benchmark. ( aosp/2093027, b/231976084)

  • Rimuovi il ritardo di 300ms da pressHome(). (aosp/2086030, b/231322975)

  • Migliora la velocità di iterazione di Macrobenchmark ottimizzando i comandi Shell utilizzati in background. (aosp/2086023, b/231323582)

  • Supporto per i dispositivi Gradle gestiti durante la generazione di profili di riferimento con Macrobenchmark. (aosp/2062228, b/228926421)

Versione 1.1.0-rc02

11 maggio 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-rc02. La versione 1.1.0-rc02 contiene questi commit.

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

Correzioni di bug/variazioni di comportamento

  • È stato risolto un problema per cui la compilazione delle app non veniva reimpostata correttamente tra i macrobenchmark e non veniva reimpostata su build non rooted. Questo risolve molti casi in cui l'esecuzione di più test avrebbe comportato un effetto minimo o nullo sulle misurazioni per CompilationMode. Per risolvere questo problema, l'app di destinazione sta reinstallando completamente ogni metodo di test, il che cancellerà i dati dell'applicazione tra ogni macrobenchmark. (I31c74, b/230665435)

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

    Ad 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 un profilo di riferimento che genera test aggiungendo l'argomento di strumentazione androidx.benchmark.enabledRules. Passa in "Macrobenchmark" o "BaselineProfile" per eseguire solo un tipo di test, ad esempio durante la generazione di BaselineProfiles su un emulatore. (I756b7, b/230371561)

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

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

    In alternativa, dalla riga di comando di Gradle:

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

Versione 1.1.0-rc01

20 aprile 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-rc01. La versione 1.1.0-rc01 contiene questi commit.

Correzioni di bug

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

Versione 1.1.0-beta06

6 aprile 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta06. La versione 1.1.0-beta06 contiene questi commit.

Correzioni di bug

  • Correggi l'arresto anomalo della registrazione di tracce sull'API 21/22 (If7fd6, b/227509388)
  • Rilevamento del completamento del lancio dell'attività di revisione per correggere 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 questo cambiamento, CompilationMode.Partial() sembrava essere più lento di Compilation.None(). (611ac9).

Versione 1.1.0-beta05

23 marzo 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta05. La versione 1.1.0-beta05 contiene questi commit.

Correzioni di bug

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

Versione 1.1.0-beta04

23 febbraio 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta04. La versione 1.1.0-beta04 contiene questi commit.

Correzioni di bug

  • Correggere le metriche mancanti su Android 10 e NoSuchElementException causate dalla mancata acquisizione corretta dei nomi di processo nelle tracce. (Ib4c17, b/218668335)

  • Utilizza PowerManager per il rilevamento della limitazione termica su Q (API 29) e versioni successive. Questo riduce significativamente la frequenza di falsi positivi nel rilevamento della limitazione termica (nuovo benchmark dopo un raffreddamento di 90 secondi) e velocizza in modo significativo i benchmark sulle build degli utenti. Fornisce inoltre il rilevamento della velocità 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 con simpleperf solo nel thread measureRepeated per semplificare l'ispezione (Ic3e12, b/217501939)

  • Supporta le metriche relative a processi secondari di UI denominati nelle app con più processi (Ice6c0, b/215988434)

  • Filtra le regole del profilo di riferimento in modo che abbiano come target Android 9 (SDK 28). aosp/1980331 b/216508418

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

Versione 1.1.0-beta03

9 febbraio 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta03. La versione 1.1.0-beta03 contiene questi commit.

Modifiche alle API

  • È stato aggiunto AudioUnderrunMetric alla libreria macrobenchmark sotto il flag sperimentale per consentire il rilevamento di inadeguatezze audio (Ib5972)
  • BaselineProfileRule non accetta più un blocco setup perché funzionava allo stesso modo del profileBlock. (Ic7dfe, b/215536447)

    Ad es.

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

Correzioni di bug

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

Versione 1.1.0-beta02

26 gennaio 2022

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

Correzioni di bug

  • I risultati del profilo di rilevamento dello stack / di rilevamento del metodo di Microbenchmark sono ora collegati nell'output di Studio, in modo simile ad altri output di profilazione, e non sopprimono la metrica di allocazione. (Idcb65, b/214440748, b/214253245)
  • Ora BaselineProfileRule stampa il comando adb pull in logcat e l'output di Studio per il pull del file di testo BaselineProfile generato. (F08811)

Versione 1.1.0-beta01

12 gennaio 2022

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-beta01. La versione 1.1.0-beta01 contiene questi commit.

Correzioni di bug

  • Corregge l'abilitazione dell'argomento del profiler che viene ignorata. (I37373, b/210619998)
  • L'elemento CompliationModes deprecato (I98186, b/213467659) è stato rimosso
  • Argomento del profilo di riferimento di CompilationMode.Partial cambiato in enum per chiarezza. (ID67ea)

Versione 1.1.0-alpha13

15 dicembre 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha13. La versione 1.1.0-alpha13 contiene questi commit.

Modifiche alle API

  • Aggiungi il tracciamento del sistema con costi ridotti all'output del microservizio su Android Q (API 29 e versioni successive). Tieni presente che al momento questa operazione non acquisisce il tracciamento personalizzato (tramite le API Jetpack android.os.Trace o androidx.tracing) per evitare di influire sui risultati. Il tracciamento dovrebbe essere utile per diagnosticare instabilità, soprattutto da fonti esterne al benchmark. (I298be, b/205636583, b/145598917)
  • Specifica CompilationModes in tre classi: Completa, Nessuna, Parziale. In precedenza, i nomi utilizzati in modo incoerente derivavano da argomenti di compilazione (che ora consideriamo dettagli di implementazione) e caratteristiche. Questo rende più chiari i compromessi, le potenziali combinazioni e il comportamento delle varie versioni della piattaforma. (I3d7bf, b/207132597)
  • Configurazione e misurazione adesso sono sempre in coppia, in ordine. Ora puoi eseguire una query sul nome del pacchetto e sull'iterazione (anche se l'iterazione potrebbe essere null in alcuni scenari di riscaldamento). (Id3b68, b/208357448, b/208369635)

Correzioni di bug

  • Corretto CompilationMode.Speed trattato in modo errato come None (I01137)

Versione 1.1.0-alpha12

17 novembre 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha12. La versione 1.1.0-alpha12 contiene questi commit.

Nuove funzionalità

  • Aggiungi TraceSezioneMetrica sperimentale per misurazioni dei tempi personalizzate basate su traccia. (I99db1, b/204572664)

Correzioni di bug

  • Riattiva il dispositivo a ogni iterazione per garantire che l'UI possa essere testata; richiede che la schermata di blocco sia disattivata. (Ibfa28, b/180963442)
  • Corregge più arresti anomali in modalità di profilazione StackSampling su emulatori e dispositivi non rooted (Icdbda, b/202719335)
  • Rimossi 0,5 secondi di sonno alla fine di ogni iterazione.Se noti metriche mancanti con questa modifica, segnala un bug. (Iff6aa).
  • Riduci le possibilità di perdere i dati e l'overhead della memoria dovuto al tracciamento (Id2544, b/199324831, b/204448861)
  • Riduci le dimensioni della traccia di circa il 40% passando al formato di archiviazione pianificata compatto. (Id5fb6, b/199324831)
  • Aggiornate le implementazioni delle metriche di avvio in modo che terminino sempre alla fine del thread di rendering. Questo approccio sarà più costante nelle varie versioni delle piattaforme e sarà più simile alle misurazioni in-app. (Ic6b55).

Versione 1.1.0-alpha11

3 novembre 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha11. La versione 1.1.0-alpha11 contiene questi commit.

Modifiche alle API

  • Macrobenchmark ora ha un valore minSdkVersion di 23. (If2655).
  • Aggiunge un nuovo BaselineProfileRule sperimentale in grado di generare profili di riferimento per il percorso dell'utente critico dell'app. Seguirà la documentazione dettagliata. (Ibbefa, b/203692160)
  • Rimuove la variante dell'interfaccia readrepeated, aggiunta per i chiamanti Java, in quanto causava ambiguità nel completamento/risoluzione del metodo. I chiamanti Java dovranno restituire di nuovo Unit.Instance da measurerepeated. Se questo è un inconveniente, segnala un bug e lo esamineremo in una versione futura. (Ifb23e, b/204331495)

Versione 1.1.0-alpha10

27 ottobre 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha10. La versione 1.1.0-alpha10 contiene questi commit.

Modifiche alle API

  • Backport StartupTimingMetric per ripristinare l'API 23. Questa nuova implementazione gestisce anche reportFullyDrawn() in modo da attendere che venga eseguito il rendering dei contenuti corrispondenti. (If3ac9, b/183129298)
  • È stato aggiunto JvmOverloads a più metodi MacrobenchmarkScope per i chiamanti Java. (I644fe, b/184546459)
  • Fornisci una funzione MacrobenchmarkRule.measureRipetita alternativa che usa un valore Consumer<MacrobenchmarkScope> per l'uso idiomatico nel linguaggio Java. (If74ab, b/184546459)

Correzioni di bug

  • Correzione delle tracce che non iniziavano abbastanza presto e dei dati delle metriche mancanti. Questa operazione dovrebbe risolvere le eccezioni "Impossibile leggere le metriche durante il benchmark" causate dalla libreria stessa. (I6dfcb, b/193827052, b/200302931)
  • Il nome FrameDisabledSlack è stato rinominato FrameOverrun per chiarirne il significato, ovvero quanto il frame ha superato il budget prefissato. (I6c2aa, b/203008701)

Versione 1.1.0-alpha09

13 ottobre 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha09. La versione 1.1.0-alpha09 contiene questi commit.

Correzioni di bug

  • È supportato l'eliminazione della cache delle pagine del kernel senza root sull'API 31/S+, con conseguente aumento dell'accuratezza dell'avvio di StartupMode.COLD. (Iecfdb, b/200160030)

Versione 1.1.0-alpha08

29 settembre 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha08. La versione 1.1.0-alpha08 contiene questi commit.

Modifiche alle API

  • Attiva l'esecuzione dei macrobenchmark a scorrimento per eseguire nuovamente l'API 23 (If39c2, b/183129298)
  • Aggiungi un nuovo tipo di metrica campionata all'output UI e JSON, incentrata sui percentili di più campioni per iterazione. (I56247, b/199940612)
  • Passa alle metriche con rappresentazione in virgola mobile nelle librerie di benchmark (troncate nell'interfaccia utente di Studio). (I69249, b/197008210)

Versione 1.1.0-alpha07

1° settembre 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha07. La versione 1.1.0-alpha07 contiene questi commit.

Modifiche alle API

  • Aumento del livello API minimo a 21 per riflettere il livello API più basso previsto da supportare in futuro. L'attuale API minima supportata continua a essere trasmessa tramite requiredApi() e attualmente è 29 (I440d6, b/183129298)

Correzioni di bug

  • Corregge ProfileInstaller per consentire alle app che usano profili di riferimento di eseguire più facilmente MacroBenchmarks utilizzando CompilationMode.BaselineProfile. (I42657, b/196074999) NOTA: è necessario eseguire anche l'aggiornamento a androidx.profileinstaller:profileinstaller:1.1.0-alpha04 o versioni successive.
  • I benchmark di StartupMode.COLD + CompilationMode.None sono ora più stabili. (I770cd, b/196074999)

Versione 1.1.0-alpha06

18 agosto 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha06. La versione 1.1.0-alpha06 contiene questi commit.

Modifiche alle API

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

Correzioni di bug

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

Problemi noti

  • CompilationMode.BaselineProfile è ancora in fase di sviluppo. Evita di usarlo per stabilire quanto è valido un profilo per il momento.

Versione 1.1.0-alpha05

4 agosto 2021

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha05. La versione 1.1.0-alpha05 contiene questi commit.

1.1.0-alpha04 è stato annullato prima del rilascio a causa di un arresto anomalo sporatico. b/193827052

Modifiche alle API

  • startActivityAndwait è stato cambiato per richiamare il lancio tramite am start, in modo da ridurre il tempo di ogni iterazione di misurazione di circa 5 secondi, senza il costo di supportare più i pacchetti di intent. (I5a6f5, b/192009149)

Correzioni di bug

  • Riduci l'aggressività del rilevamento delle limitazioni termiche e ricalcola la base di riferimento se queste ultime vengono rilevate di frequente. (I7327b)
  • Corregge FrameTimingMetric per il funzionamento su Android S beta (Ib60cc, b/193260119)
  • Usa un EmptyActivity per portare l'app target dallo stato di interruzione forzata e supportare meglio CompilationMode.BaselineProfile. (Id7cac, b/192084204)
  • Estensione del file di traccia modificata in .perfetto-trace per adeguarla allo standard della piattaforma. (I4c236, b/174663039)
  • StartupTimingMetric ora restituisce la metrica "completeDrawnMs" per misurare il tempo fino al completamento del rendering dell'applicazione. Per definire questa metrica per la tua app, chiama Activity.reportFullyDrawn quando i tuoi contenuti iniziali sono pronti, ad esempio quando gli elementi dell'elenco iniziali vengono caricati dal database o dalla rete. (il metodo reportFullyDrawn è disponibile senza controlli della versione di build su ComponentActivity). Tieni presente che il test deve essere eseguito abbastanza a lungo da acquisire la metrica (startActivityAnd esclusivamente non attende reportFullyDrawn). (If1141, b/179176560)
  • Riduci di oltre 50 ms il costo dell'aggiunta di metadati UI alle tracce (Ic8390, b/193923003)
  • Aumento significativo della frequenza di polling durante l'interruzione del 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

Viene rilasciato androidx.benchmark:benchmark-*:1.1.0-alpha03. La versione 1.1.0-alpha03 contiene questi commit.

Nuove funzionalità

Correzioni di bug

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

    Ad esempio

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

Versione 1.1.0-alpha02

18 maggio 2021

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

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

Nuove funzionalità

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

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

Correzioni di bug

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

Versione 1.1.0-alpha01

10 giugno 2020

Vengono rilasciate le funzionalità androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 e androidx.benchmark:benchmark-junit4:1.1.0-alpha01. La versione 1.1.0-alpha01 contiene questi commit.

Nuove funzionalità di 1.1

  • Metrica di allocazione: dopo il riscaldamento e il tempo, i benchmark ora eseguono una fase aggiuntiva, registrando i conteggi delle allocazioni. Le allocazioni possono causare problemi di prestazioni sulle versioni precedenti della piattaforma (140 ns in O diventano 8 ns in M - misurati su Nexus5X, con orologi bloccati). Questa metrica viene visualizzata nell'output della console di Android Studio e nella
  • Supporto della profilazione - Ora puoi acquisire i dati di profilazione per un'esecuzione di benchmark, in modo da esaminare perché il codice potrebbe essere eseguito lentamente. Il benchmark supporta l'acquisizione del tracciamento dei metodi o del campionamento dei metodi da ART. Questi file possono essere esaminati con il Profiler all'interno di Android Studio mediante File > Apri.
  • Il plug-in Benchmark Gradle ora fornisce valori predefiniti per una configurazione più semplice:
    • testBuildType è impostato per il rilascio per impostazione predefinita, per evitare di utilizzare dipendenze con copertura del codice integrata. Il tipo di build della release viene configurato anche come buildType predefinito, che consente ad Android Studio di selezionare automaticamente la variante di build corretta alla prima apertura di un progetto. (b/138808399)
    • signingConfig.debug viene utilizzata come configurazione predefinita della firma (b/153583269)

** Correzioni di bug **

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

Problemi noti

  • Riga di comando e chiamate gradle del benchmark non stampano i risultati direttamente. Puoi ovviare a questo problema eseguendo in Studio o analizzando il file di output JSON per trovare i risultati.
  • I report di benchmark non riescono a generare il report dai dispositivi su cui è installata un'app con un applicationId che termina con "android" o "download" (senza distinzione tra maiuscole e minuscole). Gli utenti che riscontrano questo problema devono eseguire l'upgrade del plug-in Android Gradle alla versione 4.2-alpha01 o versioni successive.

Versione 1.0.0

Versione benchmark 1.0.0

20 novembre 2019

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

Funzionalità principali di 1.0.0

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

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

Le principali funzionalità includono:

  • Stabilizzazione orologio
  • Assegnazione automatica della priorità ai thread
  • Supporto per i test delle prestazioni dell'interfaccia utente, ad esempio nell'esempio di RecyclerView
  • Riscaldamento e loop con JIT
  • Output benchmark JSON per la post-elaborazione

Versione 1.0.0-rc01

23 ottobre 2019

Vengono rilasciate le funzionalità androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 e androidx.benchmark:benchmark-junit4:1.0.0-rc01. La versione 1.0.0-rc01 contiene questi commit.

Nuove funzionalità

  • Aggiunta del tracciamento di systrace ai benchmark

Correzioni di bug

  • È stato risolto il problema di instabilità delle metriche per cui JIT non veniva terminata prima del riscaldamento a causa della riduzione delle priorità (b/140773023)
  • Directory di output JSON unificata su Android Gradle Plugin 3.5 e 3.6

Versione 1.0.0-beta01

9 ottobre 2019

Vengono rilasciate le funzionalità androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 e androidx.benchmark:benchmark-junit4:1.0.0-beta01. La versione 1.0.0-beta01 contiene questi commit.

Nuove funzionalità

  • Esegui la garbage collection prima di ogni riscaldamento per ridurre la pressione della memoria da un benchmark alla perdita al successivo (b/140895105)

Correzioni di bug

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

Versione 1.0.0-alpha06

18 settembre 2019

Vengono rilasciate le funzionalità androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 e androidx.benchmark:benchmark-junit4:1.0.0-alpha06. La versione 1.0.0-alpha06 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto un controllo relativo all'utilizzo non corretto del pacchetto precedente per l'esecutore del test, che ora fornisce un messaggio di errore più utile

Modifiche alle API

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

Versione 1.0.0-alpha05

5 settembre 2019

Vengono rilasciate le funzionalità androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 e androidx.benchmark:benchmark-junit4:1.0.0-alpha05. I commit inclusi in questa versione sono disponibili qui.

Modifiche alle API

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

Correzioni di bug

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

Versione 1.0.0-alpha04

7 agosto 2019

Vengono rilasciate le funzionalità androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 e androidx.benchmark:benchmark-junit4:1.0.0-alpha04. I commit inclusi in questa versione sono disponibili qui.

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

Nuove funzionalità

  • Plug-in Gradle
    • Ora la copertura di test viene disabilitata automaticamente e viene impostato il valore AndroidBenchmarkRunner per impostazione predefinita (b/138374050)
    • Aggiunto il supporto per la nuova copia dei dati basata su AGP durante l'esecuzione di benchmark e l'utilizzo di AGP 3.6 o versioni successive
  • Aggiunte in formato JSON
    • Tempo di esecuzione totale del test benchmark dell'output (b/133147694)
    • I benchmark di @Parameterized che utilizzano una stringa di nomi (ad esempio @Parameters(name = "size={0},depth={1}")) ora restituiscono nomi e valori dei parametri per benchmark nell'output JSON (b/132578772)
  • Modalità dry run (b/138785848)
    • È stata aggiunta una modalità di prova per eseguire ogni loop di benchmark una sola volta, al fine di verificare la presenza di errori/arresti anomali senza acquisire le misurazioni. Ciò può essere utile, ad esempio, per eseguire rapidamente dei benchmark prima dell'invio per verificare che non siano danneggiati.

Modifiche alle API

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

Correzioni di bug

  • Gli errori durante la scrittura su una memoria esterna sui dispositivi Q forniscono messaggi più descrittivi, con suggerimenti su come risolvere il problema
  • Le schermate vengono attivate automaticamente durante le esecuzioni di benchmark anziché non riuscire quando lo schermo è spento

Contributi esterni

  • Grazie a Sergey Zakharov per il suo contributo ai miglioramenti dell'output JSON e per la correzione dei problemi di blocco dello schermo.

Versione 1.0.0-alpha03

2 luglio 2019

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

Nuove funzionalità

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

Correzioni di bug

  • Non dovrebbe più essere necessario applicare il plug-in Gradle dopo i plug-in Android e il blocco Android
  • Aggiunge il supporto dei report di benchmark sui dispositivi Android 10 che usano l'archiviazione mirata

Versione 1.0.0-alpha02

6 giugno 2019

Vengono rilasciate le funzionalità 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 consideriamo lo schema JSON come un'API. Prevediamo di seguire gli stessi vincoli di stabilità delle altre API: stabili (con eccezioni molto rare) una volta in versione beta e risolti nella release finale, con aggiunte solo nelle release minori e modifiche/rimozioni nelle release principali.

Modifiche alle API

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

    • È stata riorganizzata la struttura degli oggetti dei risultati per supportare ulteriori gruppi di metriche in futuro (b/132713021)
    • Sono state aggiunte informazioni sul contesto dell'esecuzione del test, ad esempio informazioni sul dispositivo e sulla build e se gli orologi sono bloccati, all'oggetto di primo livello (b/132711920)
    • Ora i nomi delle metriche temporali contengono la parola "ns" (b/132714527)
    • Statistiche aggiuntive aggiunte per metrica riportata (massima, mediana, minima) e rimossa la statistica di riepilogo semplificata "nano" (b/132713851)
  • Output XML rimosso (b/132714414)

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

Correzioni di bug

  • È stato risolto il problema di ./gradlew lockClocks che non si bloccava su alcuni dispositivi con sistema operativo recenti (b/133424037)
  • Rilevamento della limitazione disabilitato per l'emulatore (b/132880807)

Versione 1.0.0-alpha01

7 maggio 2019

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