Benchmark

Misura con precisione il rendimento del codice in Android Studio.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Versione alpha
30 ottobre 2024 1.3.3 - - 1.4.0-alpha04

Dichiarazione delle dipendenze

Per aggiungere una dipendenza da Benchmark, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.

Macrobenchmark

Per utilizzare Macrobenchmark nel tuo progetto, aggiungi le seguenti dipendenze al file build.gradle per il modulo macrobenchmark:

Alla moda

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

Kotlin

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

Microbenchmark

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

Alla moda

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

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

Kotlin

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

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

La libreria Microbenchmark fornisce inoltre un plug-in Gradle da utilizzare con il modulo microbenchmark. Questo plug-in imposta le impostazioni predefinite della configurazione di compilazione per il modulo, copia dell'output del benchmark nell'host, e fornisce la ./gradlew lockClocks attività.

Per utilizzare il plug-in, includi la seguente riga nel blocco "plugins" nella finestra di primo livello File build.gradle:

Alla moda

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

Kotlin

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

Quindi applica il plug-in al file build.gradle del modulo di benchmark

Alla moda

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. 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 forma di stella.

Creare un nuovo problema

Per ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.

Versione 1.4

Versione 1.4.0-alpha04

30 ottobre 2024

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

Nuove funzionalità

  • (Sperimentale) Attiva la generazione di profili di riferimento e il benchmarking sulle app installate per un utente secondario, ad esempio qualsiasi app su dispositivi Android Auto headless. Questo supporto è stato testato in alcuni scenari, ma segnalaci un bug se non funziona per te. (I9fcbe, b/356684617, b/373641155)

Correzioni di bug

  • Ora l'override di isProfileable viene sempre eseguito nelle build di benchmark e anche isDebuggable nelle build di benchmark e nonMinified (acquisizione del profilo di riferimento). (I487fa, b/369213505)
  • Corregge il rilevamento della compilazione su alcuni dispositivi fisici precedenti all'API 28. Interessa il file json context.compilationMode, nonché il comportamento di androidx.benchmark.requireAot=true (che non genera più errori in modo errato) (Ic3e08, b/374362482)
  • Nelle metriche CpuEventCounter, inserisci se vengono osservate misurazioni non valide (ad es. istruzioni/cpucycles==0) (I8c503)

Versione 1.4.0-alpha03

16 ottobre 2024

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

Modifiche all'API

  • Macrobenchmark: aggiunge ArtMetric, che può essere utilizzato per controllare la copertura del profilo o il rendimento generale del runtime di Android. Acquisisce il numero e la durata totale del JIT, dell'init del corso (se disponibile) e della verifica del corso. Inoltre, cambia CaptureInfo in modo da includere la versione ART principale facoltativa con impostazione predefinita. (I930f7)
  • Aggiungi coefficientOfVariation all'output JSON del benchmark per mostrare la stabilità all'interno di una determinata esecuzione del benchmark. (Ib14ea)

Correzioni di bug

  • È stato risolto il problema di CollectBaselineProfileTask quando nel dispositivo con una durata di visualizzazione media sono stati inseriti degli spazi. (Ia0225, b/371642809)
  • Correzione speculativa per gli errori delle eccezioni StartupMode.COLD: Package <packagename> must not be running prior to cold start!. Ora, MacrobenchmarkScope.killProcess() (inclusa quella eseguita prima di ogni iterazione, utilizzata per implementare il comportamento di StartupMode.COLD) attenderà per verificare che tutti i processi dell'app siano stati interrotti. (I60aa6, b/351582215)
  • È stato risolto un problema per cui veniva visualizzato l'errore UNLOCKED_ su alcuni emulatori con root. (Ic5117)
  • Questa libreria ora utilizza le annotazioni di nullità JSpecify, che sono di tipo di utilizzo. Gli sviluppatori Kotlin devono usare i seguenti argomenti del compilatore per applicare un utilizzo corretto: -Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode (I7104f, b/326456246)

Versione 1.4.0-alpha02

2 ottobre 2024

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

Modifiche all'API

  • Le attività Gradle lockClocks e unlockClocks sono state spostate nei progetti di benchmark, anziché essere disponibili a livello superiore. Questa modifica è stata necessaria perché, purtroppo, non è possibile registrarle come azioni di primo livello senza compromettere l'isolamento del progetto. (I02b8f, b/363325823)

Correzioni di bug

  • BaselineProfileRule ora raccoglie i profili per le app multi-processo segnalando a ogni processo in esecuzione alla fine del blocco di eseguire il dump dei profili. Se una compilazione basata su profilo non trova mai un processo di trasmissione, la compilazione non andrà a buon fine, in quanto non è previsto che contenga dati del profilo. Inoltre, è stato aggiunto un argomento di misurazione per controllare la durata dell'attesa del dump: androidx.benchmark.saveProfileWaitMillis (I0f519, b/366231469)
  • Da Benchmark 1.3.2: è stato corretto il problema che impediva a Firebase Test Lab (FTL) di estrarre i file dei risultati del profilo di riferimento o del benchmark macro dal plug-in Gradle del profilo di riferimento. (I2f678, b/285187547)

Per utilizzare FTL, applica il plug-in al modulo del profilo di riferimento nel blocco del plug-in, con:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

e poi configura Firebase Test Lab con:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

Inoltre, il dispositivo FTL creato deve essere aggiunto all'estensione del profilo di riferimento:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Versione 1.4.0-alpha01

18 settembre 2024

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

Nuova funzionalità: App Startup Insights

  • La versione iniziale degli insight sull'avvio dell'app può essere abilitata in Macrobenchmark. (09fae38)

Per attivare un benchmark all'avvio:

  @Test
  fun startup {
      macrobenchmarkRule.measureRepeated(
          
          packageName = "com.example.my.application.id"
          metrics = listOf(StartupTimingMetric()),
          iterations = 5,
          startupMode = StartupMode.COLD,
          compilationMode = CompilationMode.None(),
          experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
          ) {
          scope.startActivityAndWait(...)
      }
  }

Eseguendo il benchmark di avvio, la traccia viene analizzata per cercare problemi comuni e le stampe dopo le metriche per testare l'output di Studio nella scheda Benchmark, ad esempio:

StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│   ├──   timeToFullDisplayMs                min  1,147.2,   median  1,208.8,   max  1,307.4
│   └──   timeToInitialDisplayMs             min  1,147.2,   median  1,208.8,   max  1,307.4
├── App Startup Insights
│   ├── App in debuggable mode (expected: false)
│   │   └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│   ├── Potential CPU contention with another process (expected: < 100000000ns)
│   │   └── seen in iterations: 4(105022546ns)
│   └── Main Thread - Binder transactions blocked (expected: false)
│       └── seen in iterations: 7(true)
└── Traces
    └── Iteration 0 1 2 3 4 5 6 7 8 9

Questa funzionalità è ancora in fase di sviluppo e sono previsti miglioramenti alla documentazione e all'estensibilità, ma sono ben accetti i feedback.

Nuove funzionalità

  • Aggiunta la proprietà Gradle androidx.baselineprofile.suppressWarnings per eliminare tutti gli avvisi del profilo di riferimento. (314153a)
  • Le metriche Microbench ora vengono visualizzate nelle tracce Perfetto come contatori. (3214854)
  • Aggiungi script sperimentali per disattivare il JIT (richiede il riavvio di root / runtime) e reimpostare lo stato di test/prestazioni del dispositivo. Queste non sono attualmente pubblicate come attività di Gradle. (7c3732b)
  • È stato aggiunto l'argomento benchmark per saltare i test durante l'esecuzione sull'emulatore. Se la build automaticGenerationDuring è abilitata, i benchmark attiveranno anche la generazione del profilo di riferimento. L'operazione non andrà a buon fine se vengono utilizzati emulatori. Con il nuovo argomento skipBenchmarksOnEmulator possiamo invece saltare il test. (0c2ddcd)
  • Modifica della logica di abilitazione degli eventi relativi alle prestazioni per l'esecuzione su API 23 e versioni successive (2550048)

Modifiche alle API

  • L'argomento PerfettoConfig sperimentale esistente per MacrobenchmarkRule.measureRepeated() è stato spostato nel nuovo oggetto ExperimentalConfig.

Correzioni di bug

  • Aumenta il numero di tentativi lockClocks.sh (99e9dac)
  • Non creare tipi di build nonMinified e benchmark, se esistenti. A causa di un bug, anche se esistevano tipi di build nonMinified e benchmark, queste venivano ricreate. (e75f0a5)
  • Ignora le sezioni che non terminano dai risultati di TraceSectionMetric. (a927d20)
  • Controllo dell'emulatore migliorato per prendere in considerazione il prefisso sdk_. (1587de8)
  • Tratta i pacchetti non in esecuzione come approvati in FrameTimingGfxInfoMetric. (35cc79c)
  • Correzione del problema che causava la generazione di valori corrotti per gli eventi non di istruzione da parte di androidx.benchmark.cpuEventCounter. (6edd59)
  • Correggi resumeTiming/runWithTimingDisabled in modo da rispettare l'ordine di priorità delle metriche e riduci in modo significativo l'impatto della sospensione/ripresa delle metriche con priorità inferiore sui risultati delle metriche con priorità più elevata. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di misurazione cpuEventCounter.enable, il tempo in nanosecondi non viene più ridotto in modo significativo quando si verificano interruzioni/ripresi. (5de0968)

