Benchmark

Misura con precisione le prestazioni del codice in Android Studio.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Versione alpha
11 dicembre 2024 1.3.3 - - 1.4.0-alpha06

Dichiarazione delle dipendenze

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

Macrobenchmark

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

Alla moda

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

Kotlin

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

Microbenchmark

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

Alla moda

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

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

Kotlin

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

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

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

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

Alla moda

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

Kotlin

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

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

Alla moda

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Creare un nuovo problema

Per ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.

Versione 1.4

Versione 1.4.0-alpha06

11 dicembre 2024

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

Modifiche all'API

  • È stato rimosso l'utilizzo di @Language("sql") in PerfettoTraceProcessor.Session.query(), poiché l'evidenziazione/l'analisi di Studio non funziona. (Idc2fa, b/377733398)

Correzioni di bug

  • Questa libreria ora utilizza le annotazioni di nullità JSpecify, che sono di tipo di utilizzo. Gli sviluppatori Kotlin devono utilizzare i seguenti argomenti del compilatore per applicare l'utilizzo corretto: -Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode (I46810, b/326456246)
  • È stato corretto ArtMetric per segnalare il caricamento della classe (non l'inizializzazione) e sono stati migliorati i documenti per chiarire il comportamento di runtime. (I9915c)
  • Su Android Multiuser, esegui i comandi come utente root solo sui dispositivi con root. (I88b44)

Versione 1.4.0-alpha05

13 novembre 2024

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

Correzioni di bug

  • È stato risolto un problema nell'API 34 e versioni successive per cui CompilationMode.None() aveva un rendimento incoerente non rappresentativo del rendimento iniziale peggiore. In questo modo si aggira una modifica della piattaforma che consente allo stato di compilazione di ART verify di compilare parzialmente le app (influendo solo sul caricamento delle classi) poco dopo il primo avvio. (Ie48d0)
  • È stato risolto un problema per cui potevano essere acquisite tracce (soprattutto brevi) che non registravano la misurazione delle metriche Macrobenchmark integrate, a causa del troncamento del nome del processo all'interno della traccia Perfetto. Ora macrobenchmark risolve il problema cercando il nome del pacchetto troncato in tutte le query predefinite, oltre al nome del pacchetto previsto. Tieni presente che le implementazioni personalizzate di TraceMetric o altri chiamanti diretti di PerfettoSession.query possono implementare lo stesso comportamento sostituendo process.name LIKE "$packageName" in una query Perfetto con (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"). (I5bf01, b/377565760)

Versione 1.4.0-alpha04

30 ottobre 2024

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

Nuove funzionalità

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

Correzioni di bug

  • Ora isProfileable viene sempre sostituito nelle build di benchmark e anche isDebuggable viene sempre sostituito 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, viene generato un errore se vengono osservate misurazioni non valide (ad es. instructions/cpucycles==0) (I8c503)

Versione 1.4.0-alpha03

16 ottobre 2024

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

Modifiche all'API

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

Correzioni di bug

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

Versione 1.4.0-alpha02

2 ottobre 2024

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

Modifiche all'API

  • Le attività Gradle lockClocks 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 riesce mai a trovare 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 da Gradle Plugin del profilo di riferimento. (I2f678, b/285187547)

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

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

e poi configura Firebase Test Lab con:

  firebaseTestLab {

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

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

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

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

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

Versione 1.4.0-alpha01

18 settembre 2024

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

Nuova funzionalità: App Startup Insights

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

Per attivare un benchmark all'avvio:

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

L'esecuzione del benchmark all'avvio analizzerà la traccia per cercare problemi comuni e li stamperà dopo le metriche nell'output del test di Studio nella scheda del benchmark, ad esempio:

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

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

Nuove funzionalità

  • È stata aggiunta la proprietà gradle androidx.baselineprofile.suppressWarnings per eliminare tutti gli avvisi relativi al profilo di riferimento. (314153a)
  • Le metriche di Microbench ora vengono visualizzate nelle tracce di Perfetto come contatori. (3214854)
  • Aggiungi script sperimentali per disattivare il JIT (richiede il riavvio di root / runtime) e reimpostare lo stato di test/prestazioni del dispositivo. Al momento non vengono pubblicati come attività Gradle. (7c3732b)
  • È stato aggiunto l'argomento benchmark per saltare i test durante l'esecuzione sull'emulatore. Quando la compilazione automaticGenerationDuring è attivata, i benchmark attiveranno anche la generazione del profilo di riferimento. L'operazione non andrà a buon fine se vengono utilizzati emulatori. Con il nuovo 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 all'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 di benchmark se esistono già. A causa di un bug, anche se i tipi di build nonMinified e benchmark esistevano, sarebbero stati ricreati. (e75f0a5)
  • Ignora i segmenti non terminanti dai risultati di TraceSectionMetric. (a927d20)
  • Controllo dell'emulatore migliorato per prendere in considerazione il prefisso sdk_. (1587de8)
  • Tratta i pacchetti non in esecuzione come cancellati in FrameTimingGfxInfoMetric. (35cc79c)
  • Correggere androidx.benchmark.cpuEventCounter che genera valori corrotti per gli eventi non di istruzione. (06edd59)
  • Correggi resumeTiming/runWithTimingDisabled in modo da rispettare l'ordine di priorità delle metriche e riduci in modo significativo l'impatto della sospensione/ripresa delle metriche con priorità inferiore sui risultati delle metriche con priorità più elevata. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di 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 corretto il problema per cui Firebase Test Lab (FTL) non riusciva a estrarre i file dei risultati del profilo di riferimento o del benchmark macro dal plug-in Gradle del profilo di riferimento. (I2f678, b/285187547)

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

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

e poi configura Firebase Test Lab con:

  firebaseTestLab {

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

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

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

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

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

Versione 1.3.1

18 settembre 2024

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

Correzioni di bug

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

Versione 1.3.0

21 agosto 2024

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

Modifiche ai microbenchmark dalla versione 1.2.0

  • Il monitoraggio dei metodi è attivo per impostazione predefinita nei microbenchmark quando viene eseguito sulla maggior parte dei dispositivi.
    • Il monitoraggio dei metodi viene eseguito come fase separata, dopo le misurazioni, in modo da poter generare misurazioni e tracce dei metodi accurate da un'unica esecuzione del benchmark.
    • Il monitoraggio dei metodi su alcune versioni del sistema operativo Android e di ART influisce sulle fasi di misurazione successive. In queste versioni, il monitoraggio dei metodi è disattivato per impostazione predefinita e viene stampato un avviso nell'output di Studio
  • Benchmark del thread principale e ANR
    • È stato aggiunto measureRepeatedOnMainThread per i benchmark dei thread dell'interfaccia utente (ad es. quelli che interagiscono con le UI di Compose/View) per evitare ANR quando vengono eseguiti per molti secondi.
    • Le tracce dei metodi vengono ignorate se si prevede che supereranno la scadenza per l'evitare ANR. Imposta androidx.benchmark.profiling.skipWhenDurationRisksAnr su false per disattivare questo comportamento (non consigliato per le esecuzioni di CI, poiché gli ANR possono causare problemi nelle esecuzioni di CI lunghe).
  • 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
    • È stata aggiunta l'API BlackHole.consume() sperimentale per impedire l'eliminazione del codice inutilizzato (If6812, b/286091643)
  • Metriche
    • Funzionalità sperimentale del contatore di eventi della CPU (metriche da perf_event_open, che richiede il privilegio di accesso come utente root sulla maggior parte delle versioni della piattaforma), accesso 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.
    • È 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)
  • Esegui il dump corretto del profilo ART durante le singole iterazioni di warmUp quando il processo viene interrotto 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 il messaggio di errore di trasmissione dell'shader
    • Aggiungi due argomenti di strumenti per eseguire l'override del comportamento di abbandono degli shader per risolvere i problemi di arresto anomalo durante il benchmarking delle app senza ProfileInstaller 1.3:
      • androidx.benchmark.dropShaders.enable=true/false : può essere utilizzato per saltare tutti i rilasci di shader (inclusi quelli eseguiti nei lanci 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 le configurazioni configurate in modo errato potrebbero causare l'errore delle classi Metric integrate. (Idfd3d, b/309841164, b/304038384)
  • Annullare i job dexopt in background prima di eseguire un benchmark macro per ridurre le interferenze. (I989ed)
  • Ora Macrobenchmark attende 1 secondo affinché l'applicazione di destinazione svuoti un profilo ART (in precedenza attendeva 500 ms). (I85a50, b/316082056)
  • Revisione di TraceSectionMetric
    • Nota: le modifiche TraceSectionMetric riportate di seguito possono influire sugli output nell'utilizzo del CI e potrebbero creare discontinuità o interrompere l'analisi sintattica
    • La somma è ora il valore predefinito, poiché la maggior parte dell'utilizzo di questa metrica riguarda eventi ripetuti e la prima escluderebbe i dati in questi casi.
    • È stata modificata per essere più personalizzabile e sono disponibili più modalità
    • I nomi delle modalità 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: sono stati aggiunti 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, quelli che Log.w() e non riescono a registrare le metriche di avvio sono quelli in cui mancano gli eventi non relativi al frame, vengono lanciate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sui tempi del 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 wakelock. (Icfe44, b/286551983)
    • È stato aumentato il timeout di inizio dell'acquisizione delle tracce per evitare arresti anomali all'avvio del monitoraggio su dispositivi più lenti (I98841, b/329145808)
    • Sono state aggiunte le API pubbliche PerfettoTraceProcessor.Session.queryMetrics con varianti JSON, textproto e proto binary (non decodificate). Ti consentono di eseguire query sulle metriche integrate 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. Supportato solo su API 33 e versioni successive. (Ie6e41, b/310760059)
  • Output JSON
    • Sono state aggiunte informazioni aggiuntive nel contesto del benchmark nell'output JSON:
      • context.artMainlineVersion - versione intera del modulo Art mainline (se presente sul dispositivo, -1 in caso contrario)
      • context.build.id - Deve essere uguale a android.os.Build.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

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

Correzioni di bug

  • Correzione di androidx.benchmark.cpuEventCounter che genera valori corrotti per gli eventi non di istruzione (I7386a, b/286306579)
  • Correggi resumeTiming/runWithTimingDisabled in modo da rispettare l'ordine di priorità delle metriche e riduci in modo significativo l'impatto della sospensione/ripresa della metrica con priorità inferiore sui risultati delle metriche con priorità più elevata. Ad esempio, se utilizzi i contatori delle prestazioni della CPU tramite l'argomento di misurazione cpuEventCounter.enable, il tempo in nanosecondi non viene più ridotto in modo significativo quando si verificano interruzioni/ripresi. (I39c2e, b/286306579, b/307445225)
  • Possibilità ridotta che il campionamento dello stack causi il raggiungimento del timeout rigido del thread principale di measureRepeatedOnMainThread spostando la conversione del campionamento dello stack dal thread principale. (I487a8, b/342237318)
  • È stato rimosso il riepilogo manuale dell'accesso alle nuove API di piattaforma, poiché avviene automaticamente tramite la definizione del modello API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). I clienti che non utilizzano AGP sono invitati a eseguire l'aggiornamento alla versione 8.1 o successive di D8. Consulta questo articolo per ulteriori dettagli. (I9496c, b/345472586)
  • È stato aggiunto il controllo della versione agp per inviare il nome del pacchetto come argomento instr. Prima di AGP 8.4.0, il nome del pacchetto dell'app di destinazione non poteva essere inviato all'app di misurazione tramite gli argomenti di misurazione. (0c72a3f)

Versione 1.3.0-beta02

10 luglio 2024

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

Correzioni di bug

  • Gestisci in modo corretto il codice di uscita 2 all'avvio di Perfetto per registrare un avviso, ma procedi.

Versione 1.3.0-beta01

12 giugno 2024

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

Modifiche all'API

  • Per coerenza, MethodTracing.affectsMeasurementOnThisDevice è stato rinominato in AFFECTS_MEASUREMENT_ON_THIS_DEVICE. (I1bdfa)
  • È stata aggiunta l'API sperimentale BlackHole.consume() per impedire l'eliminazione del codice inutilizzato nei microbenchmark. (If6812, b/286091643)
  • Ora il microbenchmark viene lanciato correttamente per impedire che il monitoraggio dei metodi interferisca con le misurazioni. Questo si verifica su alcuni dispositivi quando il monitoraggio dei metodi è forzato (tramite parametri di strumentazione o MicrobenchmarkConfig) e se viene tentata una misurazione dopo una traccia del metodo. I dispositivi interessati eseguono l'API 26-30 o determinate versioni del modulo principale ART interessate da questa interferenza e possono essere rilevati in fase di 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 pre-release (anche nelle build di release) (Ie5020)
  • Corregge StackSampling in modo che rispetti androidx.benchmark.profiling.sampleDurationSeconds (Ib1d53)
  • Modifica la dipendenza macro->comune in api(), in modo che sia più facile da utilizzare, 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 suggerimenti di debug aggiuntivi per eliminare il messaggio di errore di trasmissione dell'shader. (I5efa6, b/325502725)

Versione 1.3.0-alpha04

1° maggio 2024

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

Modifiche all'API

  • È stata aggiunta la variante sperimentale MacrobenchmarkRule#measureRepeated che accetta 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 chiarezza (I5b82f)
  • Sono stati aggiunti PowerMetric.deviceBatteryHasMinimumCharge() e PowerMetric.deviceSupportsPowerEnergy() per consentire la modifica o l'omissione dei benchmark in base alla capacità di misurazione della potenza del dispositivo. (I6a591, b/322121218)

Correzioni di bug

  • È stato aggiunto il confronto con il profilo di riferimento precedente (I824c8, b/269484510)
  • È stato aggiunto un DSL per disattivare gli avvisi (Ic4deb, b/331237001)
  • È stata modificata l'eccezione nel log di informazioni quando le varianti di benchmark sono disattivate (I8a517, b/332772491)
  • Semplifica l'acquisizione delle tracce dei metodi per un macrobenchmark che ha come ambito la durata dell'measureBlock() effettivo. In precedenza, veniva avviato al momento del lancio del processo target e supportava solo gli avviamenti a freddo (Iee85a, b/300651094)
  • Evitare arresti anomali quando il processore di tracce perfetto è lento ad avviarsi (I98841, b/329145808)

Versione 1.3.0-alpha03

17 aprile 2024

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

Nuove funzionalità

  • Aggiunge API PerfettoTraceProcessor.Session.queryMetrics pubbliche con varianti JSON, textproto e proto binary (non decodificate). Ti consentono di eseguire query sulle metriche integrate in TraceProcessor (I54d7f, b/304038382)
  • È stato aggiunto profilerOutput all'output JSON per semplificare gli strumenti per le tracce di profilazione (ad es. perfetto, tracce dei metodi). (I05ddd, b/332604449)
  • È stato aggiunto il tag potenza al benchmark Perfetto Config. Vengono acquisiti, ad esempio, i tracepoint wakelock. (Icfe44, b/286551983)
  • È stato aggiunto l'argomento inst androidx.benchmark.profiling.skipWhenDurationRisksAnr, che può essere impostato su false per evitare di saltare le tracce del metodo quando la durata prevista potrebbe causare un ANR. Si consiglia vivamente di evitarlo nelle esecuzioni CI.
  • È stato aggiunto l'argomento inst sperimentale androidx.benchmark.profiling.perfCompare.enable. Imposta questo parametro su true per eseguire il confronto dei tempi tra le fasi di misurazione e di profilazione. Utile, ad esempio, per valutare il sovraccarico del monitoraggio dei metodi. (I61fb4, b/329146942)

Modifiche all'API

  • È stata modificata la classe TraceSectionMetric.Mode in una classe sigillata per consentire l'espansione futura senza interrompere le istruzioni when esaustive (I71f7b)
  • Sono stati aggiunti TraceSectionMetric.Mode.Average e .Count e gli argomenti sono stati riordinati in modo che l'argomento più comune (mode) fosse all'inizio dell'elenco degli argomenti, riducendo la necessità di specificare i nomi dei parametri. (Ibf0b0, b/315830077, b/322167531)
  • Metric.getResult è stato rinominato in getMeasurements per corrispondere al tipo di reso (I42595)

Correzioni di bug

  • Correzione per garantire che i benchmark utilizzino i profili di riferimento generati quando automaticGenerationDuringBuild è disattivato (Ic144f, b/333024280)
  • Correggi le sostituzioni delle proprietà del plug-in BaselineProfile per abilitare la generazione del profilo di riferimento e il benchmarking durante la personalizzazione di un tipo di 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. Supportato solo su API 33 e versioni successive. (Ie6e41, b/310760059)
  • È stato aggiunto un avviso quando Android Test Orchestrator viene utilizzato nei moduli di benchmark, in quanto ciò comporterà la sovrascrittura ripetuta dei file JSON di output per modulo. (Ia1af6, b/286899049)
  • Forzare l'utilizzo di "," (virgola) come separatore di migliaia per garantire la coerenza dell'output di Studio, ignorando le impostazioni internazionali del dispositivo (I3e921, b/313496656)
  • TraceSectionMetric ora supporta i segmenti creati utilizzando Trace.{begin|end}AsyncSection. (I91b32, b/300434906)
  • Sono state aggiunte etichette log.w / eccezione a tutti gli errori di rilevamento all'avvio. Ciò non cambia il comportamento attuale (quindi alcuni errori vengono generati e altri non riescono a rilevare l'avvio in silenzio), ma lo rende più comprensibile. In genere, quelli che Log.w() e non riescono a registrare le metriche di avvio sono quelli in cui mancano gli eventi non frame, vengono lanciate eccezioni quando viene rilevato l'avvio, ad eccezione delle informazioni sui tempi dei frame (dalle sezioni UI/RT). (Id240f, b/329145809)
  • Annullare i job dexopt in background prima di eseguire un benchmark macro per ridurre le interferenze. (I989ed)
  • È stata aggiunta la misurazione frameCount 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)

Versione 1.3.0-alpha02

20 marzo 2024

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

Nuove funzionalità

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

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

Correzioni di bug

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

Versione 1.3.0-alpha01

21 febbraio 2024

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

Modifiche all'API

  • I parametri booleani MicrobenchmarkConfig sono stati rinominati per evitare l'uso della parola "deve" non necessaria (Ia8f00, b/303387299)
  • È stato aggiunto BenchmarkRule.measureRepeatedOnMainThread in modo che i benchmark del thread principale (ad es. quelli che toccano le UI di Views o Compose) possano evitare di attivare ANR, in particolare durante suite di grandi dimensioni in CI. (I5c86d)
  • È stato aggiunto FrameTimingGfxInfoMetric, un'implementazione alternativa sperimentale 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 riferimento quando il dispositivo gestito specificato non esiste (Idea2b, b/313803289)
  • Correzione per l'inclusione dei profili di riferimento della libreria in AAR prima di AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • È stato corretto l'URL di output del profilo di riferimento e di avvio alla fine dell'attività di generazione (I802e5, b/313976958)
  • Sono stati modificati i timeout delle origini dati per tentare di correggere il problema java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Aggiungi due argomenti di strumenti per eseguire l'override del comportamento di abbandono degli shader per risolvere i problemi di arresto anomalo durante il benchmarking delle app senza ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : può essere utilizzato per saltare tutti i rilasci di shader (inclusi quelli eseguiti nei lanci 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)
  • Salta la tracciatura dei metodi nel thread dell'interfaccia utente se si prevede che l'operazione richieda più di qualche secondo e le tracce del metodo di pulizia quando viene generato un errore. (I6e768)
  • Viene lanciato quando i nomi file sono più lunghi di 200 caratteri per evitare arresti anomali poco chiari durante la scrittura o la post-elaborazione dei file. (I4a5ab)
  • È stato risolto il problema per cui i fotogrammi non terminati all'inizio e alla fine della traccia potevano essere accoppiati, il che generava un report errato come un singolo fotogramma estremamente lungo. (I39353, b/322232828)
  • Utilizza --skip verification sull'API 30 e versioni successive quando reinstalli un pacchetto sull'API 30-33 per cancellare i profili ART nelle build utente. In questo modo puoi bypassare gli avvisi di Play Protect che causano errori su alcune classi di dispositivi. (Ic9e36)
  • Usa am force-stop per terminare le app quando non si tratta di un'app di sistema come UI di sistema o Avvio applicazioni. (I5e028)
  • Macrobenchmark ora attende 1 second affinché l'applicazione di destinazione svuoti un profilo ART (in precedenza 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 terminare le app quando non si tratta di un'app di sistema come UI di sistema o Avvio applicazioni. In questo modo vengono corretti i crash dei benchmark StartupMode.COLD dovuti al messaggio "Il pacchetto $package non deve essere in esecuzione prima dell'avvio a freddo" a causa del mancato completamento dell'uccisione del processo. (I5e028)

Versione 1.2.3

24 gennaio 2024

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

Correzioni di bug

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

Versione 1.2.2

1° dicembre 2023

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

Profili di riferimento

Versione 1.2.1

15 novembre 2023

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

Nuove funzionalità

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

Versione 1.2.0

18 ottobre 2023

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

Modifiche importanti dalla versione 1.1.0

Profili di riferimento

  • Il nuovo plug-in Gradle per i profili di riferimento automatizza l'acquisizione e l'inclusione dei profili di riferimento nel flusso di lavoro di test e compilazione.
  • BaselineProfileRule.collect ora stabile, una versione semplificata e ottimizzata della precedente API BaselineProfileRule.collectBaselineProfile sperimentale
    • Basta specificare packageName e gestire 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 del profilo di riferimento corretta su Android U e versioni successive (Id1392, b/277645214)

Macrobenchmark

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

    • Supporto per l'argomento di misurazione androidx.benchmark.dryRunMode.enable (già disponibile in microbenchmark) per esecuzioni di convalida più rapide (ad es. durante la creazione del benchmark o in presubmit)
    • Supporto per androidx.benchmark.profiling.mode=StackSampling 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 attivare l'acquisizione / il ripristino del profilo e lo svuotamento della cache degli shader.
  • Nuove API Metric sperimentali

    • È stato aggiunto TraceSectionMetric sperimentale, che consente di estrarre semplici tempistiche dai blocchi trace("") {} nella tua app oppure TraceMetric per sfruttare la piena 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 i crash durante l'installazione o l'estrazione dei profili da un'app installata da più APK (ad esempio da un app bundle).
    • È stato corretto il problema relativo all'FrameTimingMetric che ignorava i frame con ID frame incoerenti (in genere, i frame durante le increspature nell'API 31 e versioni successive) (I747d2, b/279088460)
    • Sono stati corretti gli errori di analisi delle tracce di dimensioni superiori a 64 MB (Ief831, b/269949822)
    • Sono stati chiariti gli errori quando l'immagine del sistema operativo del dispositivo (in particolare dell'emulatore) non è configurata correttamente per il monitoraggio o la compilazione
    • Saltare il controllo del livello della batteria per i dispositivi senza batteria (micro e macro)
    • Output dei file migliorato, con errori più chiari per le directory di output non valide e valori predefiniti più sicuri
    • Maggiore stabilità di StartupMode.COLD grazie all'eliminazione costante della cache degli shader (esposta anche tramite MacrobenchmarkScope.dropShaderCache)
    • È stato corretto il fallback leanback per startActivityAndWait.

Microbenchmark

  • Funzionalità
    • Il profiling è stato spostato in una fase separata, dopo le altre metriche, in modo che un'esecuzione di test possa mostrare sia i tempi accurati che i risultati del profiling.
  • API sperimentali
    • È stata aggiunta l'API MicrobenchmarkConfig sperimentale per definire metriche personalizzate e configurare il monitoraggio e il profiling. Può essere utilizzato per acquisire tracce dei metodi o acquisire tracepoint (ma tieni presente l'overhead del monitoraggio).
    • Sono state aggiunte API sperimentali per il controllo di BenchmarkState separatamente da BenchmarkRule, senza JUnit
    • È stato aggiunto il record sperimentale PerfettoTrace per consentire l'acquisizione delle tracce di Perfetto, con configurazione personalizzata, separata dalle API di benchmark.
  • Correzioni
    • Sfrutta la soluzione alternativa per gli spazi iniziali mancanti nell'output del benchmark di Android Studio.
    • È stato risolto il problema per cui la stampa degli avvisi poteva non riuscire nell'output del benchmark di Android Studio.
    • È stato corretto l'arresto anomalo di SampledProfiling su Android 13 (API 33) e versioni successive.
    • Prestazioni notevolmente migliorate di dryRunMode grazie all'eliminazione di IsolationActivity e del monitoraggio di Perfetto (fino a 10 volte più veloce la modalità di prova secca sulle versioni precedenti del sistema operativo).