Versione 1.3

Versione 1.3.3

16 ottobre 2024

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

Correzioni di bug

  • È stato corretto il problema relativo al valore CollectBaselineProfileTask quando il dispositivo AVD contiene spazi (Ia0225, b/371642809)

Versione 1.3.2

2 ottobre 2024

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

Correzioni di bug

  • È stato risolto il problema dell'impossibilità di eseguire il pull dei file dei risultati del profilo di base o Macrobenchmark in Firebase Test Lab (FTL) dal plug-in Gradle del profilo di base. (I2f678, b/285187547)

Per utilizzare FTL, applica il plug-in al modulo del profilo di riferimento nel blocco del plug-in, con:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

e poi configura Firebase Test Lab con:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

Inoltre, il dispositivo FTL creato deve essere aggiunto all'estensione del profilo di riferimento:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Versione 1.3.1

18 settembre 2024

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

Correzioni di bug

  • È stata aggiunta la proprietà gradle androidx.baselineprofile.suppressWarnings per eliminare tutti gli avvisi relativi al profilo di riferimento (I7c36e, b/349646646)
  • È stato corretto il plug-in Gradle del profilo di riferimento in modo che utilizzi nonMinified… e benchmark… preesistenti, se creati dall'app, anziché creare wrapper. (Ia8934, b/361370179)
  • È stato corretto il problema java.lang.AssertionError: ERRORS (not suppressed): EMULATOR quando automaticGenerationDuringBuild è abilitato sugli emulatori. Il nuovo argomento viene utilizzato per saltare il test. (If3f51, b/355515798)
  • Minimizzazione del microbenchmark: mantieni le sottoclassi di org.junit.runner.notification.RunListener nella libreria di benchmark ProGuard (Ic8ed5, b/354264743)
  • Correggi TraceSectionMetric in Ignora sezioni non terminanti. In precedenza, si considerava che avessero una durata di -1, ad esempio durante la sommatoria o il rilevamento di una durata minima. (If74b7)
  • È stato risolto un problema in FrameTimingGfxInfoMetric per cui l'avvio della metrica causava un arresto anomalo se il processo non era già in esecuzione. (I6e412)

Versione 1.3.0

21 agosto 2024

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

Modifiche ai microbenchmark dalla versione 1.2.0

  • Il monitoraggio dei metodi è attivo per impostazione predefinita nei microbenchmark quando viene eseguito sulla maggior parte dei dispositivi.
    • Il monitoraggio dei metodi viene eseguito come fase separata, dopo le misurazioni, in modo da poter generare misurazioni e tracce dei metodi accurate da un'unica esecuzione del benchmark.
    • Il monitoraggio dei metodi su alcune versioni del sistema operativo Android e di ART influisce sulle fasi di misurazione successive. In queste versioni, il monitoraggio dei metodi è disattivato per impostazione predefinita e viene stampato un avviso nell'output di Studio
  • Benchmark del thread principale e ANR
    • È stato aggiunto measureRepeatedOnMainThread per i benchmark dei thread dell'interfaccia utente (ad es. quelli che interagiscono con le UI di Compose/View) per evitare ANR quando vengono eseguiti per molti secondi.
    • Le tracce dei metodi vengono ignorate se si prevede che supereranno la scadenza per l'evitare ANR. Imposta androidx.benchmark.profiling.skipWhenDurationRisksAnr su false per disattivare questo comportamento (non consigliato per le esecuzioni di CI, poiché gli ANR possono causare problemi nelle esecuzioni di CI lunghe).
  • Minimizzazione
    • Regole ProGuard incorporate per migliorare il microbenchmarking con la minimizzazione abilitata
    • La minimizzazione/R8 in un modulo della libreria richiede AGP 8.3 e può essere attivata tramite android.buildTypes.release.androidTest.enableMinification in build.gradle
    • API BlackHole.consume() sperimentale aggiunta per evitare l'eliminazione del codice morto (If6812, b/286091643)
  • Metriche
    • Funzionalità sperimentale del contatore di eventi della CPU (metriche da perf_event_open, che richiede il privilegio di accesso come utente root sulla maggior parte delle versioni della piattaforma), accesso tramite InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (può essere impostato su true) e androidx.benchmark.cpuEventCounter.events può essere impostato ad esempio su (Instructions,CpuCycles). Questa funzionalità dovrebbe essere supportata su alcuni emulatori userdebug, ma il supporto non è stato testato su tutti gli emulatori disponibili

Modifiche a MACRObenchmark dalla versione 1.2.0

  • Revisione del monitoraggio dei metodi per i macrobenchmark.
    • Ora le tracce dei metodi sono limitate alla durata del measureBlock e possono acquisire più sessioni se il processo viene avviato più volte.
    • In precedenza, il monitoraggio dei metodi funzionava solo per i benchmark StartupMode.COLD e non acquisiva nulla per measureBlocks che non riavviava il processo target
    • 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)
  • Esegui correttamente il dump del profilo ART durante le singole iterazioni di warmUp quando il processo si interrompe, in modo che le misurazioni di CompilationMode.Partial(warmup=N) siano più precise. (I17923)
  • Messaggio di errore di trasmissione del shader in caso di abbandono
    • Sono stati aggiunti suggerimenti di debug per eliminare il messaggio di errore di trasmissione dello streamr
    • Aggiungi due argomenti di strumenti per eseguire l'override del comportamento di abbandono degli shader per risolvere i problemi di arresto anomalo durante il benchmarking delle app senza ProfileInstaller 1.3:
      • androidx.benchmark.dropShaders.enable=true/false : può essere utilizzato per saltare tutti i rilasci di shader (inclusi quelli eseguiti nei lanci di StartupMode.Cold), in particolare durante il benchmarking delle app che non utilizzano ancora ProfileInstaller 1.3
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : può essere utilizzato per tollerare gli errori quando si tenta di inserire shader, ad esempio durante il benchmarking delle app senza profileinstaller 1.3 (I4f573)
  • È stata aggiunta la variante sperimentale MacrobenchmarkRule#measureRepeated che accetta un PerfettoConfig personalizzato per la registrazione di tracce Perfetto completamente personalizzate. Tieni presente che configurazioni non configurate correttamente potrebbero causare errori nelle classi di metriche integrate. (Idfd3d, b/309841164, b/304038384)
  • Annulla i job di dexopt in background prima di eseguire un Macrobenchmark per ridurre le interferenze. (I989ed)
  • Macrobenchmark ora attende 1 secondo per il flush di un profilo ART da parte dell'applicazione di destinazione (in precedenza aspettava 500 ms). (I85a50, b/316082056)
  • Revisione di TraceSectionMetric
    • Nota: le modifiche TraceSectionMetric riportate di seguito possono influire sugli output nell'utilizzo del CI e potrebbero creare discontinuità o interrompere l'analisi sintattica
    • La somma è ora il valore predefinito, poiché la maggior parte dell'utilizzo di questa metrica riguarda eventi ripetuti e la prima escluderebbe i dati in questi casi.
    • È stata modificata per essere più personalizzabile e sono disponibili più modalità
    • I nomi delle modalità sono ora incorporati nel nome dell'output della metrica (in Studio e JSON)
    • Ora supporta i segmenti creati utilizzando Trace.{begin|end}AsyncSection.
  • Metriche
    • Alimentazione - Aggiunta di PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge() e PowerMetric.deviceSupportsPowerEnergy()
    • Metric.getResult è stato rinominato in getMeasurements per corrispondere al tipo di ritorno
    • Sono state aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento all'avvio. Ciò non cambia il comportamento attuale (quindi alcuni errori vengono generati e altri non riescono a rilevare l'avvio in silenzio), ma lo rende più comprensibile. In genere, 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)
    • È 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 convalida risolti). (I1e5aa)
    • È stato chiarito che frameOverrunMs è la metrica preferita per il monitoraggio, se disponibile nei documenti, e il motivo. (I18749, b/329478323)
    • È stato risolto il problema per cui i fotogrammi non terminati all'inizio e alla fine della traccia potevano essere accoppiati, il che generava un report errato come un singolo fotogramma estremamente lungo. (I39353, b/322232828)
    • Migliora l'errore FrameTimingMetric quando non vengono prodotti frame e sempre l'output del link alla traccia in caso di analisi delle metriche non riuscita per contribuire alla diagnosi del problema. (I956b9)
    • È stato corretto l'arresto anomalo in FrameTimingMetric dovuto alla mancata analisi dell'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276)
    • È stata allentata la severità dei controlli in FrameMetrics e sono stati aggiunti ulteriori dettagli ai messaggi di errore. (Iadede)