Versione 1.2.0-rc02

6 ottobre 2023

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

Correzioni di bug

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

Versione 1.2.0-rc01

20 settembre 2023

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

Correzioni di bug

  • Ora viene lanciata un'eccezione (con istruzioni per la correzione) quando il monitoraggio dell'SDK Perfetto non riesce a essere inizializzato in un benchmark. (I6c878, b/286228781)
  • Correzione dell'arresto anomalo OOM durante la conversione della traccia del metodo ART in formato perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) È stata chiarita l'etichetta del monitoraggio dei metodi quando è collegata all'output del test di Studio e sono stati corretti i nomi dei file di monitoraggio dei metodi in modo che siano univoci sul dispositivo/host, in modo che non vengano sovrascritti quando viene eseguito più di un benchmark. (I08e65, b/285912360)
  • Garantisce che il dispositivo sia attivo quando viene acquisito un profilo di riferimento. (I503fc)

Versione 1.2.0-beta05

30 agosto 2023

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

Nuove funzionalità

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

Versione 1.2.0-beta04

23 agosto 2023

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

Nuove funzionalità

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

Correzioni di bug

  • Correggi gli errori di scrittura / spostamento e recupero dei file (in particolare quelli dei test con parametri) sottoponendo a ulteriore sanificazione i nomi dei file di output, evitando "=" e ":" nei nomi dei file di output. (I759d8)