Modifiche al plug-in Gradle / Baseline Profile Capture dalla versione 1.2.0

  • È stata aumentata la versione massima consigliata di AGP a 9.0.0-alpha01.
  • Assicurati che le attività mergeArtProfile e mergeStartupProfile aspettino sempre la generazione del profilo di riferimento. (I623d6, b/343086054)
  • La generazione di un profilo di riferimento riuscito genera un riepilogo delle modifiche (I824c8, b/269484510)
  • È stato aggiunto un DSL per disattivare gli avvisi (Ic4deb, b/331237001)
  • Correzione per garantire che i benchmark utilizzino i profili di riferimento generati quando automaticGenerationDuringBuild è disattivato (Ic144f, b/333024280)
  • Correggi le sostituzioni delle proprietà del plug-in BaselineProfile per abilitare la generazione del profilo di riferimento e il benchmarking durante la personalizzazione di un tipo di build nonMinified o di benchmark. (Ib8f05, b/324837887)
  • Correzione per l'inclusione dei profili di riferimento della libreria nell'AAR precedente ad AGP 8.3.0-alpha15. (I1d2af, b/313992099)
  • È stato corretto l'URL di output del profilo di riferimento e di avvio alla fine dell'attività di generazione. (I802e5, b/313976958)

Altre modifiche significative dalla versione 1.2.0

  • Acquisizione di traccia
    • Errore EXITCODE 2 ridotto all'avvio di perfetto da un errore ad avviso registrato
    • Attiva il monitoraggio AIDL per impostazione predefinita nei benchmark(richiede l'API 28) (Ia0af2, b/341852305)
    • Attiva il monitoraggio dei tag porter per impostazione predefinita nei benchmark. Vengono acquisiti, ad esempio, i tracepoint di wakelock. (Icfe44, b/286551983)
    • Aumentato il timeout di avvio dell'acquisizione della traccia per evitare arresti anomali all'avvio del tracciamento su dispositivi più lenti (I98841, b/329145808)
    • Sono state aggiunte le API pubbliche PerfettoTraceProcessor.Session.queryMetrics con varianti JSON, textproto e proto binary (non decodificate). Ti consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382)
    • Attiva l'avvio bloccato nel record della traccia Perfetto per ridurre il rischio di dati mancanti all'inizio della traccia. Supportata solo sull'API 33 e versioni successive (Ie6e41, b/310760059).
  • Output JSON
    • Sono state aggiunte informazioni aggiuntive nel contesto del benchmark nell'output JSON:
      • context.artMainlineVersion - versione intera del modulo Art mainline (se presente sul dispositivo, -1 in caso contrario)
      • context.build.id - Deve essere uguale a android.os.Build.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 pre-release (incluse le build di release) (Ie5020)
    • È stato aggiunto l'elenco profilerOutput all'output JSON per semplificare gli strumenti per le tracce di profilazione (ad es. Perfetto, tracce metodo) (I05ddd, b/332604449)
    • È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, in quanto ciò comporterà la sovrascrittura ripetuta dei file JSON di output per modulo. (Ia1af6, b/286899049)
    • Viene lanciato quando i nomi file sono più lunghi di 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione dei file. (I4a5ab)

Versione 1.3.0-rc01

7 agosto 2024

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

Correzioni di bug

  • Correggi androidx.benchmark.cpuEventCounter che produce valori danneggiati per eventi non di istruzioni (I7386a, b/286306579)
  • Correggi resumeTiming/runWithTimingDisabled per rispettare l'ordine di priorità delle metriche e ridurre notevolmente l'impatto della messa in pausa/ripresa delle metriche con priorità più bassa sui risultati delle metriche con priorità più alta. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di misurazione cpuEventCounter.enable, il tempo in nanosecondi non viene più ridotto in modo significativo quando si verificano interruzioni/ripresi. (I39c2e, b/286306579, b/307445225)
  • Riduzione della possibilità che il campionamento dello stack causa il timeout forzato di measureRepeatedOnMainThread del thread principale spostando la conversione del campionamento dello stack dal thread principale. (I487a8, b/342237318)
  • È stato rimosso il riepilogo manuale dell'accesso alle nuove API di piattaforma, poiché questo avviene automaticamente tramite la definizione del modello API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). Si consiglia ai clienti che non utilizzano AGP di eseguire l'aggiornamento alla versione D8 8.1 o successiva. Consulta questo articolo per ulteriori dettagli. (I9496c, b/345472586)
  • È stato aggiunto il controllo della versione agp per inviare il nome del pacchetto come argomento instr. Nelle versioni precedenti ad AGP 8.4.0, il nome del pacchetto dell'app di destinazione non può essere inviato all'app di strumentazione tramite argomenti di strumentazione. (0c72a3f)

Versione 1.3.0-beta02

10 luglio 2024

androidx.benchmark:benchmark-*:1.3.0-beta02 viene rilasciato. 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

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

Modifiche all'API

  • Il nome MethodTracing.affectsMeasurementOnThisDevice è stato rinominato in AFFECTS_MEASUREMENT_ON_THIS_DEVICE per coerenza. (I1bdfa)
  • È stata aggiunta l'API sperimentale BlackHole.consume() per impedire l'eliminazione del codice inutilizzato nei microbenchmark. (If6812, b/286091643)
  • Ora il microbenchmark viene lanciato correttamente per impedire che il monitoraggio dei metodi interferisca con le misurazioni. Questo si verifica su alcuni dispositivi quando il monitoraggio dei metodi viene attivato forzatamente (tramite gli argomenti di strumenti o MicrobenchmarkConfig) e se viene tentata una misurazione dopo una traccia del metodo. I dispositivi interessati eseguono l'API 26-30 o determinate versioni del modulo principale ART interessate da questa interferenza e possono essere rilevati in fase di esecuzione tramite ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864)