Versione 1.2.0-beta03

9 agosto 2023

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

Modifiche all'API

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

Correzioni di bug

  • L'argomento di misurazione fullTracing.enable è stato rinominato 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 la configurazione e le metriche personalizzate di microbench (ad es. profiler e tracing). (I86101, b/291820856)

Correzioni di bug

  • Segnala un errore in macrobench quando il sistema operativo non è configurato correttamente per il monitoraggio, come è stato recentemente corretto negli emulatori ARM64 delle API 26/28. (I0a328, b/282191686)
  • È stato aggiunto un dettaglio all'errore di reimpostazione della compilazione per suggerire l'aggiornamento dell'emulatore, poiché alcuni emulatori hanno risolto di recente questo problema. (I8c815, b/282191686)
  • Rendi androidx.test.uiautomator:uiautomator:2.2.0 una 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. Le sezioni di traccia MethodTracing sono ora incluse anche nella traccia Perfetto acquisita, se presente. (I9f657, b/285014599)
  • Aggiungi la misurazione del conteggio a TraceSectionMetric 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 all'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 monitoraggio Perfetto in dryRunMode per migliorare notevolmente le prestazioni, poiché rappresentavano la maggior parte del tempo di esecuzione. (Ie4f7d)
  • Supporto del campionamento dello stack delle chiamate nei macrobenchmark utilizzando gli argomenti di test di misurazione androidx.benchmark.profiling.mode=StackSampling 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 riferimento su Android U a causa dell'output diverso del comando pm dump-profiles. (Id1392, b/277645214)
  • Correggi lo script di blocco dell'orologio della GPU per confrontare correttamente le stringhe (I53e54, b/213935715)