Correzioni di bug

  • La versione massima dell'agp consigliata è stata aumentata a 9.0.0-alpha01. (I5bbb0)
  • È stata aggiunta la modalità di compilazione al contesto del benchmark (If5612, b/325512900)
  • Attiva il monitoraggio AIDL per impostazione predefinita (richiede l'API 28) (Ia0af2, b/341852305)
  • Sono state aggiunte informazioni aggiuntive nel contesto del benchmark nell'output JSON:
    • context.artMainlineVersion - versione intera del modulo Art mainline (se presente sul dispositivo, -1 in caso contrario)
    • context.build.id - È uguale 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 in modo che rispetti 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 aspettino sempre la generazione del profilo di riferimento. (I623d6, b/343086054)
  • Tieni conto dello stato di attivazione della variante quando decidi se attivarla. (I5d19e, b/343249144)
  • È stato aumentato il timeout di avvio predefinito per il processore di tracce perfetto. (I87e8c, b/329145808)

Versione 1.3.0-alpha05

14 maggio 2024

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

Correzioni di bug

  • Generare un'eccezione più chiara quando la metrica macrobench restituisce valori pari a zero per tutte le iterazioni (Iab58f, b/314931695)
  • Regole di workaround aggiuntive aggiunte alle regole ProGuard di microbench, incluso il supporto per le regole di listener e altri avvisi / errori osservati. (I14d8f, b/329126308, b/339085669)
  • Il monitoraggio dei metodi viene eseguito come fase separata durante un macrobenchmark e non influisce più sulle misurazioni. (If9a50, b/285912360, b/336588271)
  • Sono stati aggiunti 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

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

Modifiche all'API

  • È stata aggiunta la variante sperimentale MacrobenchmarkRule#measureRepeated che accetta un PerfettoConfig personalizzato per la registrazione di tracce Perfetto completamente personalizzate. Tieni presente che le configurazioni configurate in modo errato potrebbero causare l'errore delle classi Metric integrate. (Idfd3d, b/309841164, b/304038384)
  • Rinomina PowerMetric.deviceSupportsPowerEnergy in PowerMetric.deviceSupportsHighPrecisionTracking per maggiore chiarezza (I5b82f)
  • Sono stati aggiunti PowerMetric.deviceBatteryHasMinimumCharge() e PowerMetric.deviceSupportsPowerEnergy() per consentire la modifica o l'ignoramento 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 un DSL per disattivare gli avvisi (Ic4deb, b/331237001)
  • È stata modificata l'eccezione nel log di informazioni quando le varianti di benchmark sono disattivate (I8a517, b/332772491)
  • Semplifica l'acquisizione delle tracce del metodo per un Macrobenchmark con l'ambito della durata del measureBlock() effettivo. In precedenza, veniva avviato al momento del lancio del processo target e supportava solo gli avviamenti 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 potenza al benchmark Perfetto Config. Questa operazione acquisisce, ad esempio, i punti di traccia dei wakelock. (Icfe44, b/286551983)
  • È stato aggiunto l'argomento inst androidx.benchmark.profiling.skipWhenDurationRisksAnr, che può essere impostato su false per evitare di saltare le tracce del metodo quando la durata prevista potrebbe causare un ANR. Si consiglia vivamente di evitarlo nelle esecuzioni CI.
  • È stato aggiunto l'argomento inst sperimentale androidx.benchmark.profiling.perfCompare.enable. Imposta questo parametro su true per eseguire il confronto dei tempi tra le fasi di misurazione e di profilazione. Utili, ad esempio, per valutare l'overhead del tracciamento dei metodi. (I61fb4, b/329146942)

Modifiche alle API

  • È stata modificata la classe TraceSectionMetric.Mode in una classe sigillata per consentire l'espansione futura senza interrompere le istruzioni when esaustive (I71f7b)
  • Sono stati aggiunti TraceSectionMetric.Mode.Average e .Count e gli argomenti sono stati riordinati in modo che l'argomento più comune (mode) fosse all'inizio dell'elenco degli argomenti, riducendo la necessità di specificare i nomi dei parametri. (Ibf0b0, b/315830077, b/322167531)
  • Metric.getResult è stato rinominato in getMeasurements per corrispondere al tipo di reso (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 le sostituzioni delle proprietà del plug-in BaselineProfile per abilitare la generazione del profilo di riferimento e il benchmarking durante la personalizzazione di un tipo di build nonMinified o di benchmark. (Ib8f05, b/324837887)
  • È stato corretto lo svuotamento delle tracce dei metodi nel macrobenchmark, in modo che le tracce dei metodi siano completamente acquisite e valide, anche su dispositivi più lenti. (I6349a, b/329904950)
  • Attiva l'avvio bloccato nel record della traccia Perfetto per ridurre il rischio di dati mancanti all'inizio della traccia. Supportata solo sull'API 33 e versioni successive (Ie6e41, b/310760059).
  • È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, poiché i file JSON di output per modulo verranno sovrascritti ripetutamente. (Ia1af6, b/286899049)
  • Forzare l'utilizzo di "," (virgola) come separatore di migliaia per garantire la coerenza dell'output di Studio, ignorando le impostazioni internazionali del dispositivo (I3e921, b/313496656)
  • TraceSectionMetric ora supporta i segmenti creati utilizzando Trace.{begin|end}AsyncSection. (I91b32, b/300434906)
  • Sono state aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento all'avvio. Il comportamento attuale non cambia (pertanto alcuni errori generano errori e altri non rilevano automaticamente l'avvio), ma lo rendono più comprensibile. In genere, quelli che Log.w() e non riescono a registrare le metriche di avvio sono quelli in cui mancano gli eventi non frame, vengono lanciate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sui tempi dei frame (dalle sezioni UI/RT). (Id240f, b/329145809)
  • Annullare i job dexopt in background prima di eseguire un benchmark macro per ridurre le interferenze. (I989ed)
  • È stata aggiunta la misurazione frameCount 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 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

androidx.benchmark:benchmark-*:1.3.0-alpha02 viene rilasciato. 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 attivare la minimizzazione/l'ottimizzazione R8 in build.gradle del modulo di benchmark, il che dovrebbe portare a un aumento significativo delle prestazioni, a seconda del carico di lavoro. (I738a3, b/184378053)

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

Correzioni di bug

  • Corregge l'avviso relativo al monitoraggio dei metodi in modo che sia su una riga separata dall'output di microbench. (I0455c, b/328308833)

Versione 1.3.0-alpha01

21 febbraio 2024

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

Modifiche all'API

  • I parametri booleani MicrobenchmarkConfig sono stati rinominati per evitare l'uso della parola "deve" non necessaria (Ia8f00, b/303387299)
  • È stato aggiunto BenchmarkRule.measureRepeatedOnMainThread in modo che i benchmark del thread principale (ad es. quelli che toccano le UI di Views o Compose) possano evitare di attivare ANR, in particolare durante suite di grandi dimensioni in CI. (I5c86d)
  • È stato aggiunto FrameTimingGfxInfoMetric, un'implementazione alternativa sperimentale di FrameTimingMetric con misurazioni provenienti direttamente dalla piattaforma, anziché estratte dalla traccia Perfetto. (I457cb, b/322232828)
  • Aggiungere la possibilità di eseguire il dump di un profilo ART durante le singole iterazioni di warmUp. (I17923)
  • Diverse modifiche all'API TraceSectionMetric:
    • Aggiungi Mode.Min, Mode.Max
    • Aggiungi l'argomento label per sostituire il nome della sezione come etichetta della metrica
    • È stato aggiunto il nome della modalità all'output per chiarire il significato della metrica
    • Impostazione predefinita modificata in somma, poiché la maggior parte dell'utilizzo di questa metrica è per eventi ripetuti. Fai attenzione a queste modifiche nell'utilizzo del CI, in quanto potrebbero creare discontinuità o interrompere l'analisi. (Ic1e82, b/301892382, b/301955938)

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)
  • È stato corretto l'URL di output del profilo di riferimento e di avvio alla fine dell'attività di generazione (I802e5, b/313976958)
  • Sono stati modificati i timeout delle origini dati per tentare di correggere il problema java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Aggiungi due argomenti di 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 (incluso quello fatto nei lanci di StartupMode.Cold), soprattutto quando si effettuano benchmark di app che non utilizzano ancora profileschedule 1.3
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : può essere utilizzato per tollerare gli errori quando si tenta di inserire shader, ad esempio durante il benchmarking delle app senza profileinstaller 1.3 (I4f573)
  • Salta 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)
  • Viene lanciato quando i nomi file sono più lunghi di 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione dei file. (I4a5ab).
  • 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)
  • Utilizza --skip verification sull'API 30 e versioni successive quando reinstalli un pacchetto sull'API 30-33 per cancellare i profili ART nelle build utente. In questo modo è possibile bypassare gli avvisi di Play Protect che causano errori su alcune classi di dispositivi. (Ic9e36)
  • Utilizza am force-stop per terminare le app quando non si tratta di un'app di sistema come l'UI di sistema o Avvio app. (I5e028)
  • Macrobenchmark ora attende 1 second affinché l'applicazione di destinazione svuoti un profilo ART (in precedenza attendeva 500 ms). (I85a50, b/316082056)
  • Migliora l'errore FrameTimingMetric quando non vengono prodotti frame e sempre l'output del link alla traccia in caso di analisi delle metriche non riuscita per contribuire alla diagnosi del problema. (I956b9)
  • È stato corretto l'arresto anomalo in FrameTimingMetric dovuto alla mancata analisi dell'ID frame, in particolare su alcuni dispositivi OEM. (Ia24bc, b/303823815, b/306235276)
  • È stata allentata la severità dei controlli in FrameMetrics e sono stati aggiunti ulteriori dettagli ai messaggi di errore. (Iadede)

Versione 1.2

Versione 1.2.4

17 aprile 2024

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

Correzioni di bug

  • È stato corretto il problema relativo alla mancata configurazione dell'attributo srcset del profilo di riferimento nelle varianti di benchmark. Corregge anche automaticGenerationDuringBuild nelle librerie che causa una dipendenza circolare. (I28ab7, b/333024280)
  • Usa am force-stop per uccidere le app quando non si tratta di un'app di sistema come UI di sistema o Avvio applicazioni. Questo corregge l'arresto anomalo dei benchmark StartupMode.COLD da "Il pacchetto $package non deve essere in esecuzione prima dell'avvio a freddo" a causa del mancato completamento dell'uccisione del processo. (I5e028)

Versione 1.2.3

24 gennaio 2024

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

Correzioni di bug

  • È stata rimossa l'eccezione dal plug-in Gradle del profilo di riferimento quando la versione di AGP è 8.3.0 o successiva.
  • Correzione per l'inclusione dei profili di riferimento della libreria 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

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

Nuove funzionalità

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

Versione 1.2.0

18 ottobre 2023

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

Modifiche importanti dalla versione 1.1.0

Profili di riferimento

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