Versione 1.2.0-alpha13

5 aprile 2023

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

Modifiche all'API

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

Versione 1.2.0-alpha12

22 marzo 2023

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

Nuove funzionalità

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

Modifiche all'API

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

Versione 1.2.0-alpha11

8 marzo 2023

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

Correzioni di bug

  • Sono stati corretti i crash in MacrobenchmarkRule e BaselineProfileRule durante la reinstallazione o l'estrazione dei profili da un app bundle con più APK. (I0d8c8, b/270587281)

Versione 1.2.0-alpha10

22 febbraio 2023

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

Nuove funzionalità

  • Su Android 14 e versioni successive, Macrobenchmark non reinstalla più le applicazioni target per reimpostare lo stato di compilazione, grazie a una nuova funzionalità della piattaforma. In precedenza era necessario avere un dispositivo con root o gestire la rimozione di tutto lo stato dell'applicazione (ad es. l'accesso utente) prima di ogni esecuzione del benchmark. (I9b08c, b/249143766)

Correzioni di bug

  • È stato corretto il problema per cui DryRunMode non si arrestava più in modo anomalo con un profilo vuoto a causa del salto della compilazione. Esegue invece una singola iterazione ed estrae il profilo per assicurarsi che venga acquisito qualcosa. (I2f05d, b/266403227)
  • Correzione dell'arresto anomalo di PowerMetric durante il controllo della presenza di powerstats nei vecchi livelli API. (5faaf9, b/268253898)

Versione 1.2.0-alpha09

11 gennaio 2023

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

Correzioni di bug

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

Versione 1.2.0-alpha08

7 dicembre 2022

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

Modifiche all'API

  • Sono state aggiunte nuove API sperimentali PerfettoTrace.record {} e PerfettoTraceRule per acquisire tracce Perfetto (note anche come tracce di sistema) nell'ambito di un test, al fine di esaminare il comportamento e il rendimento 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 sull'applicazione dei filtri. (I93240)
  • Aggiungi un'API sperimentale BaselineProfileRule.collectStableBaselineProfile che attende che un profilo di riferimento sia stabile per N iterazioni. (I923f3)
  • Aggiungi la possibilità di specificare un prefisso per il nome del file di output durante la generazione dei profili di riferimento utilizzando BaselineProfileRule. (I7b59f, b/260318655)

Correzioni di bug

  • Migliora la sicurezza della scrittura dell'output dei file, il che dovrebbe impedire la mancata scrittura / aggiunta silenziosa dei file di output, in particolare nell'API 21/22. (If8c44, b/227510293)
  • Correggi l'output della traccia simpleperf per creare e posizionare correttamente il file. In generale, questo dovrebbe risolvere anche i problemi relativi al recupero non riuscito di un file da parte di Gradle. (I12a1c, b/259424099)
  • Miglioramento del messaggio di errore di profileinstaller stampato quando il programma è troppo vecchio. Ora ti viene chiesto di aggiornare la versione di profileinstaller (1.2.1) per la misurazione dei profili di riferimento sulle API da 31 a 33, anziché dichiare che non è supportata. (Ia517f, b/253519888)
  • Correggere diversi errori di comando della shell nel messaggio di errore Stampa API richiesta <=23, inclusi errori di configurazione del file binario di acquisizione di perfetto ed errori di acquisizione della traccia (Ib6b87, b/258863685)
  • Ordina automaticamente le regole del profilo generate per ridurre al minimo il numero di modifiche man mano che cambiano nel tempo (quando effettui il check-in delle regole del profilo nel controllo del codice sorgente). (Ie2509)
  • È stato corretto un arresto anomalo nelle build non rooted precedenti ad Android 13 (API 33) con il messaggio Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183)

Problemi noti - MacrobenchmarkScope.dropShaderCache() potrebbe arrestarsi in modo anomalo a causa di un registry di trasmissione mancante nel manifest di ProfileInstaller, che non è stato ancora rilasciato. (I5c728, b/258619948) Per risolvere il problema descritto in profileinstaller:1.3.0-alpha02, aggiungi quanto segue ad AndroidManifest.xml della tua applicazione (non del benchmark):

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

Versione 1.2.0-alpha07

9 novembre 2022

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

Modifiche all'API

  • Aggiunge l'API PowerMetric per la misurazione di energia e potenza nei macrobenchmark. (Ife601, b/220183779)
  • È stato corretto il problema MacrobenchmarkScope.dropShaderCache() relativo all'eliminazione della cache degli shader. In questo modo, vengono rimossi circa 20 ms di rumore dai benchmark 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 in modo errato, 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 rimosso anche il requisito dell'API 29, poiché TraceSectionMetric funziona con androidx.tracing.Trace fino ai livelli API precedenti, con l'utilizzo di forceEnableAppTracing all'interno dell'app target. (Id7b68, b/231455742)

Correzioni di bug

  • Sicurezza migliorata di tutti i comandi della shell interna mediante la convalida di tutti gli output/errori. (I5984d, b/255402908, b/253094958)
  • Specifica il dispositivo nel comando adb pull del profilo di riferimento, in modo che il comando pull possa essere semplicemente copiato se sono connessi più dispositivi (fino a un emulatore) (I6ac6c, b/223359380)
  • Aggiungi un errore se l'apk di test del benchmark macro non è configurato come autostrumentazione. Questo errore impedisce il macrobenchmarking all'interno del processo dell'app target. Durante il processo, macrobench non è in grado di compilare/uccidere/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 corregge anche il modo in cui i profili di un'app vengono svuotati sul disco sui dispositivi non rooted, ma richiede l'aggiornamento della dipendenza di ProfileInstaller dell'app di destinazione.
    • Per utilizzare BaselineProfileRule 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. In questo modo, il profilo viene svuotato correttamente sul disco in modo da poter essere compilato/estratto.

Correzioni di bug

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

Versione 1.2.0-alpha05

5 ottobre 2022

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

Correzioni di bug

  • Correzione della suddivisione dei frame nello strumento di visualizzazione delle tracce di sistema di Studio per le tracce acquisite del benchmark (I3f3ae, b/239677443)
  • Correggi FrameTimingMetric nell'elenco 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). Questo sostituisce le iterazioni con 1, salta la compilazione, elimina tutti gli errori di configurazione e disattiva l'output del file JSON di misurazione. (Ib51b4, b/175149857)

    Nella riga di comando Gradle:

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

    In build.gradle:

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

Correzioni di bug

  • È stato corretto StartupTimingMetric in modo che non sia più necessario lanciare le attività misurate 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 un bug per cui startActivityAndWait non riusciva ad attendere il completamento del lancio su emulatori a causa del timeout, riducendo la severità del rilevamento dei frame. (Ibe2c6, b/244594339, b/228946895)

Versione 1.2.0-alpha03

7 settembre 2022

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

Nuove funzionalità

  • Sono state aggiunte API sperimentali per l'utilizzo indipendente di BenchmarkState, separatamente 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 all'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 per il controllo delle metriche relative all'alimentazione ODPM sui dispositivi non rooted. (a38c78, b/229623230)

Versione 1.2.0-alpha01

27 luglio 2022

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

Nuove funzionalità

  • Nuovo componente tracing-perfetto-common che consente agli strumenti di attivare il monitoraggio dell'SDK Perfetto in un'app che lo espone (I2cc7f)
  • È stato aggiunto l'argomento di strumentazione androidx.benchmark.enabledRules per consentire di filtrare le esecuzioni del macrobenchmark solo sui benchmark o solo sulla generazione del profilo di riferimento. Passa "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio quando generi 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 misurare le attività relative a energia e potenza nei benchmark. (I9f39b, b/220183779)
  • È stata aggiunta una nuova modalità di compilazione CompilationMode.Ignore per saltare il ripristino e la compilazione del profilo. (Ibbcf8, b/230453509)
  • È stato aggiunto un nuovo parametro a BaselineProfileRule#collectBaselineProfile per filtrare il file di output in base ai nomi dei pacchetti (If7338, b/220146561)
  • Consente allo sviluppatore di scaricare il dispositivo per misurare il consumo di energia. (I6a6cb)
  • È stata aggiunta la possibilità di svuotare la cache degli shader in MacrobenchmarkScope. (I32122)
  • Consente allo sviluppatore di configurare la visualizzazione del tipo di metrica e dei dettagli delle categorie di sottosistema desiderate. (I810c9)
  • In precedenza, nel benchmark veniva generato un UnsupportedOperationException se il benchmark veniva eseguito su un dispositivo non supportato. Ora l'UEO si verifica solo se la metrica viene utilizzata sul dispositivo non supportato (ad es. PowerMetric.configure). (I5cf20, b/227229375)
  • Sono stati aggiunti TotalPowerMetric 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 dell'app non veniva reimpostata correttamente tra i macrobenchmark e non veniva reimpostata affatto nelle build non rooted. In questo modo vengono corretti molti casi in cui l'esecuzione di più test comporta un effetto ridotto o nullo di CompilationMode sulle misurazioni. Per risolvere il problema, ora l'app di destinazione reinstalla completamente ogni metodo di test, il che comporta l'eliminazione dei dati dell'applicazione tra ogni macrobenchmark. (I31c74, b/230665435)

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

    Ad esempio, nel file build.gradle del macrobenchmark:

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

    In alternativa, dalla riga di comando Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • È stato reso possibile condividere un modulo tra i macrobenchmark e i test di generazione del profilo di riferimento aggiungendo l'argomento di strumentazione androidx.benchmark.enabledRules. Passa "Macrobenchmark" o "BaselineProfile" per eseguire un solo tipo di test, ad esempio quando 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

  • Correzione dell'arresto anomalo della registrazione delle tracce nell'API 21/22 (If7fd6, b/227509388)
  • Revisione del rilevamento del completamento dell'avvio dell'attività per correggere l'eccezione "Impossibile leggere le metriche" nei macrobenchmark di avvio. (Ia517c)
  • Correggere 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 dei nomi dei processi correttamente nelle tracce. (Ib4c17, b/218668335)

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

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

  • Supporto delle metriche dei sottoprocessi dell'interfaccia utente denominati nelle app multiprocesso (Ice6c0, b/215988434)

  • Filtra le regole del profilo di riferimento in base al target Android 9 (SDK 28). aosp/1980331 b/216508418

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