Macrobenchmark

  • Compilation
    • Macrobenchmark ora reimposta correttamente lo stato di compilazione per ogni compilazione. Questa operazione richiede la reinstallazione dell'APK prima di Android 14, pertanto è vivamente consigliato eseguire il benchmarking su Android 14 e versioni successive se vuoi mantenere lo stato (ad esempio l'accesso utente) in ciò che viene misurato.
    • Puoi anche aggirare il problema controllando la compilazione dell'app separatamente e saltando la compilazione con CompilationMode.Ignore() o l'argomento di strumentazione
  • Argomenti di strumentazione

    • Supporto per l'argomento 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 i test delle regole di macrobenchmark rispetto al profilo di riferimento del filtro in fase di runtime
    • È stato aggiunto l'argomento androidx.benchmark.perfettoSdkTracing.enable per attivare il monitoraggio con tracing-perfetto, ad esempio il monitoraggio della ricompozione di Compose. Tieni presente che, se utilizzata con StartupMode.COLD, la tempistica sarà notevolmente influenzata dal caricamento e dall'attivazione della libreria di monitoraggio 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 Metric sperimentali

    • Aggiunto il campo 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.
    • È stato aggiunto il comando sperimentale PowerMetric per acquisire informazioni sull'utilizzo dell'alimentazione
    • È stato aggiunto un parametro sperimentale MemoryCountersMetric per conteggiare gli errori di pagina
    • È stata aggiunta l'API sperimentale PerfettoTraceProcessor, utilizzata internamente per estrarre le metriche dalle tracce di sistema (ovvero tracce Perfetto)
  • 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 corretto il problema relativo all'FrameTimingMetric che ignorava i frame con ID frame incoerenti (in genere, i frame durante le increspature nell'API 31 e versioni successive) (I747d2, b/279088460)
    • Sono stati corretti gli errori di analisi delle tracce di dimensioni superiori a 64 MB (Ief831, b/269949822)
    • Sono stati chiariti gli errori quando l'immagine del sistema operativo del dispositivo (in particolare dell'emulatore) non è configurata correttamente per il monitoraggio o la compilazione
    • Saltare il controllo del livello della batteria per i dispositivi senza batteria (micro e macro)
    • Output dei file migliorato, con errori più chiari per le directory di output non valide e valori predefiniti più sicuri
    • Maggiore stabilità di StartupMode.COLD grazie all'eliminazione costante della cache degli shader (esposta anche tramite MacrobenchmarkScope.dropShaderCache)
    • È stato corretto il fallback leanback 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 MicrobenchmarkConfig sperimentale per definire metriche personalizzate e configurare il monitoraggio e il profiling. Può essere utilizzato per acquisire tracce dei metodi o acquisire tracepoint (ma tieni presente l'overhead del monitoraggio).
    • Sono state aggiunte API sperimentali per il controllo di BenchmarkState separatamente da BenchmarkRule, senza JUnit
    • È stato aggiunto un record sperimentale PerfettoTrace per attivare 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 la stampa degli avvisi poteva non riuscire nell'output del benchmark di Android Studio.
    • È stato corretto l'arresto anomalo di SampledProfiling su Android 13 (API 33) e versioni successive.
    • Prestazioni 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

  • Correggere l'output del file di benchmark in modo che non interrompa più la copia dei file del plug-in BaselineProfile. I file sono stati generati e copiati dal dispositivo, ma sono stati rinominati in modo che il plug-in Gradle non li vedesse. (I8dbcc, b/303034735, b/296453339)
  • Sono stati chiariti i messaggi di errore di tracing-perfetto relativi al caricamento 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 lanciata un'eccezione (con istruzioni per la correzione) quando il monitoraggio dell'SDK Perfetto non riesce a essere inizializzato in un benchmark. (I6c878, b/286228781)
  • Correzione dell'arresto anomalo OOM durante la conversione della traccia del metodo ART in formato perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) È stata chiarita l'etichetta del monitoraggio dei metodi quando è collegata all'output del test di Studio e sono stati corretti i nomi dei file di monitoraggio dei metodi in modo che siano univoci sul dispositivo/host, in modo che non vengano sovrascritti quando viene eseguito più di un benchmark. (I08e65, b/285912360)
  • Garantisce che il dispositivo sia attivo quando viene acquisito un profilo di riferimento. (I503fc)

Versione 1.2.0-beta05

30 agosto 2023

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

Nuove funzionalità

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

Versione 1.2.0-beta04

23 agosto 2023

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

Nuove funzionalità

  • Il plug-in Gradle Profili di riferimento ora supporta il plug-in Android Gradle 8.3. (aosp/2715214)

Correzioni di bug

  • Correggi gli errori di scrittura, spostamento e 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

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

Correzioni di bug

  • L'argomento di misurazione fullTracing.enable è stato rinominato in perfettoSdkTracing.enable per coerenza con il nome dell'elemento e altri riferimenti. fullTracing.enable continuerà a funzionare come opzione di riserva. (I7cc00)
  • I tracepoint interni della libreria di benchmark (inclusa la tracciatura di loop/fasi di microbenchmark) ora vengono visualizzati nel visualizzatore di tracce di sistema di Studio e nidificati sotto il processo corretto in Perfetto. (I6b2e7, b/293510459)
  • È stato rimosso l'errore NON-PROFILEABLE del macrobenchmark sull'API 31 e versioni successive ed è stato ignorato il controllo di profiliabilità sui dispositivi con accesso root eng/userdebug. (I2abac, b/291722507)
  • Quando utilizzi le ottimizzazioni del layout di Dex, le regole del profilo di avvio vengono ora considerate anche come regole del profilo di riferimento. (aosp/2684246, b/293889189)

Versione 1.2.0-beta02

26 luglio 2023

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

Modifiche all'API

  • Sono state aggiunte API sperimentali per 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 non è configurato correttamente per il monitoraggio, come è stato recentemente corretto negli emulatori ARM64 delle API 26/28. (I0a328, b/282191686)
  • È stato aggiunto un dettaglio all'errore di reimpostazione della compilazione per suggerire l'aggiornamento dell'emulatore, poiché alcuni emulatori hanno risolto di recente questo problema. (I8c815, b/282191686)
  • Rendi androidx.test.uiautomator:uiautomator:2.2.0 una 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

  • Correzione degli avvisi che a volte vengono ignorati nell'output del benchmark in Studio e della soluzione alternativa per gli spazi iniziali dell'output del benchmark che non vengono visualizzati in Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
  • Commento corretto per FrameTimingMetric. La metrica secondaria è denominata 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 all'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)
  • Il profiling dei microbenchmark è stato spostato in una fase separata, quindi si verifica in sequenza dopo la misurazione, anziché sostituirla. 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

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

Nuove funzionalità

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

Modifiche alle API

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

Correzioni di bug

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

Versione 1.2.0-alpha14

3 maggio 2023

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

Correzioni di bug

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

Versione 1.2.0-alpha13

5 aprile 2023

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

Modifiche all'API

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

Versione 1.2.0-alpha12

22 marzo 2023

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

Nuove funzionalità

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

Modifiche 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, le connessioni UiAutomation 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 delle tracce di Perfetto. (I2659e, b/219851406)

Versione 1.2.0-alpha11

8 marzo 2023

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

Correzioni di bug

  • Sono stati corretti 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, Macrobenchmark non reinstalla più le applicazioni target per reimpostare lo stato di compilazione, grazie a una nuova funzionalità della piattaforma. In precedenza era necessario avere un dispositivo con root o gestire la rimozione di tutto lo stato dell'applicazione (ad es. l'accesso utente) prima di ogni esecuzione del benchmark. (I9b08c, b/249143766)

Correzioni di bug

  • 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 assicurarsi che venga acquisito 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

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

Correzioni di bug

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

Versione 1.2.0-alpha08

7 dicembre 2022

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

Modifiche alle API

  • Sono state aggiunte nuove API sperimentali PerfettoTrace.record {} e PerfettoTraceRule per acquisire tracce Perfetto (note anche come tracce di sistema) nell'ambito di un test, al fine di ispezionare il comportamento e le prestazioni del test. (I3ba16)
  • BaselineProfileRule ora accetta un predicato di filtro anziché un elenco di prefissi dei pacchetti. In questo modo, il test ha il pieno controllo sul filtro. (I93240)
  • Aggiungi un'API sperimentale BaselineProfileRule.collectStableBaselineProfile che attende 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 dei profili di riferimento utilizzando BaselineProfileRule. (I7b59f, b/260318655)

Correzioni di bug

  • Migliora la sicurezza della scrittura dell'output dei file, il che dovrebbe impedire la mancata scrittura / aggiunta silenziosa dei file di output, in particolare nell'API 21/22. (If8c44, b/227510293)
  • Correggi l'output della traccia simpleperf per creare e posizionare il file correttamente. In generale, questo dovrebbe risolvere anche i problemi relativi al recupero non riuscito di un file da parte di Gradle. (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 di profileinstaller (1.2.1) per misurare i profili di riferimento sulle API da 31 a 33, anziché indicare che non è supportata. (Ia517f, b/253519888)
  • 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 effettui il check-in delle regole del profilo 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 di trasmissione mancante nel manifest di ProfileInstaller, che non è stato ancora rilasciato. (I5c728, b/258619948) Per risolvere il problema descritto in profileinstaller:1.3.0-alpha02, aggiungi quanto segue ad AndroidManifest.xml della tua applicazione (non del benchmark):

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

Versione 1.2.0-alpha07

9 novembre 2022

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