Versione 1.1.0-beta03

9 febbraio 2022

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

Modifiche 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 microbenchmark non venivano aggiornate nelle esecuzioni successive quando erano collegate all'output di Studio (I5ae4d, b/214917025)
  • Impedire i comandi shell di compilazione nell'API 23 (Ice380)
  • I campi FrameCpuTime e FrameUiTime sono stati rinominati in FrameDurationCpu e FrameDurationUi per chiarire che si tratta di durate e non di timestamp e per allinearli ai prefissi. (I0eba3, b/216337830)

Versione 1.1.0-beta02

26 gennaio 2022

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

Correzioni di bug

  • I risultati del profilo di campionamento dello stack / tracciamento dei metodi dei microbenchmark ora sono collegati nell'output di Studio, come per gli altri output di profilazione, e non eliminano la metrica di allocazione. (Idcb65, b/214440748, b/214253245)
  • Ora BaselineProfileRule stampa il comando adb pull in logcat e nell'output di Studio per estrarre il file di testo BaselineProfile generato. (f08811)

Versione 1.1.0-beta01

12 gennaio 2022

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

Correzioni di bug

  • Corregge l'ignoranza dell'attivazione dell'argomento del profiler. (I37373, b/210619998)
  • È stato rimosso CompliationModes (I98186, b/213467659) perché non più supportato
  • È stato modificato l'argomento del profilo di riferimento di CompilationMode.Partial in enum per maggiore chiarezza. (Id67ea)

Versione 1.1.0-alpha13

15 dicembre 2021

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

Modifiche all'API

  • Aggiungi il monitoraggio del sistema a basso overhead all'output del microbenchmark su Android Q (API 29 e versioni successive). Tieni presente che al momento non viene acquisito il monitoraggio personalizzato (tramite le API Jetpack android.os.Trace 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

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

Nuove funzionalità

  • Aggiungi la metrica sperimentale TraceSectionMetric per misurazioni del tempo basate su tracce personalizzate. (I99db1, b/204572664)

Correzioni di bug

  • Riattiva il dispositivo a ogni iterazione per assicurarti che l'interfaccia utente possa essere testata. È necessario disattivare la schermata di blocco. (Ibfa28, b/180963442)
  • Sono stati corretti più arresti anomali nella modalità di profilazione di StackSampling su emulatori e dispositivi non rooted (Icdbda, b/202719335)
  • È stato rimosso il tempo di attesa di 0,5 secondi alla fine di ogni iterazione.Se con questa modifica noti che mancano delle metriche, segnala un bug. (Iff6aa)
  • Riduci le probabilità di perdita di dati e riduci il sovraccarico di memoria dovuto al monitoraggio (Id2544, b/199324831, b/204448861)
  • Riduci le dimensioni delle tracce di circa il 40% passando al formato di archiviazione sched compatto. (Id5fb6, b/199324831)
  • Implementazioni aggiornate delle metriche di avvio in modo che terminino sempre al termine del thread di rendering. In questo modo, i dati saranno più coerenti tra le varie versioni della piattaforma e corrisponderanno più da vicino alle misurazioni in-app. (Ic6b55)

Versione 1.1.0-alpha11

3 novembre 2021

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

Modifiche all'API

  • Macrobenchmark ora ha un minSdkVersion 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

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

Modifiche all'API

  • Esegui il backport di StartupTimingMetric per ripristinare il funzionamento dell'API 23. Questa nuova implementazione gestisce meglio anche reportFullyDrawn() per attendere il rendering dei contenuti corrispondenti. (If3ac9, b/183129298)
  • È stato aggiunto JvmOverloads a più metodi MacrobenchmarkScope per gli utenti Java. (I644fe, b/184546459)
  • Fornisci una funzione MacrobenchmarkRule.measureRepeated alternativa che utilizzi un Consumer<MacrobenchmarkScope> per l'utilizzo idiomatico nel linguaggio Java. (If74ab, b/184546459)

Correzioni di bug

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

Versione 1.1.0-alpha09

13 ottobre 2021

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

Correzioni di bug

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

Versione 1.1.0-alpha08

29 settembre 2021

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

Modifiche all'API

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

Versione 1.1.0-alpha07

1° settembre 2021

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

Modifiche all'API

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

Correzioni di bug

  • Sono stati corretti i problemi relativi a ProfileInstaller per semplificare l'esecuzione di MacroBenchmark da parte delle app che utilizzano i profili di riferimento 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 all'API

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

Correzioni di bug

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

Problemi noti

  • CompilationMode.BaselineProfile è in fase di sviluppo. Per il momento, evita di utilizzarlo per determinare la qualità di un profilo.