Modifiche all'API

  • Aggiunge l'API PowerMetric per la misurazione di energia e potenza nei macrobenchmark. (Ife601, b/220183779)
  • È stato corretto il problema MacrobenchmarkScope.dropShaderCache() relativo all'eliminazione della cache degli shader. In questo modo, vengono rimossi circa 20 ms di rumore dai benchmark di StartupMode.COLD, poiché gli shader vengono ora cancellati in modo coerente a ogni iterazione. In precedenza, la compilazione di Partial che utilizzava le iterazioni di riscaldamento registrava numeri erroneamente elevati, poiché la memorizzazione nella cache degli shader era più probabile che si verificasse durante il riscaldamento. Questa correzione richiede un dispositivo con root o l'utilizzo di profileinstaller:1.3.0-alpha02 nell'app di destinazione. Per le modifiche all'API della libreria ProfileInstaller, consulta la pagina ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • È stato aggiunto TraceSectionMode("label", Mode.Sum), che consente di misurare il tempo totale trascorso in più sezioni di traccia con la stessa etichetta. Ad esempio, TraceSectionMetric("inflate", Mode.Sum) registrerà una 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

  • Sicurezza migliorata di tutti i comandi della shell interna mediante la convalida di tutti gli output/errori. (I5984d, b/255402908, b/253094958)
  • Specifica il dispositivo nel comando adb pull del profilo di riferimento, in modo che il comando pull possa essere semplicemente copiato se sono connessi più dispositivi (fino a un emulatore) (I6ac6c, b/223359380)
  • Aggiungi un errore se l'apk di test del benchmark macro non è configurato come autostrumentazione. Questo errore impedisce il macrobenchmarking all'interno del processo dell'app target. Durante 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 terminava il processo target dopo setupBlock. Ora l'interazione di setupBlock con l'app non lascerà in esecuzione il processo dell'app e non verrà generata una misurazione dell'avvio a freddo non valida. (I8ebb7)

Versione 1.2.0-alpha06

24 ottobre 2022

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

Modifiche all'API

  • BaselineProfileRule non richiede più il root su Android 13 (API 33) e non è più sperimentale. (Ie0a7d, b/250083467, b/253094958)
    • Questa modifica 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 nell'API 33 e versioni successive. (I40743, b/236109374)

Versione 1.2.0-alpha05

5 ottobre 2022

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

Correzioni di bug

  • Correzione della suddivisione dei frame nello strumento di visualizzazione delle tracce di sistema di Studio per le tracce acquisite del benchmark (I3f3ae, b/239677443)
  • Correggi FrameTimingMetric per indicare FrameOverrun come che richiede l'API 31 anziché 29 (I716dd, b/220702554)
  • Imposta l'iterazione in BaselineProfileRule e lancia un messaggio chiaro se il pacchetto di destinazione non è installato (è già stato fatto per MacrobenchmarkRule). (Ic09a3, b/227991471)

Versione 1.2.0-alpha04

21 settembre 2022

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

Nuove funzionalità

  • Aggiunta del supporto dell'argomento di misurazione dryRunMode.enable al macrobenchmark (già disponibile in micro) per uno sviluppo locale più rapido e la convalida dell'automazione delle app (ad es. in presubmit). 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 Gradle:

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

    In build.gradle:

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

Correzioni di bug

  • È stato corretto StartupTimingMetric in modo che non sia più necessario lanciare le attività misurate tramite MacrobenchmarkScope.startActivityAndWait(). Ciò significa che la metrica può rilevare i lanci, ad esempio da notifiche, Context.startActivity(), navigazione in-app basata sull'attività o comandi shell. (Ia2de6, b/245414235)
  • È 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

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

Nuove funzionalità

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

Correzioni di bug

  • È stato aggiunto il fallback Leanback per startActivityAndWait. (01ed77, b/242899915)

Versione 1.2.0-alpha02

24 agosto 2022

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

Modifiche alle API

  • Valore predefinito am force stop per MacrobenchmarkScope.killProcess(), anche se il dispositivo è rootato, tranne durante la generazione del profilo di baseline. Questo valore può essere sostituito con un argomento booleano facoltativo. (02cce9, b/241214097)

Correzioni di bug

  • Supporta la generazione del profilo di riferimento per le app di sistema. (I900b8, b/241214097)
  • Supporto del controllo delle metriche di alimentazione ODPM sui dispositivi non rooted. (a38c78, b/229623230)

Versione 1.2.0-alpha01

27 luglio 2022

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

Nuove funzionalità

  • Nuovo componente tracing-perfetto-common che consente agli strumenti di attivare il monitoraggio dell'SDK Perfetto in un'app che lo espone (I2cc7f)
  • È stato aggiunto l'argomento di strumentazione androidx.benchmark.enabledRules per filtrare le esecuzioni del macrobenchmark solo sui benchmark o solo sulla generazione del profilo di riferimento. Passa 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 macrobenchmark:

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

    In alternativa, dalla riga di comando Gradle:

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

Modifiche all'API

  • È stato aggiunto un nuovo PowerMetric per 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 il ripristino e la compilazione del profilo. (Ibbcf8, b/230453509)
  • È stato aggiunto un nuovo parametro a BaselineProfileRule#collectBaselineProfile per filtrare il file di output in base ai nomi dei pacchetti (If7338, b/220146561)
  • Consente allo sviluppatore di scaricare il dispositivo per misurare il consumo eccessivo di energia. (I6a6cb)
  • È stata aggiunta la possibilità di svuotare la cache degli shader in MacrobenchmarkScope. (I32122)
  • Consente allo sviluppatore di configurare la visualizzazione del tipo di metrica e dei dettagli delle categorie di sottosistema desiderate. (I810c9)
  • In precedenza, nel benchmark veniva generato un UnsupportedOperationException se il benchmark veniva eseguito su un dispositivo non supportato. Ora l'UEO si verifica solo se la metrica viene utilizzata sul dispositivo non supportato (ad es. PowerMetric.configure). (I5cf20, b/227229375)
  • Sono stati aggiunti TotalPowerMetric e TotalEnergyMetric per misurare la potenza e l'energia totali in ogni categoria di sistema nei macrobenchmark. (I3b26b, b/224557371)

Correzioni di bug

  • È stato risolto un problema per cui i metodi compilati non venivano reimpostati correttamente tra ogni macrobenchmark nelle build non rooted. Purtroppo, questo richiede la reinstallazione dell'apk a ogni iterazione, il che comporta l'eliminazione dei dati dell'applicazione per ogni macrobenchmark. (I31c74, b/230665435)
  • Correzione dell'arresto anomalo della registrazione delle tracce nell'API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
  • Revisione del rilevamento del completamento dell'avvio dell'attività per correggere l'eccezione "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)

Versione 1.1.1

Versione 1.1.1

9 novembre 2022

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

Correzioni di bug

  • Corregge i problemi android.system.ErrnoException: open failed: EACCES che si verificano su alcuni dispositivi Android 11 (API 30) e versioni successive. Questa è una selezione di una correzione da 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 reinstallate completamente tra un benchmark e l'altro per garantire misurazioni accurate.

Correzioni di bug/modifiche al comportamento

  • È stato risolto un problema per cui la compilazione delle app non veniva reimpostata correttamente tra i macrobenchmark e non veniva reimpostata su build non rooted. In questo modo vengono corretti molti casi in cui l'esecuzione di più test comporta un effetto ridotto o nullo di CompilationMode sulle misurazioni. Per risolvere il problema, l'app di destinazione ora reinstalla completamente ogni metodo di test, il che comporta l'eliminazione dei dati dell'applicazione tra ogni macrobenchmark. (I31c74, b/230665435)

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

    Ad esempio, nel file build.gradle del macrobenchmark:

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

    In alternativa, dalla riga di comando Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • È stato possibile condividere un modulo tra macrobenchmark e un profilo di riferimento che genera test aggiungendo l'argomento di strumentazione androidx.benchmark.enabledRules. Passa "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 macrobenchmark:

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

    In alternativa, dalla riga di comando Gradle:

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

Versione 1.1.0-rc01

20 aprile 2022

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

Correzioni di bug

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

Versione 1.1.0-beta06

6 aprile 2022

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

Correzioni di bug

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

  • Uccidere il pacchetto dopo aver ignorato l'installazione del profilo quando si utilizza CompilationMode.None. (aosp/1991373)
  • Risolto un problema per cui Macrobenchmarks non è in grado di raccogliere le metriche di avvio quando si utilizzaStartupMode.COLD. (aosp/2012227 b/218668335)

Versione 1.1.0-beta04

23 febbraio 2022

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

Correzioni di bug

  • Correzione delle metriche mancanti su Android 10 eNoSuchElementException causata dalla mancata acquisizione corretta dei nomi dei processi nelle tracce. (Ib4c17, b/218668335)

  • Utilizza PowerManager per il rilevamento del throttling termico su Q (API 29) e versioni successive. In questo modo, si riduce notevolmente la frequenza dei falsi positivi nel rilevamento del throttling termico (riprova del benchmark dopo 90 secondi di tempo di attesa) e si velocizzano notevolmente i benchmark nelle build dell'utente. Fornisce inoltre il rilevamento della limitazione anche quando gli orologi sono bloccati (se sono bloccati troppo in alto per l'ambiente fisico del dispositivo). (I9c027, b/217497678, b/131755853)

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

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

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

  • Salta l'installazione del profilo quando utilizzi Compilation.None(). Inoltre, segnala gli avvisi quando l'app utilizza una versione precedente 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 all'API

  • È stato aggiunto AudioUnderrunMetric alla libreria macrobenchmark con il flag sperimentale per consentire il rilevamento di sottocarichi audio (Ib5972)
  • BaselineProfileRule non accetta più un blocco setup perché funzionava come 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 un problema per cui le tracce del profiler di microbench non venivano aggiornate nelle esecuzioni successive quando erano collegate all'output di Studio (I5ae4d, b/214917025)
  • Impedire i comandi shell di compilazione nell'API 23 (Ice380)
  • 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 campionamento dello stack / tracciamento dei metodi dei microbenchmark ora sono collegati nell'output di Studio, come per gli altri output di profilazione, e non eliminano la metrica di allocazione. (Idcb65, b/214440748, b/214253245)
  • Ora BaselineProfileRule stampa il comando adb pull in logcat e nell'output di Studio per estrarre il file di testo BaselineProfile generato. (f08811)

Versione 1.1.0-beta01

12 gennaio 2022

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

Correzioni di bug

  • Corregge l'ignoranza dell'attivazione dell'argomento del profiler. (I37373, b/210619998)
  • L'elemento CompliationModes deprecato (I98186, b/213467659) è stato rimosso
  • È stato modificato l'argomento del profilo di riferimento di CompilationMode.Partial in enum per maggiore chiarezza. (Id67ea)

Versione 1.1.0-alpha13

15 dicembre 2021

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

Modifiche all'API

  • Aggiungi il monitoraggio del sistema a basso overhead all'output del microbenchmark su Android Q (API 29 e versioni successive). Tieni presente che al momento non viene acquisito il monitoraggio personalizzato (tramite le API Jetpack android.os.Trace o androidx.tracing) per evitare di influire sui risultati. Questo monitoraggio dovrebbe essere utile per diagnosticare l'instabilità, in particolare da fonti esterne al benchmark. (I298be, b/205636583, b/145598917)
  • Chiarisci CompilationModes in tre classi: Completo, Nessuno, Parziale. In precedenza, i nomi non erano coerenti e si basavano su parametri di compilazione (che ora trattiamo come dettagli di implementazione) e funzionalità. In questo modo, i compromessi, le potenziali combinazioni e il comportamento nelle varie versioni della piattaforma sono più chiari. (I3d7bf, b/207132597)
  • La configurazione e la misurazione ora sono sempre in coppia, in ordine. Ora puoi eseguire query sul nome e sull'iterazione del pacchetto (anche se l'iterazione potrebbe essere null in determinati scenari di riscaldamento). (Id3b68, b/208357448, b/208369635)

Correzioni di bug

  • CompilationMode.Speed trattato erroneamente 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 assicurarti che l'interfaccia utente possa essere testata. È necessario disattivare la schermata di blocco. (Ibfa28, b/180963442)
  • Sono stati corretti più arresti anomali nella modalità di profilazione di StackSampling su emulatori e dispositivi non rooted (Icdbda, b/202719335)
  • È stato rimosso il tempo di attesa di 0,5 secondi alla fine di ogni iterazione.Se con questa modifica noti che mancano delle metriche, segnala un bug. (Iff6aa)
  • Riduci le probabilità di perdita di dati e riduci il sovraccarico di memoria dovuto al monitoraggio (Id2544, b/199324831, b/204448861)
  • Riduci le dimensioni della traccia di circa il 40% passando al formato di archiviazione pianificata compatto. (Id5fb6, b/199324831)
  • Implementazioni aggiornate delle metriche di avvio in modo che terminino sempre al termine 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

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 di 23. (If2655)
  • Aggiunge un nuovo BaselineProfileRule sperimentale in grado di generare profili di riferimento per il percorso dell'utente critico dell'app. Documentazione dettagliata a seguire. (Ibbefa, b/203692160)
  • Viene rimossa la variante dell'interfaccia measureRepeated, aggiunta per i chiamanti Java, in quanto causava ambiguità nel completamento/nella risoluzione del metodo. Gli utenti Java dovranno nuovamente restituire Unit.Instance da measureRepeated. Se questo è un inconveniente, segnala un bug, lo riprenderemo in una versione futura. (Ifb23e, b/204331495)

Versione 1.1.0-alpha10

27 ottobre 2021

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

Modifiche alle API

  • Esegui il backport di StartupTimingMetric per ripristinare il funzionamento dell'API 23. Questa nuova implementazione gestisce anche reportFullyDrawn() in modo che attenda 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.measureRepeated alternativa che utilizzi un Consumer<MacrobenchmarkScope> per l'utilizzo idiomatico nel linguaggio Java. (If74ab, b/184546459)

Correzioni di bug

  • Correzione per le tracce che non iniziano abbastanza presto e per i dati delle metriche mancanti. In questo modo dovrebbero essere corrette le eccezioni "Impossibile leggere le metriche durante il benchmark" causate dalla libreria stessa. (I6dfcb, b/193827052, b/200302931)
  • FrameNegativeSlack è stato rinominato in FrameOverrun per chiarirne il significato: quanto il frame ha superato il budget di tempo. (I6c2aa, b/203008701)

Versione 1.1.0-alpha09

13 ottobre 2021

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

Correzioni di bug

  • Supporto dell'eliminazione della cache delle pagine del kernel senza root su API 31/S+, che aumenterà la precisione dei lanci di StartupMode.COLD. (Iecfdb, b/200160030)

Versione 1.1.0-alpha08

29 settembre 2021

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

Modifiche all'API

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

Versione 1.1.0-alpha07

1° settembre 2021

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

Modifiche all'API

  • È stato aumentato il livello API minimo a 21 per riflettere il livello API più basso previsto da supportare in futuro. L'API minima attualmente supportata continua a essere trasmessa tramite RequiredApi() ed è attualmente 29 (I440d6, b/183129298)

Correzioni di bug

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

Versione 1.1.0-alpha06

18 agosto 2021

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

Modifiche alle API

  • È stato aggiunto l'argomento di strumenti androidx.benchmark.iterations per consentire l'override manuale del conteggio delle iterazioni durante il test/il profiling locale. (6188be, b/194137879)

Correzioni di bug

  • È stato eseguito il passaggio a Simpleperf come profiler di campionamento predefinito nell'API 29 e versioni successive. (Ic4b34, b/158303822)

Problemi noti

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

Versione 1.1.0-alpha05

4 agosto 2021

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

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