Versione 1.1.0-alpha05

4 agosto 2021

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

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

Modifiche all'API

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

Correzioni di bug

  • Riduci l'aggressività del rilevamento della limitazione termica e calcola nuovamente il valore di riferimento se le limitazioni vengono rilevate di frequente. (I7327b)
  • Corregge FrameTimingMetric in modo che funzioni 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)
  • È stata modificata l'estensione del file di traccia in .perfetto-trace in modo che corrisponda 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)
  • Aumento drastico della frequenza di polling quando si interrompe il monitoraggio, che può ridurre, ad esempio, il tempo di esecuzione del benchmark di avvio di oltre il 30% (Idfbc1, b/193723768)

Versione 1.1.0-alpha03

16 giugno 2021

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

Nuove funzionalità

Correzioni di bug

  • Il codice Gradle di esempio per 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 tracce. Per saperne di più, consulta la documentazione della libreria.

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

Nuove funzionalità

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

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

Correzioni di bug

  • Sfrutta la soluzione alternativa per il problema delle autorizzazioni della shell con la directory di output su Android 12 (nota: potrebbe essere necessario aggiornare il plug-in Android Gradle alla versione 7.0.0 canary e Android Studio ad Arctic Fox (2020.3.1) per continuare a acquisire i file di output sui dispositivi interessati). (Icb039)
  • Supporto della memorizzazione nella cache della configurazione in BenchmarkPlugin (6be1c1, b/159804788)
  • Esportazione di file semplificata: attiva per impostazione predefinita in una directory che non richiede requestLegacyExternalStorage=true (8b5a4d, b/172376362)
  • Corregge la libreria che stampa avvisi logcat relativi alla mancata individuazione del thread JIT nelle versioni della piattaforma in cui non è presente. (I9cc63, b/161847393)
  • Correzione per la lettura della frequenza massima del dispositivo. (I55c7a)

Versione 1.1.0-alpha01

10 giugno 2020

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

Nuove funzionalità della versione 1.1

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

** Correzioni di bug **

  • È stato ridotto in modo significativo il sovraccarico della transizione di riscaldamento, in cui la prima misurazione per ogni benchmark era artificialmente più alta rispetto alle altre. Questo problema era più evidente nei benchmark molto piccoli (1 microsecondo o meno). (b/142058671)
  • È stato corretto l'errore InstrumentationResultParser stampato per ogni benchmark quando viene eseguito dalla riga di comando. (I64988, b/154248456)

Problemi noti

  • Le invocazioni di Benchmark tramite riga di comando e Gradle non stampano direttamente i risultati. Per risolvere il problema, puoi eseguire il report in Studio o analizzare il file di output JSON per trovare i risultati.
  • I report di benchmark non riescono a estrarre il report dai dispositivi su cui è installata un'app con un applicationId che termina con "android" o "download" (non è sensibile alle maiuscole). Gli utenti che riscontrano questo problema devono eseguire l'upgrade del plug-in Android per Gradle alla versione 4.2-alpha01 o successiva.

Versione 1.0.0

Benchmark Version 1.0.0

20 novembre 2019

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

Funzionalità principali della versione 1.0.0

La libreria Benchmark ti consente di scrivere benchmark sul rendimento del codice dell'app e ottenere risultati rapidamente.

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

Le funzionalità principali includono:

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

Versione 1.0.0-alpha06

18 settembre 2019

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

Nuove funzionalità

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

Modifiche all'API

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

Versione 1.0.0-alpha05

5 settembre 2019

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

Modifiche all'API

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

Correzioni di bug

  • Correzione dello script di blocco dell'orologio, che non andava a buon fine sui dispositivi in cui mancavano le utilità di shell cut 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 Benchmark senza Gradle, sia per l'utilizzo con diversi sistemi di compilazione (come Bazel o Buck) sia per l'esecuzione in CI. Per ulteriori informazioni, consulta Eseguire benchmark senza Gradle ed Eseguire benchmark nell'integrazione continua.

Nuove funzionalità

  • Plug-in Gradle
    • Ora disattiva automaticamente la copertura dei test e imposta AndroidBenchmarkRunner per impostazione predefinita (b/138374050)
    • È stato aggiunto il supporto per la nuova copia dei dati basata su AGP, quando vengono eseguiti i benchmark e quando si utilizza AGP 3.6 e versioni successive
  • Aggiunta di elementi al formato JSON
    • Tempo di esecuzione totale del test di benchmark in output (b/133147694)
    • I benchmark @Parameterized che utilizzano una stringa di nome (ad es. @Parameters(name = "size={0},depth={1}")) ora generano i nomi e i valori dei parametri per benchmark nell'output JSON (b/132578772)
  • Modalità di prova (b/138785848)
    • È stata aggiunta una modalità di "simulazione" per eseguire ogni ciclo di benchmark una sola volta, in modo da verificare la presenza di errori/arresti anomali senza acquisire misurazioni. Ad esempio, può essere utile per eseguire rapidamente i benchmark in presubmit per verificare che non siano danneggiati.

Modifiche all'API

  • La struttura del modulo è cambiata, dividendo la libreria (b/138451391)
    • benchmark:benchmark-junit4 contiene classi con dipendenza JUnit: AndroidBenchmarkRunner 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, in particolare nei casi di CI
    • Questi errori possono essere ridotti ad avvisi con un argomento di misurazione. Ad esempio: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Correzioni di bug

  • Gli errori durante la scrittura su archiviazione esterna sui dispositivi Q forniscono messaggi più descrittivi, con suggerimenti su come risolvere il problema
  • Gli schermi si accendono automaticamente durante le esecuzioni del benchmark, anziché non funzionare quando lo schermo è spento

Contributi esterni

  • Grazie a Sergey Zakharov per aver contribuito con i miglioramenti all'output JSON e alla correzione dei problemi di spegnimento dello schermo.

Versione 1.0.0-alpha03

2 luglio 2019

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

Nuove funzionalità

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

Correzioni di bug

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

Versione 1.0.0-alpha02

6 giugno 2019

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

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

Modifiche all'API

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

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

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

Correzioni di bug

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

Versione 1.0.0-alpha01

7 maggio 2019

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