Modifiche all'API

  • È stato sostituito startActivityAndWait per invocare il lancio tramite am start, il che riduce il tempo di ogni iterazione di misurazione di circa 5 secondi, a costo di non supportare più i parcelable intent. (I5a6f5, b/192009149

Correzioni di bug

  • Riduci l'aggressività del rilevamento della limitazione termica e calcola nuovamente il valore di riferimento se le limitazioni vengono rilevate di frequente. (I7327b)
  • Corregge il funzionamento di FrameTimingMetric su Android S beta (Ib60cc, b/193260119)
  • Utilizza un EmptyActivity per rimuovere l'app target da uno stato di arresto forzato per supportare meglio CompilationMode.BaselineProfile. (Id7cac, b/192084204)
  • L'estensione del file di traccia è stata modificata in .perfetto-trace per renderla conforme allo standard della piattaforma. (I4c236, b/174663039)
  • Ora StartupTimingMetric genera la metrica "fullyDrawnMs" per misurare il tempo necessario per il completamento del rendering dell'applicazione. Per definire questa metrica per la tua app, chiama Activity.reportFullyDrawn quando i contenuti iniziali sono pronti, ad esempio quando gli elementi dell'elenco iniziale vengono caricati dal database o dalla rete. (metodo reportFullyDrawn disponibile senza controlli della versione di compilazione su ComponentActivity). Tieni presente che il test deve essere eseguito per un periodo di tempo sufficiente a acquisire la metrica (startActivityAndWait non attende reportFullyDrawn). (If1141, b/179176560)
  • Riduzione del costo dell'aggiunta dei metadati dell'interfaccia utente alle tracce di oltre 50 ms (Ic8390, b/193923003)
  • È stata aumentata notevolmente la frequenza di polling quando si interrompe il monitoraggio, il che può ridurre, ad esempio, il tempo di esecuzione del benchmark di avvio di oltre il 30% (Idfbc1, b/193723768)

Versione 1.1.0-alpha03

16 giugno 2021

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 per utilizzare un'API non ritirata con una sintassi che supporta anche gli utenti di .gradle.kts.

    Ad es.

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

Versione 1.1.0-alpha02

18 maggio 2021

La versione 1.1.0-alpha02 di Benchmark introduce un componente importante per i benchmark: Macrobenchmark. Oltre a consentire di misurare i loop della CPU, macrobenchmark consente di misurare le interazioni dell'intera app, come l'avvio e lo scorrimento, e di acquisire le tracce. Per ulteriori informazioni, consulta la documentazione della libreria.

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

Nuove funzionalità

Sono stati aggiunti elementi artefatti dei benchmark macro (androidx.benchmark:benchmark-macro-junit4 e androidx.benchmark:benchmark-macro)

  • Acquisisci le metriche sul rendimento all'avvio, sullo scorrimento/sull'animazione della tua app, localmente o in CI
  • Acquisisci e ispeziona le tracce da Android Studio

Correzioni di bug

  • Sfrutta la soluzione alternativa per il problema delle autorizzazioni della shell con la directory di output su Android 12 (nota: potrebbe essere necessario aggiornare il plug-in Android Gradle alla versione 7.0.0 canary e Android Studio ad Arctic Fox (2020.3.1) per continuare a acquisire i file di output sui dispositivi interessati). (Icb039)
  • Supporto della memorizzazione nella cache della configurazione in BenchmarkPlugin (6be1c1, b/159804788)
  • 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 per la lettura della frequenza massima del dispositivo. (I55c7a)

Versione 1.1.0-alpha01

10 giugno 2020

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

Nuove funzionalità della versione 1.1

  • Metrica di allocazione: 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 nelle versioni precedenti della piattaforma (140 ns in O sono diventati 8 ns in M, misurati su Nexus 5X con clock bloccati). Questa metrica viene visualizzata nell'output della console di Android Studio e nel
  • Supporto della profilazione - Ora puoi acquisire i dati di profilazione per un'esecuzione di benchmark, in modo da esaminare i motivi per cui il codice potrebbe essere eseguito lentamente. Il benchmark supporta l'acquisizione del monitoraggio dei metodi o del campionamento dei metodi dall'ART. Questi file possono essere esaminati con il Profiler in Android Studio utilizzando File > Apri.
  • Il plug-in Gradle Benchmark ora fornisce i valori predefiniti per una configurazione più semplice:
    • testBuildType è impostato per il rilascio per impostazione predefinita, per evitare di utilizzare dipendenze con copertura del codice integrata. Il buildType release viene configurato anche come buildType predefinito, il che consente ad Android Studio di selezionare automaticamente la variante di build corretta quando apri un progetto per la prima volta. (b/138808399)
    • signingConfig.debug viene utilizzato come configurazione di firma predefinita (b/153583269)

** Correzioni di bug **

  • Riduzione significativa dell'overhead della transizione di riscaldamento, in cui la prima misurazione per ogni benchmark era artificialmente più alta di altre. Questo problema era più evidente 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

  • Le invocazioni di Benchmark da riga di comando e Gradle non stampano direttamente i risultati. Per risolvere il problema, puoi eseguire il report in Studio o analizzare il file di output JSON per trovare i risultati.
  • I report di benchmark non riescono a 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

Benchmark Version 1.0.0

20 novembre 2019

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 e androidx.benchmark:benchmark-junit4:1.0.0 vengono rilasciate 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 di benchmark ti consente di scrivere benchmark delle prestazioni del codice dell'app e ottenere risultati rapidamente.

Evita problemi di configurazione di build e runtime e stabilizza le prestazioni del dispositivo per garantire misurazioni accurate e coerenti. Esegui i benchmark direttamente in Android Studio o nell'integrazione continua per osservare il rendimento del codice nel tempo ed evitare le regressioni.

Le funzionalità principali includono:

  • Stabilizzazione orologio
  • Assegnazione automatica della priorità ai thread
  • Supporto per i test delle prestazioni dell'UI, ad esempio nell'esempio RecyclerView
  • Warmup e looping JIT-aware
  • Output 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à

  • È stato aggiunto il monitoraggio systrace ai benchmark

Correzioni di bug

  • È stato risolto il problema di instabilità delle metriche per cui il codice JIT non terminava prima del riscaldamento a causa della riassegnazione della priorità (b/140773023)
  • Directory di output JSON unificata nei plug-in Android Gradle 3.5 e 3.6

Versione 1.0.0-beta01

9 ottobre 2019

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

Nuove funzionalità

  • Esegui la raccolta dei rifiuti prima di ogni riscaldamento per ridurre la pressione sulla memoria da un benchmark all'altro (b/140895105)

Correzioni di bug

  • È stata aggiunta la dipendenza androidx.annotation:android-experimental-lint, in modo che il codice Java generi correttamente errori di lint quando non viene utilizzata l'API sperimentale, in modo simile a quanto fornito dall'annotazione sperimentale di Kotlin per gli utenti di Kotlin.
  • Ora 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 del clock non rilevata in JSON per stampare correttamente -1 (b/141945670).

Versione 1.0.0-alpha06

18 settembre 2019

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

Nuove funzionalità

  • È stato aggiunto un controllo per l'utilizzo errato del vecchio pacchetto per il programma di test, che ora fornisce un messaggio di errore più utile

Modifiche alle API

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

Versione 1.0.0-alpha05

5 settembre 2019

androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 e androidx.benchmark:benchmark-junit4:1.0.0-alpha05 vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.

Modifiche all'API

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

Correzioni di bug

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

Versione 1.0.0-alpha04

7 agosto 2019

androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 e androidx.benchmark:benchmark-junit4:1.0.0-alpha04 vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.

È stata inoltre aggiunta nuova documentazione su come utilizzare la libreria 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 disattiva automaticamente la copertura dei test e imposta AndroidBenchmarkRunner per impostazione predefinita (b/138374050)
    • È stato aggiunto il supporto per la nuova copia dei dati basata su AGP, quando vengono eseguiti i benchmark e quando si utilizza AGP 3.6 e versioni successive
  • Aggiunta di elementi al formato JSON
    • Tempo di esecuzione totale del test di benchmark in output (b/133147694)
    • I benchmark @Parameterized che utilizzano una stringa di nome (ad es. @Parameters(name = "size={0},depth={1}")) ora generano i nomi e i valori dei parametri per benchmark nell'output JSON (b/132578772)
  • Modalità 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. Ad esempio, può essere utile per eseguire rapidamente i benchmark in presubmit per verificare che non siano danneggiati.

Modifiche all'API

  • La struttura del modulo è cambiata, dividendo la libreria (b/138451391)
    • benchmark:benchmark-junit4 contiene classi con dipendenza JUnit: AndroidBenchmarkRunner 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 le API JUnit4 in futuro
  • Gli avvisi di configurazione ora vengono trattati come errori e fanno arrestare in modo anomalo il test (b/137653596)
    • Questo viene fatto per incoraggiare ulteriormente misurazioni accurate, 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 archiviazione 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 aver contribuito con i miglioramenti all'output JSON e alla correzione dei problemi di spegnimento dello schermo.

Versione 1.0.0-alpha03

2 luglio 2019

androidx.benchmark:benchmark:1.0.0-alpha03 e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Mostra la durata della sospensione a causa del throttling termico per ogni benchmark nel report JSON completo

Correzioni di bug

  • Non è più necessario applicare il plug-in Gradle dopo i plug-in Android e il blocco Android
  • Aggiunta del supporto per i report di benchmark sui dispositivi Android 10 che utilizzano lo spazio archiviazione limitato

Versione 1.0.0-alpha02

6 giugno 2019

androidx.benchmark:1.0.0-alpha02 e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.

Tieni presente che trattiamo lo schema JSON come un'API. Abbiamo intenzione di seguire gli stessi vincoli di stabilità delle altre API: stabile (con eccezioni molto rare) una volta in versione beta e corretta nella release finale, con solo aggiunte nelle release minori e modifiche/rimozioni nelle release principali.

Modifiche all'API

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

    • È stata riorganizzata la struttura dell'oggetto risultato per supportare in futuro gruppi di metriche aggiuntivi (b/132713021)
    • Nell'oggetto di primo livello sono state aggiunte informazioni contestuali relative alla prova, ad esempio informazioni sul dispositivo e sulla build e se gli orologi sono bloccati (b/132711920)
    • I nomi delle metriche relative al tempo ora contengono "ns" (b/132714527)
    • Statistiche aggiuntive aggiunte per metrica registrata (massima, media, minima) e stata rimossa la statistica di riepilogo "nano" semplificata (b/132713851)
  • Output XML rimosso (b/132714414)

  • Il rilevamento della limitazione termica è stato rimosso dall'API BenchmarkState.reportData (b/132887006)

Correzioni di bug

  • È stato corretto il problema relativo al mancato blocco del pulsante ./gradlew lockClocks su alcuni dispositivi con sistemi operativi recenti (b/133424037)
  • Rilevamento della limitazione disabilitato per l'emulatore (b/132880807)

Versione 1.0.0-alpha01

7 maggio 2019

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