Benchmark

Die Leistung Ihres Codes in Android Studio genau messen
Letzte Aktualisierung Stabile Release Releasekandidat Beta-Release Alpha-Release
7. Oktober 2026 1.5.0 - - 1.6.0-alpha01

Abhängigkeiten deklarieren

Wenn Sie eine Abhängigkeit von Benchmark hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Makro-Benchmark

Wenn Sie Macrobenchmark in Ihrem Projekt verwenden möchten, fügen Sie der Datei build.gradle für Ihr Macrobenchmark-Modul die folgenden Abhängigkeiten hinzu:

Groovy

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

Kotlin

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

Microbenchmark

Wenn Sie Microbenchmark in Ihrem Projekt verwenden möchten, fügen Sie die folgenden Abhängigkeiten der Datei build.gradle für Ihr Microbenchmark-Modul hinzu:

Groovy

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

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

Kotlin

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

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

Die Microbenchmark-Bibliothek bietet auch ein Gradle-Plug-in für Ihr Microbenchmark-Modul. Dieses Plug-in legt die Standardwerte für die Build-Konfiguration für das Modul fest, richtet eine Kopie der Benchmark-Ausgabe auf dem Host ein und stellt die Aufgabe ./gradlew lockClocks bereit.

Wenn Sie das Plug-in verwenden möchten, fügen Sie die folgende Zeile in den Block „plugins“ in der obersten build.gradle-Datei ein:

Groovy

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

Kotlin

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

Wenden Sie das Plug-in dann auf die build.gradle-Datei Ihres Benchmark-Moduls an.

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Feedback

Ihr Feedback hilft uns, Jetpack zu verbessern. Wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben, lassen Sie es uns wissen. Bevor Sie ein neues Problem erstellen, sollten Sie sich jedoch die bereits gemeldeten Probleme in dieser Bibliothek ansehen. Wenn Sie sich einer Problemmeldung anschließen möchten, klicken Sie auf den Button mit dem Stern.

Neues Problem melden

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 1.6

Version 1.6.0-alpha01

7. Oktober 2026

androidx.benchmark:benchmark-*:1.6.0-alpha01 ist veröffentlicht. Version 1.6.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Für die Benchmark-Aufgabe :lockClocks wird jetzt, sofern verfügbar, der Modus mit fester Leistung verwendet. Bisher war die Implementierung nur für Geräte mit Root-Zugriff möglich. Das bedeutet, dass Sie die Taktfrequenzen auf vielen weiteren physischen Geräten sperren können, um stabile Ergebnisse zu erhalten. Das ist besonders nützlich für stabile Mikrobenchmarks. Bitte melden Sie Probleme mit der thermischen Drosselung, wenn Sie das neue Verhalten beobachten. (I0d032)

API-Änderungen

  • MemoryProfilingConfig wurde zu ExperimentalConfig hinzugefügt, damit Macrobenchmark-Ausführungen das Perfetto-Heap-Profiling aktivieren können. (Ibc931)

Fehlerkorrekturen

  • Ein Fehler im Microbenchmark wurde behoben, bei dem die Erfassung von Methoden-Traces manchmal übervorsichtig übersprungen wurde, um ANRs zu vermeiden. (Ifc307)
  • Das Erfassen von Baseline-Profilen für Prozesse, die kein :<suffix>-Namensmuster verwenden, wurde korrigiert. (I512ab)
  • Profiler-Trace-Links werden jetzt in IDE-Zusammenfassungen in einem separaten Abschnitt „Profiling-Traces“ angezeigt. (Id639f)
  • Es wurde ein Fehler beim Leeren virtueller Dateien behoben, der zu Unable to flush profiles for <packagename> führte. (I48ccc)
  • Synchronisierung in Methoden-Traces korrigiert, die in System-Traces eingebettet sind. Ifd2e33 b/537688349
  • Baseline-Profil-Gradle-Plug-in: CollectBaselineProfileTask wurde verbessert, um das Suchen von test-result.pb-Dateien in Unterverzeichnissen zu unterstützen und die Kompatibilität mit der neuen integrierten Testplattform zu ermöglichen. Id9c488 b/543799367

Version 1.5

Version 1.5.0

9. September 2026

androidx.benchmark:benchmark-*:1.5.0 ist veröffentlicht. Version 1.5.0 enthält diese Commits.

Version 1.5.0-rc02

26. August 2026

androidx.benchmark:benchmark-*:1.5.0-rc02 ist veröffentlicht. Version 1.5.0-rc02 enthält diese Commits.

Version 1.5.0-rc01

12. August 2026

androidx.benchmark:benchmark-*:1.5.0-rc01 ist veröffentlicht. Version 1.5.0-rc01 enthält diese Commits.

Version 1.5.0-beta01

29. Juli 2026

androidx.benchmark:benchmark-*:1.5.0-beta01 ist veröffentlicht. Version 1.5.0-beta01 enthält diese Commits.

API-Änderungen

  • PerfettoCapture und PerfettoTraceRule können jetzt In-Process-Traces erfassen und für ein Zielpaket zusammenführen. (I9a00b, b/497959820)

Version 1.5.0-alpha07

1. Juli 2026

androidx.benchmark:benchmark-*:1.5.0-alpha07 ist veröffentlicht. Version 1.5.0-alpha07 enthält diese Commits.

API-Änderungen

  • Vereinfachte Perfetto-Trace-Erfassung auf dem Gerät. (I48810)
  • Die experimentellen TraceProcessor.runServer-Erweiterungs-APIs wurden von androidx.benchmark:benchmark-macro nach androidx.benchmark:benchmark-common und in das androidx.benchmark-Paket verschoben. Dadurch können sie in Zukunft in Mikro-Benchmarks verwendet werden. (Ie25bb, b/393640753)

Diverse Fehlerkorrekturen

  • Aktualisierung der Traceprocessor-Implementierung (sowie der nicht gebündelten Perfetto-Trace-Erfassung) auf Perfetto v56.0 (I8fb9d)
  • Setzen Sie androidx.benchmark.requireAot und androidx.benchmark.requireAot standardmäßig auf „true“. Diese sichereren Standardeinstellungen sorgen dafür, dass die Kompilierung vor dem Ausführen von Microbenchmarks erfolgt (standardmäßig mit dem Benchmark-Gradle-Plugin bei Verwendung von AGP 8.4 und höher aktiviert) und dass measureRepeated nicht im Hauptthread verwendet wird, wo es zu ANRs führen kann. (I1bc3c, b/379115078)
  • Das Zeitlimit für das Beenden von Perfetto wurde von 5 auf 30 Sekunden erhöht (nur für Perfetto-Sitzungen, die für Benchmarks erfasst wurden). Es wurde ein klareres Fehler-Logging für den Fall hinzugefügt, dass das Problem auftritt. (If188f, b/435589290)

Version 1.5.0-alpha06

6. Mai 2026

androidx.benchmark:benchmark-*:1.5.0-alpha06 ist veröffentlicht. Version 1.5.0-alpha06 enthält diese Commits.

Fehlerkorrekturen

  • Mehrere Nutzer-Umgebungen werden ordnungsgemäß verarbeitet, wenn Dateien aus dem Benchmark-Ausgabeverzeichnis in das zusätzliche Testausgabeverzeichnis verschoben werden. (I90da5, b/489358149)

Version 1.5.0-alpha05

25. März 2026

androidx.benchmark:benchmark-*:1.5.0-alpha05 ist veröffentlicht. Version 1.5.0-alpha05 enthält diese Commits.

Diverse Fehlerkorrekturen

  • ArtMetric wurde aktualisiert, um Pakete der obersten Ebene zu berücksichtigen. Das ist besonders wichtig, wenn AGP/R8 9.1 oder höher oder die globale Option -repackageclasses verwendet wird. Bisher konnte ArtMetric diese Klassenladevorgänge in seinen artClassLoad...-Messungen nicht erkennen. (If8a35, b/487402058)

Neue Funktionen - Es wurde ein neues Instrumentierungsargument androidx.benchmark.requireLockedClocks hinzugefügt, mit dem geprüft werden kann, ob die CPU-Taktfrequenzen für gerootete Geräte gesperrt sind. (Id82e8, b/468039042)

Version 1.5.0-alpha04

11. März 2026

androidx.benchmark:benchmark-*:1.5.0-alpha04 ist veröffentlicht. Version 1.5.0-alpha04 enthält diese Commits.

API-Änderungen

  • JvmOverloads wurde zu PowerMetric.Energy und PowerMetric.Power hinzugefügt (Iac0d0, b/481371562).

Diverse Fehlerkorrekturen

  • ArtMetric wurde aktualisiert, um Pakete der obersten Ebene zu berücksichtigen. Das ist besonders wichtig, wenn AGP/R8 9.1 oder höher oder die globale Option -repackageclasses verwendet wird. Bisher konnte ArtMetric diese Klassenlasten in seinen artClassLoad...-Messungen nicht erkennen. (I207ca, b/487402058)

Version 1.5.0-alpha03

11. Februar 2026

androidx.benchmark:benchmark-*:1.5.0-alpha03 ist veröffentlicht. Version 1.5.0-alpha03 enthält diese Commits.

  • Aktualisiert, um von UiAutomator 2.4 Beta abhängig zu sein.

Version 1.5.0-alpha02

28. Januar 2026

androidx.benchmark:benchmark-*:1.5.0-alpha02 ist veröffentlicht. Version 1.5.0-alpha02 enthält diese Commits.

Fehlerkorrekturen

  • Teilweise Unterstützung für die Generierung von Baseline-Profilen für Kotlin-Multiplattform-Module hinzugefügt. Normalerweise können Abhängigkeiten von Profilen mit der Gradle-Konfiguration baselineProfile im Block „dependencies“ definiert werden. Das funktioniert derzeit aber nicht für KMP-Module.

    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // THIS DOES NOT WORK
          // baselineProfile(":yourProducerProject")
        }
      }
    }
    
  • Stattdessen sollten Sie Ihre Abhängigkeiten mit der Erweiterung baselineProfile definieren. (Ie19c4)

    plugins {
        id("org.jetbrains.kotlin.multiplatform")
        id("com.android.kotlin.multiplatform.library")
        id("androidx.baselineprofile.consumer")
    }
    
    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // ...
        }
      }
    }
    // Define dependencies
    // This works !
    baselineProfile {
      variants {
        androidMain {
          from(project(":yourProducerProject"))
        }
      }
    }
    

Version 1.5.0-alpha01

17. Dezember 2025

androidx.benchmark:benchmark-*:1.5.0-alpha01 ist veröffentlicht. Version 1.5.0-alpha01 enthält diese Commits.

  • In Macrobenchmark 1.5 wird UiAutomator 2.4 verwendet, um die Interaktion mit der gemessenen Anwendung zu vereinfachen. Das MacrobenchmarkScope-Objekt wird jetzt von UiAutomatorTestScope abgeleitet. Dadurch können Sie die modernen UiAutomator-APIs wie onElement { ... }.click() verwenden.
  • Weitere Informationen zu UiAutomator 2.4 finden Sie in der Dokumentation.

Neue Funktionen

  • Das Baseline-Profil-Gradle-Plug-in erfordert in AGP 9.0 nicht mehr newDsl=false (Iaaac7, b/443311090)
  • Trace-Konfiguration erweitern, um die Kerngröße (z.B. klein/groß) in die vom Benchmark erfassten System-/Perfetto-Traces aufzunehmen. (I8e397, b/457469959)

API-Änderungen

  • (In UiAutomator) startActivity wurde in „wait for new window“ geändert. (I35da6, b/440021797)
  • BlackHole-APIs in androidx.benchmark stabilisieren. (I2b67e, b/451749438)
  • Fügen Sie @JvmOverloads für Convenience-Konstruktoren für PerfettoTraceRule hinzu. (I1510a, b/443763207)

Version 1.4

Version 1.4.1

10. September 2025

androidx.benchmark:benchmark-*:1.4.1 ist veröffentlicht. Version 1.4.1 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Fehler behoben: perfettoSdkTracing=true (z.B. beim Tracing von Compose in einem Microbenchmark) beendete den Zielprozess, wenn er bereits ausgeführt wurde und kein StartupMode angegeben war. (Ib2c1f)

Version 1.4.0

30. Juli 2025

androidx.benchmark:benchmark-*:1.4.0 ist veröffentlicht. Version 1.4.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.3.0

Microbenchmark

  • Die Gradle-Tasks lockClocks und unlockClocks wurden auf Benchmark-Projekte verschoben, anstatt auf der obersten Ebene zu sein, um die Gradle-Projektisolation zu berücksichtigen.
  • BenchmarkRule wurde so umgestaltet, dass es auf Koroutinen basiert und ein besseres yield()-Verhalten unterstützt. Dadurch sollte das Risiko von ANRs während Benchmark-Ausführungen, insbesondere bei langen CI-Ausführungen, erheblich reduziert werden. Hinweis: UI-Benchmarks sollten mit measureRepeatedOnMainThread ausgeführt werden.

Makro-Benchmark

  • Problemumgehung für API 34+ hinzugefügt, da CompilationMode.None() aufgrund der ART-Überprüfung, bei der Apps nach dem ersten Start teilweise kompiliert werden, eine inkonsistente Leistung aufweisen würde.
  • Experimentelle Funktion: Startup Insights kann bestimmte häufige Probleme in einem Startup-Macrobenchmark hervorheben, indem MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))) übergeben wird.
  • ArtMetric wurde hinzugefügt. Damit können Just-in-time-Kompilierung und nicht optimiertes Laden von Klassen erkannt werden. Beides ist nützlich, um Optimierungen von Baseline-Profilen zu validieren.

Baseline-Profile

  • BaselineProfileRule erfasst jetzt Profile für Apps mit mehreren Prozessen.

Weitere Änderungen

  • TraceProcessor wurde in eine eigene Bibliothek (androidx.benchmark:benchmark-traceprocessor) ausgelagert, damit sie auch außerhalb von Macrobenchmark-Messwerten verwendet werden kann. Sie kann auch auf der Desktop-JVM ausgeführt werden, indem Sie einen eigenen ServerLifecycleManager definieren.

Version 1.4.0-rc01

18. Juni 2025

androidx.benchmark:benchmark-*:1.4.0-rc01 ist veröffentlicht. Version 1.4.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde eine Problemumgehung für Laufzeit-Images hinzugefügt, die dazu führen, dass CompilationMode.None() die Worst-Case-Leistung nach der ersten Iteration nicht misst. Leider ist für diesen Workaround eine Verzögerung von 5 Sekunden erforderlich, um das Laufzeit-Image zu Beginn jeder Macrobenchmark-Suite absichtlich zu beschädigen (I4a4f1).

Version 1.4.0-beta02

4. Juni 2025

androidx.benchmark:benchmark-*:1.4.0-beta02 ist veröffentlicht. Version 1.4.0-beta02 enthält diese Commits.

API-Änderungen

  • Es wurde ein BaselineProfileConfig.Builder hinzugefügt, um den Aufruf von BaselineProfileRule.collectWithResults() für Java-Entwickler zu vereinfachen. (I94905)

Version 1.4.0-beta01

7. Mai 2025

androidx.benchmark:benchmark-*:1.4.0-beta01 ist veröffentlicht. Version 1.4.0-beta01 enthält diese Commits.

API-Änderungen

  • PerfettoTraceRule-Konstruktorvariante hinzugefügt, die einen PerfettoConfig akzeptiert (Ie53ba)

Fehlerkorrekturen

  • Das Linkformat für Startup-Insights TraceProcessor wurde aktualisiert, um das richtige Plug-in und ein deutlicheres Trennzeichen zu verwenden (: ist kürzer als %3A, beide werden unterstützt) (Ie18ef).
  • Verwende immer „Beenden erzwingen“, um Prozesse zu beenden, auch wenn du Root-Zugriff hast und System-Apps beendest. Behebt Ausnahmen des Formulars: Expected no stdout/stderr from killall ... No such process. (Idca2c)

Externer Beitrag

  • Proxy-Ausnahmebehandlung für TraceProcessorHttpServer hinzugefügt (I480f5)

Version 1.4.0-alpha11

09. April 2025

androidx.benchmark:benchmark-*:1.4.0-alpha11 ist veröffentlicht. Version 1.4.0-alpha11 enthält diese Commits.

API-Änderungen

  • Das Argument „timeout: Duration“ von TraceProcessor wurde in „timeoutMs: long“ geändert, um die Nutzerfreundlichkeit für Java-Aufrufer zu verbessern. (I9fbb5)
  • Markieren Sie den TraceProcessor-Konstruktor als intern. Anrufer sollten TraceProcessor.startServer oder TraceProcessor.runServer verwenden. (Ia8c5b)

Fehlerkorrekturen

  • Wenn Sie die Anwendung mit MacrobenchmarkScope.killProcess beenden, prüfen Sie die Ergebnisse des Kill-Befehls, um einen unbemerkten Fehler und einen Zeitüberschreitungsfehler zu vermeiden. (I84555)

Abhängigkeitsupdates

  • Diese Bibliothek ist jetzt auf das Sprachniveau von Kotlin 2.0 ausgerichtet und erfordert KGP 2.0.0 oder höher. (Idb6b5)

Version 1.4.0-alpha10

26. März 2025

androidx.benchmark:benchmark-*:1.4.0-alpha10 ist veröffentlicht. Version 1.4.0-alpha10 enthält diese Commits.

API-Änderungen

  • Das Standardzeitlimit für das Laden und Abfragen des TraceProcessor-Servers wurde auf 120 Sekunden erhöht (zuvor 60/30) und beide können mit einem Zeitlimitparameter konfiguriert werden. (Ifec87)

Diverse Fehlerkorrekturen

  • Es wurden einige Probleme behoben, die beim Benchmarking oder Erfassen von Profilen einer App ohne profileinstaller aufgetreten sind, und die enthaltene BroadcastReciever wurde hinzugefügt. Dies betrifft nur Läufe auf gerooteten Geräten. (Ied308)

Version 1.4.0-alpha09

12. März 2025

androidx.benchmark:benchmark-*:1.4.0-alpha09 ist veröffentlicht. Version 1.4.0-alpha09 enthält diese Commits.

API-Änderungen

  • TraceProcessor und die Session API mit schließbaren Handles wurden hinzugefügt, um die Verwendung mit benutzerdefinierten Lebenszyklen zu vereinfachen. Dies ist auch ein Schritt zur einfacheren Nutzung von Coroutine und Java API. Die Erweiterungsfunktionen für TraceProcessor.runServer {} sind jetzt als experimentell gekennzeichnet, da sie wahrscheinlich verschoben und in Zukunft nicht mehr als experimentell eingestuft werden. (I358b4)

Fehlerkorrekturen

  • Das Erfassen von Benchmark- und Baseline-Profilen funktioniert mit API 36 nicht mehr, da sich die pgrep-Toybox geändert hat und jetzt -a erforderlich ist, um die vollständige Befehlszeile auszugeben. (Idc991)
  • Die Standard-Tracing-Konfiguration wird gefiltert, um das Risiko von Datenverlusten in Traces auf neueren API-Ebenen zu verringern. (I54e8a)
  • Das experimentelle Instrumentierungsargument androidx.benchmark.killExistingPerfettoRecordings wurde hinzugefügt. Es kann auf false gesetzt werden, damit die vorhandene Erfassung von Perfetto-Traces fortgesetzt wird. Vorhandene Perfetto-Trace-Aufzeichnungen auf dem Gerät werden standardmäßig beendet, um Störungen zu vermeiden. (I02a3c)
  • Das JSON-Feld context.osCodenameAbbreviated ist jetzt REL für veröffentlichte Betriebssystemversionen mit API-Level 35 und höher, da nicht numerische Codenamen von der zugrunde liegenden Plattform nicht mehr unterstützt werden. (Ib17fd)
  • Ein Absturz in FrameTimingMetric wurde behoben, der bei resynchronisierten Frames auftrat. (I7c6f4, b/394610806)
  • Es wird nicht mehr davon ausgegangen, dass Choreographer#doFrame der oberste Stackframe im Hauptthread für FrameTimingQuery ist. (Iee0e0, b/340206285)

Version 1.4.0-alpha08

12. Februar 2025

androidx.benchmark:benchmark-*:1.4.0-alpha08 ist veröffentlicht. Version 1.4.0-alpha08 enthält diese Commits.

API-Änderungen

  • Die TraceProcessor.runSession()-Erweiterungs-APIs wurden als experimentell eingestuft, da sie wahrscheinlich irgendwann zu konkreten Konstruktoren auf Android werden. (Ib0528, b/393640753)
  • Die meisten Implementierungen von Startup Insights sind jetzt öffentlich/experimentell und werden in das TraceProcessor-Artefakt verschoben (siehe StartupInsights). (I0aa00)
  • BenchmarkRule.runWithTimingDisabled {} wird zugunsten von BenchmarkRule.runWithMeasurementDisabled {} eingestellt, da dies das Verhalten besser beschreibt – alle Messwerte werden pausiert. Außerdem wird die MicrobenchmarkScope-Basisklasse verfügbar gemacht, da die runWithMeasurementDisabled-Funktion nicht neu deklariert werden kann, um den Zugriff zu öffnen, da sie inline ist. (I9e23b, b/389149423, b/149979716)
  • Benchmark-Bibliotheken wurden zu Kotlin 2.0 migriert. (I9d1e0)
  • Das Instrumentierungsargument „androidx.benchmark.startupProfiles.enable“ wurde entfernt. Es ist nicht mehr nützlich, da es über das includeInStartupProfile-Argument in BaselineProfileRule.collect() gesteuert werden kann. (I39eb4)

Fehlerkorrekturen

  • Die Anzahl der internen Microbenchmark-Funktionen, die während der Profilerstellung aufgerufen werden, wurde reduziert, um z. B. Methoden-Traces klarer zu machen (Ifaed8).
  • Spekulativer Fix für Abstürze: „Failed to stop [ProcessPid(processName=perfetto, pid=...)]“ (Fehler beim Beenden von []). Benchmark protokolliert jetzt eine Meldung anstatt abzustürzen, wenn ein Perfetto-Hintergrundprozess vor dem Ausführen des Benchmarks nicht beendet werden kann. (I37d3e, b/323601788)
  • Fehler in IllegalStateExceptions mit dem Label „Expected pm dump-profiles stdout“ (Erwartete Standardausgabe von ) behoben, die durch eine zu strenge Prüfung des Ausgabeformats verursacht wurden. (I358dc)

Version 1.4.0-alpha07

29. Januar 2025

androidx.benchmark:benchmark-*:1.4.0-alpha07 ist veröffentlicht. Version 1.4.0-alpha07 enthält diese Commits.

Neue Funktionen

  • BaselineProfileRule führt jetzt eine collectWithResults(...) API ein, die eine Liste von Pfaden zu den berechneten Profilen enthält. (I056f8)
  • Das Instrumentierungsargument androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline wurde hinzugefügt. Es kann auf „false“ gesetzt werden, um das Verhalten von measureRepeatedOnMainThread beim Überschreiten der Frist für lokale Tests zu deaktivieren. Andernfalls wird dies nicht empfohlen, da dadurch die Wahrscheinlichkeit von ANRs während der Tests steigt. (Idbeec, b/353226476)

API-Änderungen

  • @JvmOverloads wurde dem MicrobenchmarkConfig-Konstruktor hinzugefügt. (I13fd3)
  • BenchmarkRule wurde so umgestaltet, dass es auf Koroutinen basiert und ein besseres yield()-Verhalten unterstützt. Bei dieser Umgestaltung wurden mehrere experimentelle BenchmarkState-APIs entfernt. Bei Bedarf werden sie jedoch ersetzt. Außerdem wurde runWithMeasurementDisabled hinzugefügt, um das Verhalten zu verdeutlichen (alle Messungen werden pausiert). In Zukunft wird runWithTimingDisabled eingestellt. (I19837, b/389149423, b/311242861)
  • PerfettoTraceProcessor wird in ein neues androidx.benchmark:benchmark-traceprocessor-Artefakt nach TraceProcessor verschoben und der Großteil der API wird als nicht experimentell gekennzeichnet. Alle benutzerdefinierten TraceMetric oder alles, was aus Traces liest, muss auf den neuen TraceProcessor-Import aktualisiert werden. Die neue TraceProcessor API funktioniert genau wie die alte, ist aber eine eigenständige Schnittstellenbibliothek (ähnlich der androidx.sqlite-Ebene von Room) mit einer Android-spezifischen Implementierung, die in Macrobenchmark integriert ist. Das neue Artefakt kann auch auf der JVM verwendet werden. Derzeit müssen Sie jedoch eine eigene Kopie der Binärdatei TraceProcessor starten und einen Port anbieten, über den eine Verbindung hergestellt werden kann. (I3a767, I62563, b/381134564)

Fehlerkorrekturen

  • Es wird eine deutlichere Fehlermeldung ausgegeben, wenn MacrobenchmarkScope.startActivityAndWait den Zielprozess nicht starten kann (möglicherweise aufgrund eines Absturzes im Zielprozess), anstelle der mehrdeutigen Meldung „Unable to confirm activity launch completion“ (I3539b).
  • Mehrere Syntaxfehler in Kotlin-Beispielen und Syntaxhervorhebungen in mehreren Java-/build.gradle-Beispielen wurden behoben. (Ib3808)
  • Die Dokumentation der Parameter ArtMetric und CaptureInfo wurde klarer formuliert. (I96e60)

Version 1.4.0-alpha06

11. Dezember 2024

androidx.benchmark:benchmark-*:1.4.0-alpha06 ist veröffentlicht. Version 1.4.0-alpha06 enthält diese Commits.

API-Änderungen

  • Die Verwendung von @Language("sql") in PerfettoTraceProcessor.Session.query() wurde entfernt, da die Hervorhebung/Analyse in Studio nicht funktioniert. (Idc2fa, b/377733398)

Fehlerkorrekturen

  • In dieser Bibliothek werden jetzt JSpecify-Annotationen für Nullsicherheit verwendet, die typbezogen sind. Kotlin-Entwickler sollten das folgende Compiler-Argument verwenden, um die korrekte Verwendung zu erzwingen: -Xjspecify-annotations=strict (dies ist die Standardeinstellung ab Version 2.1.0 des Kotlin-Compilers). (I46810, b/326456246)
  • ArtMetric wurde korrigiert, um das Laden der Klasse (nicht die Initialisierung) zu melden. Außerdem wurde die Dokumentation verbessert, um das Laufzeitverhalten zu verdeutlichen. (I9915c)
  • Führe unter Android Multiuser Befehle als Root nur auf gerooteten Geräten aus. (I88b44)

Version 1.4.0-alpha05

13. November 2024

androidx.benchmark:benchmark-*:1.4.0-alpha05 ist veröffentlicht. Version 1.4.0-alpha05 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Es wurde ein Problem mit API 34 und höher behoben, bei dem die Leistung von CompilationMode.None() inkonsistent war und nicht der anfänglichen Leistung im ungünstigsten Fall entsprach. Dies ist eine Problemumgehung für eine Plattformänderung, die es dem Kompilierungsstatus verify von ART ermöglicht, Apps kurz nach dem ersten Start teilweise zu kompilieren (nur das Laden von Klassen ist betroffen). (Ie48d0)
  • Es wurde ein Problem behoben, bei dem (insbesondere kurze) Traces erfasst werden konnten, in denen keine Messungen aus integrierten Macrobenchmark-Messwerten gemeldet wurden, da der Prozessname im Perfetto-Trace abgeschnitten wurde. Macrobenchmark umgeht dieses Problem jetzt, indem zusätzlich zum erwarteten Paketnamen in allen integrierten Abfragen nach dem gekürzten Paketnamen gesucht wird. Benutzerdefinierte TraceMetric-Implementierungen oder andere direkte Aufrufer von PerfettoSession.query können dieses Verhalten implementieren, indem sie process.name LIKE "$packageName" in einer Perfetto-Abfrage in (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))") ändern. (I5bf01, b/377565760)

Version 1.4.0-alpha04

30. Oktober 2024

androidx.benchmark:benchmark-*:1.4.0-alpha04 ist veröffentlicht. Version 1.4.0-alpha04 enthält diese Commits.

Neue Funktionen

  • (Experimentell) Aktivieren Sie die Generierung von Baseline-Profilen und Benchmarking für Apps, die für einen sekundären Nutzer installiert sind, z. B. für alle Apps auf Headless-Android Auto-Geräten. Diese Unterstützung wurde in einigen Szenarien getestet. Wenn sie bei Ihnen nicht funktioniert, teilen Sie uns das bitte über einen Fehlerbericht mit. (I9fcbe, b/356684617, b/373641155)

Diverse Fehlerkorrekturen

  • isProfileable wird jetzt in Benchmark-Builds immer überschrieben und isDebuggable wird jetzt sowohl in Benchmark- als auch in nonMinified-Builds (Baseline-Profil-Erfassung) immer überschrieben. (I487fa, b/369213505)
  • Die Kompilierungserkennung auf einigen physischen Geräten vor API 28 wurde korrigiert. Dies betrifft das JSON-context.compilationMode sowie das Verhalten von androidx.benchmark.requireAot=true (das nicht mehr fälschlicherweise ausgelöst wird) (Ic3e08, b/374362482).
  • In CpuEventCounter-Messwerten wird ein Fehler ausgegeben, wenn ungültige Messungen beobachtet werden (z. B. instructions/cpucycles==0) (I8c503).

Version 1.4.0-alpha03

16. Oktober 2024

androidx.benchmark:benchmark-*:1.4.0-alpha03 ist veröffentlicht. Version 1.4.0-alpha03 enthält diese Commits.

API-Änderungen

  • Macrobenchmark: ArtMetric wird hinzugefügt, um die Profilabdeckung oder die allgemeine Android RunTime-Leistung zu prüfen. Erfasst die Anzahl und Gesamtdauer von JIT, Klasseninitialisierung (falls verfügbar) und Klassenüberprüfung. Außerdem wurde CaptureInfo geändert, um eine optionale ART-Mainline-Version mit Standardwert einzuschließen. (I930f7)
  • coefficientOfVariation zur JSON-Ausgabe des Benchmarks hinzugefügt, um die Stabilität innerhalb eines bestimmten Benchmark-Durchlaufs anzuzeigen. (Ib14ea)

Diverse Fehlerkorrekturen

  • Der Fehler CollectBaselineProfileTask wurde behoben, wenn das AVD-Gerät Leerzeichen enthält. (Ia0225, b/371642809)
  • Spekulativer Fix für Fehler aus StartupMode.COLD-Ausnahmen: Package <packagename> must not be running prior to cold start!. Jetzt wartet MacrobenchmarkScope.killProcess() (einschließlich des vor jeder Iteration ausgeführten Befehls, mit dem das StartupMode.COLD-Verhalten implementiert wird), bis bestätigt wird, dass alle Prozesse der App beendet wurden. (I60aa6, b/351582215)
  • Ein Problem wurde behoben, bei dem auf einigen gerooteten Emulatoren der Fehler UNLOCKED_ angezeigt wurde. (Ic5117)
  • In dieser Bibliothek werden jetzt JSpecify-Annotationen für Nullsicherheit verwendet, die typbezogen sind. Kotlin-Entwickler sollten das folgende Compiler-Argument verwenden, um die korrekte Verwendung zu erzwingen: -Xjspecify-annotations=strict (dies ist die Standardeinstellung ab Version 2.1.0 des Kotlin-Compilers). (I7104f, b/326456246)

Version 1.4.0-alpha02

2. Oktober 2024

androidx.benchmark:benchmark-*:1.4.0-alpha02 ist veröffentlicht. Version 1.4.0-alpha02 enthält diese Commits.

API-Änderungen

  • Die Gradle-Aufgaben lockClocks und unlockClocks wurden in Benchmark-Projekte verschoben, anstatt auf der obersten Ebene verfügbar zu sein. Diese Änderung war notwendig, da es leider keine Möglichkeit gibt, diese als Aktionen auf oberster Ebene zu registrieren, ohne die Projektisolation zu beeinträchtigen. (I02b8f, b/363325823)

Diverse Fehlerkorrekturen

  • BaselineProfileRule erfasst jetzt Profile für Apps mit mehreren Prozessen, indem am Ende des Blocks jeder laufende Prozess angewiesen wird, Profile zu erstellen. Wenn eine profilbasierte Kompilierung nie einen Prozess findet, an den sie übertragen werden kann, schlägt die Kompilierung fehl, da keine Profildaten erwartet werden. Außerdem wurde ein Instrumentierungsargument hinzugefügt, um die Wartezeit für den Dump zu steuern: androidx.benchmark.saveProfileWaitMillis (I0f519, b/366231469)
  • Aus Benchmark 1.3.2: Das Problem wurde behoben, dass Firebase Test Lab (FTL) keine Baseline-Profil- oder Macrobenchmark-Ergebnisdateien aus dem Baseline-Profil-Gradle-Plug-in abrufen konnte. (I2f678, b/285187547)

Wenn Sie FTL verwenden möchten, wenden Sie das Plug-in auf das Baseline-Profilmodul im Plug-in-Block an. Verwenden Sie dazu:

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

und konfigurieren Sie dann Firebase Test Lab mit:

  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}")
          }
      }
  }

Außerdem muss das erstellte FTL-Gerät der Baseline-Profil-Erweiterung hinzugefügt werden:

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

Version 1.4.0-alpha01

18. September 2024

androidx.benchmark:benchmark-*:1.4.0-alpha01 ist veröffentlicht. Version 1.4.0-alpha01 enthält diese Commits.

Neue Funktion: Statistiken zum App-Start

  • Die erste Version von App-Start-Statistiken kann in Macrobenchmark aktiviert werden. (09fae38)

So aktivieren Sie die Funktion in einem Start-Benchmark:

  @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(...)
      }
  }

Wenn Sie dann den Benchmark für den Start ausführen, wird der Trace auf häufige Probleme analysiert und diese werden nach den Messwerten auf dem Tab „Benchmark“ in der Studio-Testausgabe ausgegeben, z.B.:

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

Diese Funktion befindet sich noch in der Entwicklung. Verbesserungen an der Dokumentation und Erweiterbarkeit folgen, aber Feedback ist willkommen.

Neue Funktionen

  • Die Gradle-Property androidx.baselineprofile.suppressWarnings wurde hinzugefügt, um alle Warnungen zum Baseline-Profil zu unterdrücken. (314153a)
  • Microbench-Messwerte werden jetzt in Perfetto-Traces als Zähler angezeigt. (3214854)
  • Experimentelle Skripts zum Deaktivieren von JIT (erfordert Root-/Laufzeitneustart) und zum Zurücksetzen des Leistungs-/Teststatus des Geräts hinzugefügt. Diese werden derzeit nicht als Gradle-Aufgaben veröffentlicht. (7c3732b)
  • Es wurde ein Benchmark-Argument hinzugefügt, um Tests beim Ausführen auf einem Emulator zu überspringen. Wenn der automaticGenerationDuring-Build aktiviert ist, wird durch Benchmarks auch die Generierung von Baseline-Profilen ausgelöst. Dies schlägt fehl, wenn Emulatoren verwendet werden. Mit dem neuen Argument skipBenchmarksOnEmulator können wir den Test stattdessen überspringen. (0c2ddcd)
  • Die Logik zum Aktivieren von Leistungsereignissen wird jetzt auf API 23+ ausgeführt (2550048).

API-Änderungen

  • Das vorhandene experimentelle PerfettoConfig-Argument für MacrobenchmarkRule.measureRepeated() wurde in das neue ExperimentalConfig-Objekt verschoben.

Diverse Fehlerkorrekturen

  • Anzahl der Wiederholungsversuche für lockClocks.sh erhöhen (99e9dac)
  • Erstelle keine nonMinified- und Benchmark-Build-Typen, wenn sie bereits vorhanden sind. Aufgrund eines Fehlers wurden nonMinified- und Benchmark-Build-Typen neu erstellt, auch wenn sie bereits vorhanden waren. (e75f0a5)
  • Ignoriere nicht endende Slices aus TraceSectionMetric-Ergebnissen. (a927d20)
  • Die Emulatorprüfung wurde verbessert, um das Präfix sdk_ zu berücksichtigen. (1587de8)
  • Behandeln Sie nicht ausgeführte Pakete in FrameTimingGfxInfoMetric als bereinigt. (35cc79c)
  • Das Problem, dass androidx.benchmark.cpuEventCounter beschädigte Werte für Ereignisse erzeugt, die keine Anweisungen sind, wurde behoben. (06edd59)
  • Der Fehler resumeTiming/runWithTimingDisabled wurde behoben, sodass die Prioritätsreihenfolge der Messwerte berücksichtigt wird. Außerdem wurde die Auswirkung des Pausierens/Fortsetzens von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität deutlich reduziert. Wenn Sie beispielsweise CPU-Leistungszähler über das Instrumentierungsargument cpuEventCounter.enable verwenden, wird „timeNs“ bei Pausen/Fortsetzungen nicht mehr wesentlich reduziert. (5de0968)

Version 1.3

Version 1.3.4

26. März 2025

androidx.benchmark:benchmark-*:1.3.4 ist veröffentlicht. Version 1.3.4 enthält diese Commits.

Fehlerkorrekturen

  • Es wurden Inkompatibilitäten mit der Gradle-Projektisolierung im Benchmark Baseline Gradle-Plug-in behoben. (b/404523257)

Version 1.3.3

16. Oktober 2024

androidx.benchmark:benchmark-*:1.3.3 ist veröffentlicht. Version 1.3.3 enthält diese Commits.

Fehlerkorrekturen

  • CollectBaselineProfileTask wurde behoben, wenn das AVD-Gerät Leerzeichen enthält (Ia0225, b/371642809)

Version 1.3.2

2. Oktober 2024

androidx.benchmark:benchmark-*:1.3.2 ist veröffentlicht. Version 1.3.2 enthält diese Commits.

Fehlerkorrekturen

  • Das Problem wurde behoben, dass Firebase Test Lab (FTL) keine Baseline-Profil- oder Makrobenchmark-Ergebnisdateien aus dem Baseline-Profil-Gradle-Plug-in abrufen konnte. (I2f678, b/285187547)

Wenn Sie FTL verwenden möchten, wenden Sie das Plug-in im Plug-in-Block auf das Baseline-Profilmodul an:

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

und konfigurieren Sie dann Firebase Test Lab mit:

  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}")
          }
      }
  }

Außerdem muss das erstellte FTL-Gerät der Baseline-Profil-Erweiterung hinzugefügt werden:

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

Version 1.3.1

18. September 2024

androidx.benchmark:benchmark-*:1.3.1 ist veröffentlicht. Version 1.3.1 enthält diese Commits.

Fehlerkorrekturen

  • Die Gradle-Eigenschaft androidx.baselineprofile.suppressWarnings wurde hinzugefügt, um alle Warnungen zum Baseline-Profil zu unterdrücken (I7c36e, b/349646646).
  • Das Baseline-Profil-Gradle-Plug-in wurde so korrigiert, dass es vorhandene nonMinified… und benchmark… verwendet, wenn sie von der App erstellt wurden, anstatt Wrapper zu erstellen. (Ia8934, b/361370179)
  • java.lang.AssertionError: ERRORS (not suppressed): EMULATOR wurde behoben, wenn automaticGenerationDuringBuild auf Emulatoren aktiviert ist. Mit dem neuen Argument wird der Test stattdessen übersprungen. (If3f51, b/355515798)
  • Microbenchmark-Reduzierung – abgeleitete Klassen von org.junit.runner.notification.RunListener in der Benchmark-Bibliothek ProGuard beibehalten (Ic8ed5, b/354264743)
  • TraceSectionMetric wurde korrigiert, um nicht endende Slices zu ignorieren. Bisher wurde für diese ein Wert von -1 für die Dauer angenommen, z.B. bei der Summenbildung oder der Suche nach der Mindestdauer. (If74b7)
  • In FrameTimingGfxInfoMetric wurde ein Problem behoben, bei dem das Starten des Messwerts zum Absturz führte, wenn der Prozess nicht bereits ausgeführt wurde. (I6e412)

Version 1.3.0

21. August 2024

androidx.benchmark:benchmark-*:1.3.0 ist veröffentlicht. Version 1.3.0 enthält diese Commits.

Änderungen an Microbenchmarks seit Version 1.2.0

  • Methodentracing ist in Microbenchmarks standardmäßig aktiviert, wenn sie auf den meisten Geräten ausgeführt werden.
    • Das Methoden-Tracing wird als separate Phase nach den Messungen ausgeführt. Dadurch können sowohl genaue Messungen als auch Methoden-Traces aus einem einzigen Benchmark-Lauf ausgegeben werden.
    • Methodentracing in einigen Android-Betriebssystem- und ART-Versionen wirkt sich auf spätere Messphasen aus. In diesen Versionen ist Methodentracing standardmäßig deaktiviert und in der Studio-Ausgabe wird eine Warnung ausgegeben.
  • Benchmarks für den Hauptthread und ANR-Fehler
    • measureRepeatedOnMainThread für UI-Thread-Benchmarks hinzugefügt (z.B. solche, die mit Compose-/View-UIs interagieren), um ANRs bei einer Ausführung über viele Sekunden zu vermeiden.
    • Methodentraces werden übersprungen, wenn erwartet wird, dass die ANR-Vermeidungsfrist überschritten wird. Setzen Sie androidx.benchmark.profiling.skipWhenDurationRisksAnr auf „false“, um dieses Verhalten zu deaktivieren. Dies wird für CI-Ausführungen nicht empfohlen, da ANRs bei langen CI-Ausführungen Probleme verursachen können.
  • Reduzierung
    • Eingebettete Proguard-Regeln zur Verbesserung des Microbenchmarkings bei aktivierter Reduzierung
    • Für die Reduzierung/R8 in einem Bibliotheksmodul ist AGP 8.3 erforderlich. Sie kann über android.buildTypes.release.androidTest.enableMinification in Ihrer build.gradle aktiviert werden.
    • Experimentelle BlackHole.consume() API hinzugefügt, um die Eliminierung von totem Code zu verhindern (If6812, b/286091643)
  • Messwerte
    • Experimentelle Funktion für CPU-Ereigniszähler (Messwerte von perf_event_open, wofür auf den meisten Versionen der Plattform Root-Zugriff erforderlich ist), Zugriff über InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (kann auf true festgelegt werden) und androidx.benchmark.cpuEventCounter.events kann z. B. auf (Instructions,CpuCycles) festgelegt werden. Dies sollte auf einigen Userdebug-Emulatoren unterstützt werden, die Unterstützung wurde jedoch nicht auf allen verfügbaren Emulatoren getestet.

Änderungen an MACRObenchmark seit Version 1.2.0

  • Überarbeitung des Methoden-Tracing für Makro-Benchmarks.
    • Jetzt sind Methoden-Traces auf die Dauer des measureBlock beschränkt und können mehrere Sitzungen erfassen, wenn der Prozess mehrmals gestartet wird.
    • Bisher funktionierte die Methodenverfolgung nur für StartupMode.COLD-Benchmarks und erfasste nichts für measureBlocks, bei denen der Zielprozess nicht neu gestartet wurde.
    • Das Problem, dass Methoden-Traces in Macrobenchmark nicht vollständig erfasst wurden, wurde behoben. Methoden-Traces sollten jetzt auch auf langsameren Geräten vollständig erfasst und gültig sein. (I6349a, b/329904950)
  • Das ART-Profil wird während einzelner warmUp-Iterationen korrekt ausgegeben, wenn der Prozess beendet wird, sodass die CompilationMode.Partial(warmup=N)-Messungen genauer sind. (I17923)
  • Fehlermeldung bei der Übertragung von Drop Shader
    • Der Fehlermeldung für den Broadcast-Fehler des Drop-Shaders wurden Vorschläge zur Fehlerbehebung hinzugefügt.
    • Fügen Sie zwei Instrumentierungsargumente hinzu, um das Verhalten beim Verwerfen von Shadern zu überschreiben und Abstürze beim Benchmarking von Apps ohne ProfileInstaller 1.3 zu umgehen:
      • androidx.benchmark.dropShaders.enable=true/false : Kann verwendet werden, um das Entfernen von Shadern zu überspringen (auch bei StartupMode.Cold-Starts), insbesondere beim Benchmarking von Apps, die noch nicht ProfileInstaller 1.3 verwenden.
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : Kann verwendet werden, um Fehler beim Verwerfen von Shadern zu tolerieren, z. B. beim Benchmarking von Apps ohne profileinstaller 1.3 (I4f573).
  • Es wurde eine experimentelle MacrobenchmarkRule#measureRepeated-Variante hinzugefügt, die einen benutzerdefinierten PerfettoConfig für die vollständig angepasste Perfetto-Trace-Aufzeichnung verwendet. Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messwertklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384)
  • Brechen Sie dexopt-Hintergrundjobs ab, bevor Sie einen Macrobenchmark ausführen, um Störungen zu reduzieren. (I989ed)
  • Macrobenchmark wartet jetzt 1 Sekunde, bis die Zielanwendung ein ART-Profil leert (zuvor 500 ms). (I85a50, b/316082056)
  • Überarbeitung von TraceSectionMetric
    • Hinweis: TraceSectionMetricDie unten aufgeführten Änderungen können sich auf die Ausgaben bei der CI-Nutzung auswirken und zu Diskontinuitäten führen oder das Parsen unterbrechen.
    • „Summe“ ist jetzt die Standardeinstellung, da dieser Messwert meistens für wiederkehrende Ereignisse verwendet wird und bei „Erster“ in diesen Fällen Daten verworfen würden.
    • Bessere Anpassbarkeit und mehr verfügbare Modi
    • Modusnamen sind jetzt in den Namen der Messwertausgabe eingebettet (in Studio und JSON)
    • Unterstützt jetzt mit Trace.{begin|end}AsyncSection erstellte Segmente.
  • Messwerte
    • Leistung – PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge() und PowerMetric.deviceSupportsPowerEnergy() hinzugefügt
    • Metric.getResult wurde in getMeasurements umbenannt, um dem Rückgabetyp zu entsprechen.
    • Allen Fehlern bei der Startup-Erkennung wurden die Labels „log.w“ / „exception“ hinzugefügt. Das aktuelle Verhalten ändert sich dadurch nicht. Einige Fehler werden also ausgegeben und bei anderen wird der Start stillschweigend nicht erkannt. Die Änderung soll lediglich die Verständlichkeit verbessern. In der Regel sind die Apps, die Log.w() und keine Startmesswerte melden, diejenigen, bei denen Nicht-Frame-Ereignisse fehlen. Ausnahmen werden ausgelöst, wenn der Start erkannt wird, mit Ausnahme von Frame-Timing-Informationen (aus UI/RT-Slices). (Id240f, b/329145809)
    • Die frameCount-Messung wurde FrameTimingMetric hinzugefügt, um Szenarien zu erkennen, in denen sich die Messungen ändern, weil sich die Anzahl der erstellten Frames geändert hat (neue Animationen hinzugefügt, Probleme mit der Ungültigkeit behoben). (I1e5aa)
    • Es wurde klargestellt, dass frameOverrunMs der bevorzugte Messwert für das Tracking ist, wenn er in der Dokumentation verfügbar ist, und warum. (I18749, b/329478323)
    • Es wurde ein Problem behoben, bei dem nicht abgeschlossene Frames am Anfang und Ende des Trace miteinander verknüpft werden konnten, was fälschlicherweise als ein einzelner, extrem langer Frame gemeldet wurde. (I39353, b/322232828)
    • Verbesserung des Fehlers FrameTimingMetric, wenn keine Frames erzeugt werden, und Ausgabe eines Links zum Trace, wenn das Parsen von Messwerten fehlschlägt, um die Diagnose des Problems zu erleichtern. (I956b9)
    • Es wurde ein Absturz in FrameTimingMetric behoben, der durch das Nicht-Parsen der Frame-ID verursacht wurde, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276)
    • Die Strenge der Prüfungen in FrameMetrics wurde gelockert und die Fehlermeldungen wurden detaillierter gestaltet. (Iadede)

Änderungen bei der Erfassung von Baseline-Profilen / Gradle-Plug-in seit Version 1.2.0

  • Die empfohlene Höchstversion des AGP wurde auf 9.0.0-alpha01 erhöht.
  • mergeArtProfile- und mergeStartupProfile-Aufgaben warten immer auf die Erstellung des Baseline-Profils. (I623d6, b/343086054)
  • Wenn ein Baseline-Profil erfolgreich generiert wird, wird eine Zusammenfassung der Änderungen ausgegeben (I824c8, b/269484510).
  • DSL zum Deaktivieren von Warnungen hinzugefügt (Ic4deb, b/331237001)
  • Problem behoben, damit Benchmarks generierte Baseline-Profile verwenden, wenn automaticGenerationDuringBuild deaktiviert ist (Ic144f, b/333024280)
  • Fehler bei der Überschreibung von Gradle-Plug-in-Properties für BaselineProfile behoben, um die Generierung von Baseline-Profilen und Benchmarking beim Anpassen eines nonMinified- oder Benchmark-Build-Typs zu ermöglichen. (Ib8f05, b/324837887)
  • Problem behoben, bei dem Baseline-Profile der Bibliothek vor AGP 8.3.0-alpha15 in AAR aufgenommen wurden. (I1d2af, b/313992099)
  • Die Ausgabe-URL für die Baseline und das Startprofil am Ende der Generierungsaufgabe wurde korrigiert. (I802e5, b/313976958)

Weitere wichtige Änderungen seit Version 1.2.0

  • Trace-Erfassung
    • Der EXITCODE 2-Fehler beim Starten von Perfetto wurde von einem Fehler zu einer protokollierten Warnung reduziert.
    • AIDL-Tracing in Benchmarks standardmäßig aktivieren(erfordert API 28) (Ia0af2, b/341852305)
    • Standardmäßig Porter-Tag-Tracing in Benchmarks aktivieren. Dabei werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
    • Das Start-Timeout für die Erfassung von Traces wurde erhöht, um Abstürze beim Starten des Tracing auf langsameren Geräten zu vermeiden (I98841, b/329145808).
    • Öffentliche API-PerfettoTraceProcessor.Session.queryMetrics-APIs mit JSON-, textproto- und proto-binären (undecodierten) Varianten hinzugefügt. Damit können Sie Messwerte abfragen, die in TraceProcessor integriert sind (I54d7f, b/304038382).
    • Aktivieren Sie das Blockieren des Starts bei der Perfetto-Trace-Aufzeichnung, um das Risiko fehlender Daten am Anfang des Traces zu verringern. Wird nur auf API 33 und höher unterstützt. (Ie6e41, b/310760059)
  • JSON-Ausgabe
    • Im Benchmark-Kontext in der JSON-Ausgabe wurden zusätzliche Informationen hinzugefügt:
      • context.artMainlineVersion – Ganzzahlversion des ART-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls -1)
      • context.build.id – Entspricht android.os.Build.ID
      • context.build.version.codename: Entspricht android.os.Build.VERSION.CODENAME
      • context.build.version.abbreviatedCodename – entspricht dem ersten Buchstaben des Codenamens der Vorabveröffentlichung (auch bei Release-Builds) (Ie5020)
    • Die Liste profilerOutput wurde der JSON-Ausgabe hinzugefügt, um die Verwendung von Tools für Profiling-Traces (z. B. Perfetto, Methoden-Traces) zu vereinfachen (I05ddd, b/332604449).
    • Es wurde eine Warnung hinzugefügt, wenn Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dies dazu führt, dass die JSON-Ausgabedateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
    • Fehler ausgeben, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder Nachbearbeiten von Dateien zu vermeiden. (I4a5ab)

Version 1.3.0-rc01

7. August 2024

androidx.benchmark:benchmark-*:1.3.0-rc01 ist veröffentlicht. Version 1.3.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Fehler behoben, bei dem androidx.benchmark.cpuEventCounter für Nicht-Anweisungsereignisse fehlerhafte Werte erzeugte (I7386a, b/286306579)
  • resumeTiming/runWithTimingDisabled wurde korrigiert, um die Prioritätsreihenfolge der Messwerte zu berücksichtigen und die Auswirkungen des Pausierens/Fortsetzens von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität erheblich zu reduzieren. Wenn Sie beispielsweise CPU-Leistungszähler über das Instrumentierungsargument cpuEventCounter.enable verwenden, wird „timeNs“ nicht mehr erheblich reduziert, wenn eine Pause oder Fortsetzung erfolgt. (I39c2e, b/286306579, b/307445225)
  • Die Wahrscheinlichkeit, dass die Stapel-Stichprobenerhebung zu einem Hard-Timeout des Hauptthreads für measureRepeatedOnMainThread führt, wurde verringert, indem die Stapel-Stichprobenerhebung für die Conversion vom Hauptthread entfernt wurde. (I487a8, b/342237318)
  • Die manuelle Beschreibung des Zugriffs auf neue Plattform-APIs wurde entfernt, da dies automatisch über die API-Modellierung erfolgt, wenn R8 mit AGP 7.3 oder höher verwendet wird (z. B. R8-Version 3.3), und für alle Builds, wenn AGP 8.1 oder höher verwendet wird (z. B. D8-Version 8.1). Clients, die AGP nicht verwenden, wird empfohlen, auf D8-Version 8.1 oder höher zu aktualisieren. Weitere Details findest du in diesem Artikel. (I9496c, b/345472586)
  • AGP-Versionsprüfung hinzugefügt, um den Paketnamen als Instrumentierungsargument zu senden. Vor AGP 8.4.0 konnte der Paketname der Ziel-App nicht über Instrumentierungsargumente an die Instrumentierungs-App gesendet werden. (0c72a3f)

Version 1.3.0-beta02

10. Juli 2024

androidx.benchmark:benchmark-*:1.3.0-beta02 ist veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • EXITCODE 2 wird beim Starten von Perfetto ordnungsgemäß verarbeitet, um eine Warnung zu protokollieren, aber der Vorgang wird fortgesetzt.

Version 1.3.0-beta01

12. Juni 2024

androidx.benchmark:benchmark-*:1.3.0-beta01 ist veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.

API-Änderungen

  • MethodTracing.affectsMeasurementOnThisDevice wurde aus Konsistenzgründen in AFFECTS_MEASUREMENT_ON_THIS_DEVICE umbenannt. (I1bdfa)
  • Die experimentelle BlackHole.consume()-API wurde hinzugefügt, um das Entfernen von nicht erreichbarem Code in Microbenchmarks zu verhindern. (If6812, b/286091643)
  • Microbenchmark löst jetzt einen Fehler aus, um zu verhindern, dass das Methoden-Tracing die Messungen beeinträchtigt. Dieses Problem tritt auf bestimmten Geräten auf, wenn die Methodenverfolgung erzwungen wird (über Instrumentierungsargumente oder MicrobenchmarkConfig) und wenn nach einer Methodenverfolgung eine Messung versucht wird. Betroffene Geräte verwenden die API-Versionen 26 bis 30 oder bestimmte ART-Mainline-Modulversionen, die von dieser Beeinträchtigung betroffen sind. Sie können zur Laufzeit über ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice erkannt werden. (Iafb92, b/303660864)

Diverse Fehlerkorrekturen

  • Die empfohlene maximale AGP-Version wurde auf 9.0.0-alpha01 erhöht. (I5bbb0)
  • Dem Benchmark-Kontext wurde der Kompilierungsmodus hinzugefügt (If5612, b/325512900)
  • AIDL-Tracing standardmäßig aktivieren (erfordert API 28) (Ia0af2, b/341852305)
  • Im Benchmark-Kontext in der JSON-Ausgabe wurden zusätzliche Informationen hinzugefügt:
    • context.artMainlineVersion: Ganzzahlige Version des ART-Hauptmoduls (falls auf dem Gerät vorhanden, andernfalls -1)
    • context.build.id – Gleich android.os.Build.ID
    • context.build.version.codename – Gleich android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename: Entspricht dem ersten Buchstaben des Codenamens der Vorabveröffentlichung (auch bei Release-Builds) (Ie5020)
  • StackSampling wurde korrigiert, um androidx.benchmark.profiling.sampleDurationSeconds zu berücksichtigen (Ib1d53)
  • Ändern Sie die Makro->gemeinsame Abhängigkeit in api(), damit z.B. PerfettoTrace und PerfettoConfig einfacher zu verwenden sind. (Icdae3, b/341851833)
  • Sorgen Sie dafür, dass die Aufgaben mergeArtProfile und mergeStartupProfile immer auf die Erstellung des Baseline-Profils warten. (I623d6, b/343086054)
  • Berücksichtigen Sie den Aktivierungsstatus der Variante, wenn Sie entscheiden, ob die Variante aktiviert werden soll. (I5d19e, b/343249144)
  • Das Standard-Startzeitlimit für den Perfetto-Trace-Prozessor wurde erhöht. (I87e8c, b/329145808)

Version 1.3.0-alpha05

14. Mai 2024

androidx.benchmark:benchmark-*:1.3.0-alpha05 ist veröffentlicht. Version 1.3.0-alpha05 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Es wird eine klarere Ausnahme ausgelöst, wenn der Macrobench-Messwert für alle Iterationen Nullwerte zurückgibt (Iab58f, b/314931695).
  • Den ProGuard-Regeln für Microbenchmarks wurden zusätzliche Umgehungsregeln hinzugefügt, einschließlich Unterstützung für Listener-Regeln und andere beobachtete Warnungen / Fehler. (I14d8f, b/329126308, b/339085669)
  • Das Methoden-Tracing wird während eines Makrobenchmarks als separate Phase ausgeführt und hat keine Auswirkungen mehr auf Messungen. (If9a50, b/285912360, b/336588271)
  • Zusätzliche Vorschläge zur Fehlerbehebung für die Fehlermeldung „Shader-Broadcast fehlgeschlagen“ hinzugefügt. (I5efa6, b/325502725)

Version 1.3.0-alpha04

1. Mai 2024

androidx.benchmark:benchmark-*:1.3.0-alpha04 ist veröffentlicht. Version 1.3.0-alpha04 enthält diese Commits.

API-Änderungen

  • Experimentelle MacrobenchmarkRule#measureRepeated-Variante hinzugefügt, die eine benutzerdefinierte PerfettoConfig für die vollständig benutzerdefinierte Perfetto-Trace-Aufzeichnung verwendet. Beachten Sie, dass falsch konfigurierte Konfigurationen dazu führen können, dass integrierte Messwertklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384)
  • PowerMetric.deviceSupportsPowerEnergy zur Klarstellung in PowerMetric.deviceSupportsHighPrecisionTracking umbenennen (I5b82f)
  • PowerMetric.deviceBatteryHasMinimumCharge() und PowerMetric.deviceSupportsPowerEnergy() wurden hinzugefügt, um das Ändern oder Überspringen von Benchmarks basierend auf der Fähigkeit des Geräts zur Messung der Stromversorgung zu ermöglichen. (I6a591, b/322121218)

Diverse Fehlerkorrekturen

  • Vergleich mit dem vorherigen Baseline-Profil hinzugefügt (I824c8, b/269484510)
  • DSL zum Deaktivieren von Warnungen hinzugefügt (Ic4deb, b/331237001)
  • Ausnahme in Infoprotokoll geändert, wenn Benchmark-Varianten deaktiviert sind (I8a517, b/332772491)
  • Das Erfassen von Methodentraces für einen Macrobenchmark wird vereinfacht, da es auf die Dauer des eigentlichen measureBlock() beschränkt ist. Bisher wurde er beim Start des Zielprozesses gestartet und unterstützte nur Kaltstarts (Iee85a, b/300651094).
  • Abstürze vermeiden, wenn der Perfetto-Trace-Prozessor langsam startet (I98841, b/329145808)

Version 1.3.0-alpha03

17. April 2024

androidx.benchmark:benchmark-*:1.3.0-alpha03 ist veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Fügt öffentliche API-PerfettoTraceProcessor.Session.queryMetrics-APIs mit JSON-, textproto- und proto-binären (undecodierten) Varianten hinzu. Damit können Sie in TraceProcessor integrierte Messwerte abfragen (I54d7f, b/304038382).
  • profilerOutput wurde zur JSON-Ausgabe hinzugefügt, um die Verwendung von Tools für Profiling-Traces (z.B. Perfetto, Methoden-Traces) zu vereinfachen. (I05ddd, b/332604449)
  • Dem Benchmark „Perfetto Config“ wurde das Power-Tag hinzugefügt. Dabei werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
  • Das „inst“-Argument androidx.benchmark.profiling.skipWhenDurationRisksAnr wurde hinzugefügt. Es kann auf „false“ gesetzt werden, um zu verhindern, dass Methodentraces übersprungen werden, wenn die erwartete Dauer einen ANR verursachen könnte. Dies wird dringend empfohlen, um ANRs in CI-Läufen zu vermeiden.
  • Das experimentelle Argument „inst“ androidx.benchmark.profiling.perfCompare.enable wurde hinzugefügt. Setzen Sie es auf „true“, um die Zeit zwischen Mess- und Profilerstellungsphasen zu vergleichen. Nützlich, um beispielsweise den Overhead der Methodenverfolgung zu bewerten. (I61fb4, b/329146942)

API-Änderungen

  • TraceSectionMetric.Mode wurde in eine versiegelte Klasse geändert, um zukünftige Erweiterungen zu ermöglichen, ohne dass die Exhaustive-When-Anweisungen unterbrochen werden (I71f7b).
  • TraceSectionMetric.Mode.Average und .Count wurden hinzugefügt und die Argumente wurden neu angeordnet, sodass das häufigere Argument (mode) weiter oben in der Argumentliste steht. Dadurch muss weniger oft der Parametername angegeben werden. (Ibf0b0, b/315830077, b/322167531)
  • Metric.getResult wurde in getMeasurements umbenannt, um dem Rückgabetyp zu entsprechen (I42595)

Diverse Fehlerkorrekturen

  • Fehler behoben, damit Benchmarks generierte Baseline-Profile verwenden, wenn automaticGenerationDuringBuild deaktiviert ist (Ic144f, b/333024280)
  • BaselineProfile-Gradle-Plug-in-Eigenschaftsüberschreibungen korrigieren, um die Generierung von Baseline-Profilen und Benchmarking beim Anpassen eines nonMinified- oder Benchmark-Build-Typs zu ermöglichen. (Ib8f05, b/324837887)
  • Methodentraces werden im Makrobenchmark jetzt sofort fixiert, sodass sie auch auf langsameren Geräten vollständig erfasst und gültig sein sollten. (I6349a, b/329904950)
  • Aktivieren Sie den blockierenden Start für die Perfetto-Trace-Aufzeichnung, um das Risiko fehlender Daten am Anfang des Trace zu verringern. Wird nur auf API 33 und höher unterstützt. (Ie6e41, b/310760059)
  • Es wurde eine Warnung hinzugefügt, wenn Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dadurch die JSON-Ausgabedateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
  • Tausender-Trennzeichen „,“ (Komma) für Konsistenz in der Studio-Ausgabe erzwingen, Geräte-Locale ignorieren (I3e921, b/313496656)
  • TraceSectionMetric unterstützt jetzt Slices, die mit Trace.{begin|end}AsyncSection erstellt wurden. (I91b32, b/300434906)
  • Allen Fehlern bei der Startup-Erkennung wurden die Labels „log.w“ / „exception“ hinzugefügt. Das aktuelle Verhalten wird dadurch nicht geändert (einige Fehler werden also ausgelöst und andere werden nicht erkannt, ohne dass eine Meldung ausgegeben wird), sondern nur verständlicher gemacht. In der Regel sind die Apps, die Log.w() und keine Startmesswerte melden, diejenigen, bei denen Nicht-Frame-Ereignisse fehlen. Ausnahmen werden ausgelöst, wenn der Start erkannt wird, mit Ausnahme von Frame-Timing-Informationen (aus UI/RT-Slices). (Id240f, b/329145809)
  • Brechen Sie Dexopt-Jobs im Hintergrund ab, bevor Sie einen Macrobenchmark ausführen, um Störungen zu reduzieren. (I989ed)
  • Der Messwert frameCount wurde zu FrameTimingMetric hinzugefügt, um Szenarien zu erkennen, in denen sich Messwerte ändern, weil sich die Anzahl der erzeugten Frames geändert hat (neue Animationen hinzugefügt, Probleme mit der Invalidierung behoben). (I1e5aa)
  • Es wurde klargestellt, dass frameOverrunMs der bevorzugte Messwert für das Tracking ist, sofern er in Dokumenten verfügbar ist, und warum. (I18749, b/329478323)

Version 1.3.0-alpha02

20. März 2024

androidx.benchmark:benchmark-*:1.3.0-alpha02 ist veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Experimentelle R8-Unterstützung in Microbenchmarks über eingebettete Proguard-Regeln. Diese Unterstützung ist experimentell und erfordert AGP 8.3 für die Minimierung von Tests für Bibliotheksmodule. Verwenden Sie Folgendes, um die R8-Minifizierung/Optimierung im build.gradle Ihres Benchmark-Moduls zu aktivieren. Dies sollte je nach Arbeitslast zu einer erheblichen Leistungssteigerung führen. (I738a3, b/184378053)

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

Fehlerkorrekturen

  • Die Warnung zum Methoden-Tracing wird jetzt in einer separaten Zeile von der Microbench-Ausgabe angezeigt. (I0455c, b/328308833)

Version 1.3.0-alpha01

21. Februar 2024

androidx.benchmark:benchmark-*:1.3.0-alpha01 ist veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.

API-Änderungen

  • MicrobenchmarkConfig boolesche Parameter umbenannt, um das unnötige Wort „should“ zu vermeiden (Ia8f00, b/303387299)
  • BenchmarkRule.measureRepeatedOnMainThread wurde hinzugefügt, damit Benchmarks für den Hauptthread (z.B. solche, die Views oder Compose-UIs betreffen) keine ANRs auslösen, insbesondere bei großen Suites in CI. (I5c86d)
  • FrameTimingGfxInfoMetric wurde hinzugefügt, eine experimentelle alternative Implementierung von FrameTimingMetric mit Messwerten, die direkt von der Plattform stammen, anstatt aus dem Perfetto-Trace extrahiert zu werden. (I457cb, b/322232828)
  • Es wurde die Möglichkeit hinzugefügt, während einzelner warmUp-Iterationen ein ART-Profil zu erstellen. (I17923)
  • Mehrere Änderungen an der TraceSectionMetric API:
    • Mode.Min und Mode.Max hinzufügen
    • Label-Argument hinzugefügt, um den Abschnittsnamen als Messwertlabel zu überschreiben
    • Dem Output wurde der Modusname hinzugefügt, um die Bedeutung des Messwerts zu verdeutlichen.
    • Der Standardwert wurde in „Summe“ geändert, da dieser Messwert meist für wiederkehrende Termine verwendet wird. Beachten Sie diese Änderungen bei der CI-Nutzung, da sie zu Unstetigkeiten führen oder das Parsen beeinträchtigen können. (Ic1e82, b/301892382, b/301955938)

Diverse Fehlerkorrekturen

  • Verbesserte Fehlermeldung im Baseline-Profil-Gradle-Plug-in, wenn das angegebene verwaltete Gerät nicht vorhanden ist (Idea2b, b/313803289)
  • Korrektur für das Einbinden von Baseline-Profilen für Bibliotheken in AAR vor AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • Die Ausgabe-URL für Baseline- und Startprofile am Ende der Generierungsaufgabe wurde korrigiert (I802e5, b/313976958).
  • Zeitlimits für Datenquellen wurden angepasst, um java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] zu beheben (I8dc7d, b/323601788)
  • Fügen Sie zwei Instrumentierungsargumente hinzu, um das Verhalten beim Entfernen von Shadern zu überschreiben und Abstürze beim Benchmarking von Apps ohne ProfileInstaller 1.3 zu umgehen:
    • androidx.benchmark.dropShaders.enable=true/false : Kann verwendet werden, um das Verwerfen aller Shader zu überspringen (einschließlich derer, die bei StartupMode.Cold-Starts verworfen werden), insbesondere beim Benchmarking von Apps, die noch nicht ProfileInstaller 1.3 verwenden.
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : Kann verwendet werden, um Fehler beim Löschen von Shadern zu tolerieren, z. B. beim Benchmarking von Apps ohne ProfileInstaller 1.3 (I4f573)
  • Überspringen Sie das Methoden-Tracing im UI-Thread, wenn es voraussichtlich länger als ein paar Sekunden dauert, und bereinigen Sie Methoden-Traces, wenn ein Fehler auftritt. (I6e768)
  • Fehler ausgeben, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder Nachbearbeiten von Dateien zu vermeiden. (I4a5ab)
  • Es wurde ein Problem behoben, bei dem nicht beendete Frames am Anfang und Ende des Traces zusammengefasst werden konnten. Dies wurde fälschlicherweise als einzelner extrem langer Frame gemeldet. (I39353, b/322232828)
  • Verwenden Sie --skip verification auf API 30 und höher, wenn Sie ein Paket auf API 30 bis 33 neu installieren, um ART-Profile in Nutzer-Builds zu löschen. So können Play Protect-Warnungen umgangen werden, die auf einigen Geräten zu Fehlern führen. (Ic9e36)
  • Verwenden Sie am force-stop, um Apps zu beenden, die keine System-Apps wie die System-UI oder der Launcher sind. (I5e028)
  • Macrobenchmark wartet jetzt 1 second, bis die Zielanwendung ein ART-Profil leert (bisher 500 ms). (I85a50, b/316082056)
  • Verbesserung des Fehlers FrameTimingMetric, wenn keine Frames erzeugt werden, und Ausgabe eines Links zum Trace, wenn das Parsen von Messwerten fehlschlägt, um die Diagnose des Problems zu erleichtern. (I956b9)
  • Absturz in FrameTimingMetric behoben, bei dem die Frame-ID nicht geparst werden konnte, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276)
  • Die Strenge der Prüfungen in FrameMetrics wurde gelockert und den Fehlermeldungen wurden weitere Details hinzugefügt. (Iadede)

Version 1.2

Version 1.2.4

17. April 2024

androidx.benchmark:benchmark-*:1.2.4 ist veröffentlicht. Version 1.2.4 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Behebt das Problem, dass das srcset-Attribut des Referenzprofils in Benchmark-Varianten nicht eingerichtet wurde. Außerdem wird das Problem automaticGenerationDuringBuild in Bibliotheken behoben, das einen Zirkelbezug verursacht. (I28ab7, b/333024280)
  • Verwenden Sie am force-stop, um Apps zu beenden, wenn es sich nicht um eine System-App wie „System-UI“ oder „Launcher“ handelt. Dadurch wird ein Problem behoben, bei dem StartupMode.COLD-Benchmarks mit der Meldung „Package $package must not be running prior to cold start!“ (Paket $package darf vor dem Kaltstart nicht ausgeführt werden) abstürzen, weil der Prozess nicht vollständig beendet wurde. (I5e028)

Version 1.2.3

24. Januar 2024

androidx.benchmark:benchmark-*:1.2.3 ist veröffentlicht. Version 1.2.3 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Die Ausnahme wurde aus dem Baseline-Profil-Gradle-Plug-in entfernt, wenn die AGP-Version 8.3.0 oder höher ist.
  • Korrektur für das Einbeziehen von Baseline-Profilen von Bibliotheken in AAR vor AGP 8.3.0-alpha15.

Version 1.2.2

1. Dezember 2023

androidx.benchmark:benchmark-*:1.2.2 ist veröffentlicht. Version 1.2.2 enthält diese Commits.

Baseline-Profile

Version 1.2.1

15. November 2023

androidx.benchmark:benchmark-*:1.2.1 ist veröffentlicht. Version 1.2.1 enthält diese Commits.

Neue Funktionen

  • Verbesserte Fehlermeldung, wenn Nutzer Testvarianten deaktivieren (b/307478189)
  • Es wurden Properties zur Unterstützung der Integration von AS-Testläufen hinzugefügt (b/309805233, b/309116324).

Version 1.2.0

18. Oktober 2023

androidx.benchmark:benchmark-*:1.2.0 ist veröffentlicht. Version 1.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.1.0

Baseline-Profile

  • Das neue Baseline-Profil-Gradle-Plug-in automatisiert das Erfassen und Einbinden von Baseline-Profilen in Ihren Test- und Build-Workflow.
  • BaselineProfileRule.collect ist jetzt stabil und eine optimierte und vereinfachte Version der vorherigen experimentellen BaselineProfileRule.collectBaselineProfile API.
    • Geben Sie einfach packageName an und steuern Sie Ihre App
  • Bei Bibliotheken, die Baseline-Profile generieren, können Sie die generierten Regeln jetzt entweder im Code (BaselineProfileRule.collect-Argument) oder noch einfacher im Gradle-Plug-in filtern.
  • Fehlerkorrekturen
    • Die Erfassung von Baseline-Profilen unter Android U+ wurde korrigiert (Id1392, b/277645214).

Makro-Benchmark

  • Kompilierung
    • Macrobenchmark setzt jetzt den Kompilierungsstatus für jede Kompilierung korrekt zurück. Dazu muss das APK vor Android 14 neu installiert werden. Daher wird dringend empfohlen, Benchmarking unter Android 14 oder höher durchzuführen, wenn Sie den Status (z. B. die Nutzeranmeldung) in den gemessenen Daten beibehalten möchten.
    • Sie können dieses Problem auch umgehen, indem Sie die App-Kompilierung separat steuern und die Kompilierung mit CompilationMode.Ignore() oder einem Instrumentierungsargument überspringen.
  • Instrumentierungsargumente

    • Unterstützung für das Instrumentierungsargument androidx.benchmark.dryRunMode.enable (bereits in Microbenchmark verfügbar) für schnellere Validierungsläufe (z.B. beim Erstellen des Benchmarks oder beim Presubmit)
    • Unterstützung für androidx.benchmark.profiling.mode=StackSampling und MethodTracing.
    • androidx.benchmark.enabledRules wurde hinzugefügt, um das Baseline-Profil im Vergleich zu Makrobenchmark-Regeltests zur Laufzeit zu filtern.
    • Das Argument androidx.benchmark.perfettoSdkTracing.enable wurde hinzugefügt, um Tracing mit tracing-perfetto zu aktivieren, z.B. Compose-Tracing für die Neuzusammensetzung. Bei der Verwendung mit StartupMode.COLD wird das Timing erheblich beeinträchtigt, da die Tracing-Bibliothek beim Start der Anwendung geladen und aktiviert wird.
  • Voraussetzungen

    • Für Macrobenchmark ist jetzt ProfileInstaller 1.3.0 oder höher in der Ziel-App erforderlich, um das Erfassen / Zurücksetzen von Profilen und das Leeren des Shader-Cache zu ermöglichen.
  • Neue experimentelle Metric APIs

    • Experimentelle TraceSectionMetric hinzugefügt, mit der einfache Zeitangaben aus trace("") {}-Blöcken in Ihrer App extrahiert werden können, oder TraceMetric, um die vollständige Abfragefunktion von Perfetto TraceProcessor zu nutzen.
    • Experimentelle PowerMetric hinzugefügt, um Informationen zur Stromnutzung zu erfassen
    • Experimentelle MemoryCountersMetric zum Zählen von Seitenfehlern hinzugefügt
    • Experimentelle PerfettoTraceProcessor API hinzugefügt, die intern verwendet wird, um Messwerte aus System-Traces (auch Perfetto-Traces genannt) zu extrahieren
  • Fehlerkorrekturen

    • Abstürze beim Installieren oder Extrahieren von Profilen aus einer App, die aus mehreren APKs installiert wurde (z.B. aus einem App-Bundle), wurden behoben.
    • Fehler behoben, bei dem FrameTimingMetric Frames mit inkonsistenten Frame-IDs ignoriert hat (im Allgemeinen Frames während Welleneffekten bei API 31+) (I747d2, b/279088460)
    • Fehler beim Parsen von Traces > 64 MB behoben (Ief831, b/269949822)
    • Fehler wurden genauer beschrieben, wenn das Betriebssystem-Image des Geräts (insbesondere des Emulators) nicht richtig für das Tracing oder die Kompilierung konfiguriert ist.
    • Akkustandprüfung für Geräte ohne Akku überspringen (Mikro und Makro)
    • Verbesserte Dateiausgabe mit klareren Fehlern für ungültige Ausgabeverzeichnisse und sichereren Standardeinstellungen
    • Verbesserte Stabilität von StartupMode.COLD durch konsistentes Löschen des Shader-Cache (auch über MacrobenchmarkScope.dropShaderCache verfügbar)
    • Fehler beim Leanback-Fallback für startActivityAndWait behoben.

Mikrobenchmark

  • Funktionen
    • Die Profilerstellung wurde in eine separate Phase nach anderen Messwerten verschoben, sodass in einem Testlauf sowohl genaue Zeit- als auch Profilerstellungsergebnisse angezeigt werden können.
  • Experimentelle APIs
    • Experimentelle MicrobenchmarkConfig API zum Definieren benutzerdefinierter Messwerte und zum Konfigurieren von Tracing und Profilerstellung hinzugefügt. Kann verwendet werden, um Methoden-Traces oder Tracepoints zu erfassen (beachten Sie jedoch den Tracing-Overhead).
    • Es wurden experimentelle APIs zum separaten Steuern von BenchmarkState und BenchmarkRule ohne JUnit hinzugefügt.
    • Experimenteller PerfettoTrace-Eintrag hinzugefügt, um die Erfassung von Perfetto-Traces mit benutzerdefinierter Konfiguration getrennt von Benchmark-APIs zu ermöglichen.
  • Fehlerkorrekturen
    • Problemumgehung für fehlende führende Leerzeichen in der Benchmark-Ausgabe von Android Studio.
    • Ein Problem wurde behoben, bei dem Warnungen möglicherweise nicht in der Benchmark-Ausgabe von Android Studio ausgegeben wurden.
    • Der SampledProfiling-Absturz unter Android 13 (API 33) und höher wurde behoben.
    • Die Leistung von dryRunMode wurde durch das Überspringen von IsolationActivity und Perfetto-Tracing erheblich verbessert (bis zu 10-mal schnellerer Probelaufmodus auf älteren Betriebssystemversionen).

Version 1.2.0-rc02

6. Oktober 2023

androidx.benchmark:benchmark-*:1.2.0-rc02 ist veröffentlicht. Version 1.2.0-rc02 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Die Ausgabe der Benchmark-Datei wurde korrigiert, sodass das Kopieren der BaselineProfile-Plug-in-Datei nicht mehr fehlschlägt. Dateien wurden generiert und vom Gerät kopiert, aber so umbenannt, dass sie vom Gradle-Plug-in nicht erkannt wurden. (I8dbcc, b/303034735, b/296453339)
  • Die Fehlermeldungen beim Laden von tracing-perfetto beim Einfügen aus dem Macrobenchmark-Modul in die Zielanwendung wurden präzisiert.

Version 1.2.0-rc01

20. September 2023

androidx.benchmark:benchmark-*:1.2.0-rc01 ist veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Wenn die Initialisierung des Perfetto SDK-Tracings in einem Benchmark fehlschlägt, wird jetzt eine Ausnahme mit Anweisungen zur Fehlerbehebung ausgelöst. (I6c878, b/286228781)
  • OOM-Absturz beim Konvertieren von ART-Methoden-Traces in das Perfetto-Format behoben. (I106bd, b/296905344)
  • (Macrobenchmark) Das Label für die Methodenverfolgung wurde bei der Verlinkung in der Studio-Testausgabe präzisiert und die Dateinamen für die Methodenverfolgung wurden so korrigiert, dass sie auf dem Gerät/Host eindeutig sind und nicht überschrieben werden, wenn mehrere Benchmarks ausgeführt werden. (I08e65, b/285912360)
  • Sorgt dafür, dass das Gerät beim Erfassen eines Baseline-Profils aktiv ist. (I503fc)

Version 1.2.0-beta05

30. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta05 ist veröffentlicht. Version 1.2.0-beta05 enthält diese Commits.

Neue Funktionen

  • Das Baseline-Profil-Gradle-Plug-in unterstützt jetzt das Android-Gradle-Plug-in 8.3. (aosp/2715214)

Version 1.2.0-beta04

23. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta04 ist veröffentlicht. Version 1.2.0-beta04 enthält diese Commits.

Neue Funktionen

  • Das Baseline-Profil-Gradle-Plug-in unterstützt jetzt das Android-Gradle-Plug-in 8.3. (aosp/2715214)

Fehlerkorrekturen

  • Fehler beim Schreiben / Verschieben und Abrufen von Dateien (insbesondere von Dateien aus parametrisierten Tests) werden behoben, indem die Namen der Ausgabedateien weiter bereinigt werden und „=“ und „:“ in den Namen der Ausgabedateien vermieden werden. (I759d8)

Version 1.2.0-beta03

9. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta03 ist veröffentlicht. Version 1.2.0-beta03 enthält diese Commits.

API-Änderungen

  • Argument zum Filtern von TraceSectionMetric nur auf das Zielpaket hinzugefügt, standardmäßig aktiviert (Ia219b, b/292208786)

Diverse Fehlerkorrekturen

  • Das Instrumentierungsargument fullTracing.enable wurde in perfettoSdkTracing.enable umbenannt, um die Konsistenz mit dem Artefaktnamen und anderen Referenzen zu gewährleisten. fullTracing.enable funktioniert weiterhin als Fallback. (I7cc00)
  • Interne Tracepoints der Benchmark-Bibliothek (einschließlich Microbenchmark-Schleifen-/Phasen-Tracing) werden jetzt im System-Trace-Viewer von Studio angezeigt und in Perfetto unter dem richtigen Prozess verschachtelt. (I6b2e7, b/293510459)
  • Der Macrobenchmark-Fehler NOT-PROFILEABLE wurde auf API 31+ entfernt und die Profiler-Prüfung auf gerooteten eng/userdebug-Geräten wird übersprungen. (I2abac, b/291722507)
  • Wenn Sie DEX-Layoutoptimierungen verwenden, werden Startprofilregeln jetzt auch als Baseline-Profilregeln betrachtet. (aosp/2684246, b/293889189)

Version 1.2.0-beta02

26. Juli 2023

androidx.benchmark:benchmark-*:1.2.0-beta02 ist veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.

API-Änderungen

  • Experimentelle APIs für benutzerdefinierte Messwerte und Konfigurationen von Microbenchmarks (z.B. Profiler und Tracing) hinzugefügt. (I86101, b/291820856)

Diverse Fehlerkorrekturen

  • Fehler im Makrobenchmark melden, wenn das Betriebssystem für das Tracing falsch konfiguriert ist. Dies wurde kürzlich in API 26/28 ARM64-Emulatoren behoben. (I0a328, b/282191686)
  • Der Fehler beim Zurücksetzen der Kompilierung wurde um Details ergänzt, die darauf hinweisen, dass der Emulator aktualisiert werden sollte, da dieses Problem bei einigen Emulatoren vor Kurzem behoben wurde. (I8c815, b/282191686)
  • Machen Sie androidx.test.uiautomator:uiautomator:2.2.0 zu einer api-Abhängigkeit anstelle einer implementation-Abhängigkeit. (I1981e)

Version 1.2.0-beta01

18. Juli 2023

androidx.benchmark:benchmark-*:1.2.0-beta01 ist veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem Warnungen in der Benchmark-Ausgabe in Studio manchmal unterdrückt wurden. Außerdem wurde ein Problem behoben, bei dem führende Leerzeichen aus der Benchmark-Ausgabe in Studio nicht angezeigt wurden (Ia61d0, b/227205461, b/286306579, b/285912360).
  • Der Kommentar für FrameTimingMetric wurde korrigiert. Der Untermesswert heißt frameDurationCpuMs. (Ib097f, b/288830934)

Version 1.2.0-alpha16

21. Juni 2023

androidx.benchmark:benchmark-*:1.2.0-alpha16 ist veröffentlicht. Version 1.2.0-alpha16 enthält diese Commits.

API-Änderungen

  • Die BaselineProfileRule.collectBaselineProfile() API wurde in BaselineProfileRule.collect() umbenannt. (I4b665)

Fehlerkorrekturen

  • Macrobenchmark-Unterstützung für androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • Das Profiling von Microbenchmarks wurde in eine separate Phase verschoben. Es erfolgt also nach der Messung und ersetzt diese nicht. MethodTracing-Trace-Abschnitte sind jetzt auch im erfassten Perfetto-Trace enthalten, sofern vorhanden. (I9f657, b/285014599)
  • Fügen Sie TraceSectionMetric mit Mode.Sum eine Zählungsmessung hinzu. (Ic121a, b/264398606)

Version 1.2.0-alpha15

7. Juni 2023

androidx.benchmark:benchmark-*:1.2.0-alpha15 ist veröffentlicht. Version 1.2.0-alpha15 enthält diese Commits.

Neue Funktionen

  • Es wurde eine experimentelle MemoryUsageMetric zum Erfassen der Speichernutzung einer Zielanwendung hinzugefügt. (I56453, b/133147125, b/281749311)
  • Unterstützung für vollständig benutzerdefinierte Perfetto-Konfigurationen mit PerfettoTrace.record hinzugefügt (If9d75, b/280460183)
  • Property zum Überspringen der Baseline-Profilgenerierung hinzugefügt. Verwendung: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)

API-Änderungen

  • Die collectBaselineProfile API generiert immer stabile Baseline-Profile. Die collectStableBaselineProfile-API wurde entfernt. Verwenden Sie stattdessen collectBaselineProfile. (I17262, b/281078707)
  • Das filterPredicate-Argument von BaselineProfileRule wurde in „nicht null“ geändert. Es hat einen entsprechenden Standardwert, damit das Standardfilterverhalten in der Dokumentation klarer ist. (I3816e)

Fehlerkorrekturen

  • Deaktivieren Sie IsolationActivity und das Perfetto-Tracing in dryRunMode, um die Leistung erheblich zu verbessern, da diese den Großteil der Laufzeit ausmachten. (Ie4f7d)
  • Unterstützung für Aufrufstack-Sampling in Makro-Benchmarks mit den Instrumentierungstestargumenten androidx.benchmark.profiling.mode=StackSampling und androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Es wurde ein Absturz behoben, der beim Verwerfen von Shadern unter Android U (API 34) sowie in Emulatoren auftrat. (I031ca, b/274314544)

Version 1.2.0-alpha14

3. Mai 2023

androidx.benchmark:benchmark-*:1.2.0-alpha14 ist veröffentlicht. Version 1.2.0-alpha14 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Fehler behoben, bei dem FrameTimingMetric Frames mit inkonsistenten Frame-IDs ignoriert hat. Dies führte dazu, dass bei einigen Animationen auf aktuellen Plattformversionen (API 31+) viele Frames ignoriert wurden, während RenderThread animiert wurde (z.B. während eines Ripples). (I747d2, b/279088460)
  • Die Verarbeitung von Traces, die größer als 64 MB sind, wurde korrigiert. (Ief831, b/269949822)
  • Die Generierung von Baseline-Profilen unter Android U schlug fehl, weil die Ausgabe des Befehls pm dump-profiles anders war. Dieser Fehler wurde behoben. (Id1392, b/277645214)
  • Das Skript zum Sperren des GPU-Takts wurde korrigiert, damit Strings korrekt verglichen werden (I53e54, b/213935715).

Version 1.2.0-alpha13

5. April 2023

androidx.benchmark:benchmark-*:1.2.0-alpha13 ist veröffentlicht. Version 1.2.0-alpha13 enthält diese Commits.

API-Änderungen

  • Beim Erstellen von Baseline-Profilen wurde der Parameter „profile type“ hinzugefügt, um die kommende Funktion für Startprofile zu unterstützen (Ie20d7, b/275093123).
  • Neue experimentelle TraceMetric API zum Definieren vollständig benutzerdefinierter Messwerte basierend auf dem Inhalt eines Perfetto-Trace hinzugefügt. (I4ce31, b/219851406)
  • Fügen Sie einen experimentellen Messwert hinzu, um die Anzahl der Seitenfehler während eines Benchmarks zu ermitteln. (I48db0)

Version 1.2.0-alpha12

22. März 2023

androidx.benchmark:benchmark-*:1.2.0-alpha12 ist veröffentlicht. Version 1.2.0-alpha12 enthält diese Commits.

Neue Funktionen

  • Das neue Gradle-Plug-in für Baseline-Profile ist in der Alphaversion verfügbar. Es vereinfacht das Generieren von Baseline-Profilen und den Entwickler-Workflow.

API-Änderungen

  • Die Unterstützung für Perfetto-Tracing wurde für die APIs 21 und 22 entfernt. Dies umfasst sowohl Microbenchmarks als auch die experimentellen PerfettoTrace-APIs. Vor dieser Version waren UiAutomation-Verbindungen auf einigen Geräten unzuverlässig. (I78e8c)
  • Öffentliche experimentelle API für PerfettoTraceProcessor hinzugefügt, um das Parsen von Trace-Inhalten zu ermöglichen. Dies ist ein Schritt hin zu vollständig benutzerdefinierten Messwerten, die auf Perfetto-Trace-Daten basieren. (I2659e, b/219851406)

Version 1.2.0-alpha11

8. März 2023

androidx.benchmark:benchmark-*:1.2.0-alpha11 ist veröffentlicht. Version 1.2.0-alpha11 enthält diese Commits.

Fehlerkorrekturen

  • Abstürze in MacrobenchmarkRule und BaselineProfileRule beim Neuinstallieren oder Extrahieren von Profilen aus einem App-Bundle mit mehreren APKs wurden behoben. (I0d8c8, b/270587281)

Version 1.2.0-alpha10

22. Februar 2023

androidx.benchmark:benchmark-*:1.2.0-alpha10 ist veröffentlicht. Version 1.2.0-alpha10 enthält diese Commits.

Neue Funktionen

  • Unter Android 14 und höher werden Zielanwendungen nicht mehr neu installiert, um den Kompilierungsstatus zurückzusetzen. Das ist einer neuen Plattformfunktion zu verdanken. Bisher war es erforderlich, ein gerootetes Gerät zu haben oder damit umzugehen, dass der gesamte Anwendungsstatus (z.B. Nutzeranmeldung) vor jedem Benchmark entfernt wurde. (I9b08c, b/249143766)

Diverse Fehlerkorrekturen

  • DryRunMode wurde korrigiert, sodass es aufgrund des Überspringens der Kompilierung nicht mehr mit einem leeren Profil abstürzt. Stattdessen wird eine einzelne Iteration ausgeführt und das Profil extrahiert, um sicherzustellen, dass etwas erfasst wird. (I2f05d, b/266403227)
  • Der PowerMetric-Absturz beim Prüfen des Vorhandenseins von Powerstats auf alten API-Ebenen wurde behoben. (5faaf9, b/268253898)

Version 1.2.0-alpha09

11. Januar 2023

androidx.benchmark:benchmark-*:1.2.0-alpha09 ist veröffentlicht. Version 1.2.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • Die Übergabe von None an das Instrumentationsargument androidx.benchmark.enabledRules wurde aktiviert, um die Generierung aller Benchmarks / Baseline-Profile zu deaktivieren. (I3d7fd, b/258671856)
  • Fehler bei der PerfettoTrace-Erfassung in App-Modulen (d.h. nicht selbstinstrumentierenden Test-APKs) behoben (I12cfc)
  • Die Reihenfolge der ADB-Pull-Argumente für das Baseline-Profil in der Studio-Ausgabe wurde korrigiert (I958d1, b/261781624).
  • Der Arm-Emulator API 33 wird jetzt beim Ausführen eines Makrobenchmarks korrekt als solcher erkannt und die Warnung wird korrekt ausgegeben. (69133b,b/262209591)
  • Prüfung des Akkustands auf Geräten ohne Akku in Macrobenchmark überspringen (fe4114, b/232448937)

Version 1.2.0-alpha08

7. Dezember 2022

androidx.benchmark:benchmark-*:1.2.0-alpha08 ist veröffentlicht. Version 1.2.0-alpha08 enthält diese Commits.

API-Änderungen

  • Die neuen experimentellen APIs PerfettoTrace.record {} und PerfettoTraceRule wurden hinzugefügt, um Perfetto-Traces (auch als System-Traces bezeichnet) im Rahmen eines Tests zu erfassen und das Testverhalten und die Leistung zu prüfen. (I3ba16)
  • BaselineProfileRule akzeptiert jetzt ein Filterprädikat anstelle einer Liste von Paketpräfixen. So hat der Test die volle Kontrolle über die Filterung. (I93240)
  • Eine experimentelle API BaselineProfileRule.collectStableBaselineProfile wurde hinzugefügt, die so lange wartet, bis ein Baseline-Profil für N Iterationen stabil ist. (I923f3)
  • Es wurde die Möglichkeit hinzugefügt, beim Generieren von Baseline-Profilen mit BaselineProfileRule ein Präfix für den Namen der Ausgabedatei anzugeben. (I7b59f, b/260318655)

Diverse Fehlerkorrekturen

  • Die Sicherheit beim Schreiben von Dateiausgaben wurde verbessert, um zu verhindern, dass Ausgabedateien ohne Benachrichtigung nicht geschrieben oder angehängt werden, insbesondere bei API 21/22. (If8c44, b/227510293)
  • Korrigieren Sie die Trace-Ausgabe von simpleperf, um die Datei korrekt zu erstellen und zu platzieren. Dadurch sollten auch Probleme behoben werden, bei denen eine Datei nicht von Gradle abgerufen werden kann. (I12a1c, b/259424099)
  • Die Fehlermeldung von „profileinstaller“ wurde verbessert, die ausgegeben wird, wenn „profileinstaller“ zu alt ist. Sie werden jetzt aufgefordert, die Profileinstaller-Version (1.2.1) zu aktualisieren, um Baseline-Profile auf API 31 bis 33 zu messen, anstatt dass die Meldung angezeigt wird, dass dies nicht unterstützt wird. (Ia517f, b/253519888)
  • Behebung mehrerer Fehler bei Shell-Befehlen, die bei Fehlern auftreten, wenn die erforderliche API <=23 ist, einschließlich fehlgeschlagener Einrichtung der Binärdatei für die Perfetto-Erfassung und Fehler bei der Trace-Erfassung (Ib6b87, b/258863685)
  • Generierte Profilregeln automatisch sortieren, um die Anzahl der Änderungen zu minimieren, wenn sie sich im Laufe der Zeit ändern (beim Einchecken von Profilregeln in die Quellcodeverwaltung). (Ie2509)
  • Absturz auf nicht gerooteten Builds unter Android 13 (API 33) mit der Meldung Expected no stderr from echo 3 > /proc/sys/vm/drop_caches behoben (I6c245, b/259508183)

Bekannte Probleme – MacrobenchmarkScope.dropShaderCache() kann aufgrund einer fehlenden Broadcast-Registry im Manifest von profileinstaller abstürzen, das noch nicht veröffentlicht wurde. (I5c728, b/258619948) Um das Problem in profileinstaller:1.3.0-alpha02 zu umgehen, fügen Sie der AndroidManifest.xml-Datei Ihrer Anwendung (nicht Ihres Benchmarks) Folgendes hinzu:

  <!-- 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>

Version 1.2.0-alpha07

9. November 2022

androidx.benchmark:benchmark-*:1.2.0-alpha07 ist veröffentlicht. Version 1.2.0-alpha07 enthält diese Commits.

API-Änderungen

  • Die PowerMetric API zum Messen von Energie und Leistung in Macrobenchmarks wurde hinzugefügt. (Ife601, b/220183779)
  • MacrobenchmarkScope.dropShaderCache() wurde korrigiert, sodass der Shader-Cache tatsächlich gelöscht wird. Dadurch werden etwa 20 ms Rauschen aus StartupMode.COLD-Benchmarks entfernt, da Shader jetzt in jeder Iteration konsistent gelöscht werden. Bisher wurden bei der Partial-Kompilierung mit Warmup-Iterationen fälschlicherweise schnelle Zahlen gemeldet, da das Shader-Caching während des Warmups wahrscheinlicher war. Für diese Korrektur ist entweder ein gerootetes Gerät oder die Verwendung von profileinstaller:1.3.0-alpha02 in der Ziel-App erforderlich. Informationen zu API-Änderungen der ProfileInstaller-Bibliothek finden Sie auf der Seite ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • TraceSectionMode("label", Mode.Sum) wurde hinzugefügt, um die Gesamtzeit zu messen, die für mehrere Trace-Abschnitte mit demselben Label aufgewendet wurde. Beispielsweise wird für TraceSectionMetric("inflate", Mode.Sum) ein Messwert inflateMs für die Gesamtzeit in einem Makrobenchmark gemeldet, die für die Inflation aufgewendet wurde. Die Anforderung für API 29 wurde ebenfalls entfernt, da TraceSectionMetric in Verbindung mit androidx.tracing.Trace auch bei niedrigeren API-Levels funktioniert, wenn forceEnableAppTracing in der Ziel-App verwendet wird. (Id7b68, b/231455742)

Diverse Fehlerkorrekturen

  • Die Sicherheit aller internen Shell-Befehle wurde durch die Validierung aller Ausgaben/Fehler verbessert. (I5984d, b/255402908, b/253094958)
  • Gerät im Befehl adb pull für das Baseline-Profil angeben, damit der Pull-Befehl einfach kopiert werden kann, wenn mehrere Geräte verbunden sind (bis zu einem Emulator) (I6ac6c, b/223359380)
  • Fehler hinzugefügt, wenn die APK für den Makrobenchmark-Test nicht als selbstinstrumentierend eingerichtet ist. Dieser Fehler verhindert das Macrobenchmarking im Prozess der Ziel-App. In-Process-Macrobenchmarks können die App nicht kompilieren, beenden oder kalt starten und auch nicht ihre eigenen Berechtigungen steuern (I4279b).
  • Ein Problem in measureRepeated() wurde behoben, bei dem der Zielprozess nach setupBlock nicht durch StartupMode.COLD beendet wurde. Wenn Nutzer jetzt mit der App interagieren, wird der App-Prozess nicht mehr ausgeführt und es wird keine ungültige Kaltstartmessung mehr durchgeführt.setupBlock (I8ebb7)

Version 1.2.0-alpha06

24. Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha06 ist veröffentlicht. Version 1.2.0-alpha06 enthält diese Commits.

API-Änderungen

  • BaselineProfileRule erfordert unter Android 13 (API 33) keinen Root-Zugriff mehr und ist nicht mehr experimentell. (Ie0a7d, b/250083467, b/253094958)
    • Durch diese Änderung wird auch behoben, wie Profile einer App auf nicht gerooteten Geräten auf die Festplatte geschrieben werden. Dazu muss jedoch die „profileinstaller“-Abhängigkeit der Ziel-App aktualisiert werden.
    • Wenn Sie BaselineProfileRule oder CompilationMode.Partial(warmupIterations) auf einem nicht gerooteten Gerät verwenden möchten, müssen Sie auch Ihre Ziel-App aktualisieren, um androidx.profileinstaller.profileinstaller:1.3.0-alpha01 zu verwenden. Dadurch wird das Profil korrekt auf die Festplatte geschrieben, sodass es kompiliert/extrahiert werden kann.

Diverse Fehlerkorrekturen

  • Behebt einen Absturz von SampledProfiling bei API 33 und höher. (I40743, b/236109374)

Version 1.2.0-alpha05

5. Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha05 ist veröffentlicht. Version 1.2.0-alpha05 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Problem mit der Aufschlüsselung von Frames im Studio-System-Trace-Viewer für Benchmark-Traces behoben (I3f3ae, b/239677443)
  • Korrektur von FrameTimingMetric, sodass FrameOverrun API 31 anstelle von API 29 erfordert (I716dd, b/220702554)
  • Legen Sie die Iteration in BaselineProfileRule fest und lösen Sie einen Fehler aus, wenn das Zielpaket nicht installiert ist (wurde bereits für MacrobenchmarkRule durchgeführt). (Ic09a3, b/227991471)

Version 1.2.0-alpha04

21. September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha04 ist veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Unterstützung für das dryRunMode.enable-Instrumentierungsargument für Makrobenchmarks hinzugefügt (bereits in Mikrobenchmarks verfügbar), um die lokale Entwicklung zu beschleunigen und die App-Automatisierung zu validieren (z.B. in Presubmit). Dadurch wird die Anzahl der Iterationen auf 1 festgelegt, die Kompilierung übersprungen, alle Konfigurationsfehler unterdrückt und die Ausgabe der Datei „measurement .json“ deaktiviert. (Ib51b4, b/175149857)

    In der Gradle-Befehlszeile:

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

    In build.gradle:

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

Diverse Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem StartupTimingMetric nicht mehr erfordert, dass gemessene Aktivitäten über MacrobenchmarkScope.startActivityAndWait() gestartet werden. Das bedeutet, dass der Messwert Starts aus z.B. Benachrichtigungen, Context.startActivity(), aktivitätsbasierter Navigation in der App oder Shell-Befehlen erfassen kann. (Ia2de6, b/245414235)
  • Ein Fehler wurde behoben, bei dem startActivityAndWait ein Zeitlimit überschritt, weil es auf Emulatoren auf den Abschluss des Starts wartete. Die Strenge der Frame-Erkennung wurde reduziert. (Ibe2c6, b/244594339, b/228946895)

Version 1.2.0-alpha03

7. September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha03 ist veröffentlicht. Version 1.2.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Es wurden experimentelle APIs hinzugefügt, um BenchmarkState unabhängig von BenchmarkRule / JUnit4 zu verwenden. (Id478f, b/228489614)

Fehlerkorrekturen

Version 1.2.0-alpha02

24. August 2022

androidx.benchmark:benchmark-*:1.2.0-alpha02 ist veröffentlicht. Version 1.2.0-alpha02 enthält diese Commits.

API-Änderungen

  • Standardmäßig wird am force stop für MacrobenchmarkScope.killProcess() verwendet, auch wenn das Gerät gerootet ist, außer während der Generierung des Baseline-Profils. Dies kann mit einem optionalen booleschen Argument überschrieben werden. (02cce9, b/241214097)

Fehlerkorrekturen

  • Unterstützung der Generierung von Basisprofilen für System-Apps. (I900b8, b/241214097)
  • Unterstützung für die Prüfung von ODPM-Leistungsmesswerten auf nicht gerooteten Geräten. (a38c78, b/229623230)

Version 1.2.0-alpha01

27. Juli 2022

androidx.benchmark:benchmark-*:1.2.0-alpha01 ist veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Neue Komponente „tracing-perfetto-common“, mit der Tools das Perfetto SDK-Tracing in einer App aktivieren können, die es verfügbar macht (I2cc7f)
  • Das Instrumentierungsargument androidx.benchmark.enabledRules wurde hinzugefügt, um das Filtern von Macrobenchmark-Ausführungen auf nur Benchmarks oder nur die Generierung von Baseline-Profilen zu ermöglichen. Übergib „Macrobenchmark“ oder „BaselineProfile“, um nur einen Testtyp auszuführen, z.B. wenn du nur BaselineProfiles in einem Emulator generierst. Durch Kommas getrennte Liste wird ebenfalls unterstützt. (I756b7, b/230371561)

    Beispiel für die Datei „build.gradle“ Ihres Makro-Benchmarks:

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

    Oder über die Gradle-Befehlszeile:

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

API-Änderungen

  • Es wurde ein neues PowerMetric zum Messen von Energie- und Leistungsaufgaben in Benchmarks hinzugefügt. (I9f39b, b/220183779)
  • Ein neuer Kompilierungsmodus CompilationMode.Ignore wurde hinzugefügt, mit dem das Zurücksetzen und Kompilieren von Profilen übersprungen werden kann. (Ibbcf8, b/230453509)
  • BaselineProfileRule#collectBaselineProfile wurde ein neuer Parameter hinzugefügt, um die Ausgabedatei nach Paketnamen zu filtern (If7338, b/220146561)
  • Ermöglicht Entwicklern, das Gerät zu entladen, um den Stromverbrauch zu messen. (I6a6cb)
  • In MacrobenchmarkScope kann jetzt der Shader-Cache geleert werden. (I32122)
  • Ermöglicht Entwicklern, die Anzeige des Messwerttyps zu konfigurieren und die gewünschten Subsystemkategorien anzugeben. (I810c9)
  • Bisher wurde im Benchmark ein UnsupportedOperationException-Fehler ausgegeben, wenn er auf einem nicht unterstützten Gerät ausgeführt wurde. UOE tritt jetzt nur noch auf, wenn der Messwert auf dem nicht unterstützten Gerät (d. h. PowerMetric.configure) verwendet wird. (I5cf20, b/227229375)
  • TotalPowerMetric und TotalEnergyMetric wurden hinzugefügt, um die Gesamtleistung und -energie in jeder Systemkategorie in Makro-Benchmarks zu messen. (I3b26b, b/224557371)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem kompilierte Methoden zwischen den einzelnen Makro-Benchmarks bei Builds ohne Root-Zugriff nicht korrekt zurückgesetzt wurden. Dazu muss die APK bei jeder Iteration neu installiert werden, wodurch die Anwendungsdaten für jeden Makrobenchmark gelöscht werden. (I31c74, b/230665435)
  • Absturz bei der Aufzeichnung von Traces auf API 21/22 behoben (If7fd6, b/227509388, b/227510293, b/227512788)
  • Die Erkennung des Abschlusses von Aktivitätsstarts wurde überarbeitet, um die Ausnahme „Es konnten keine Messwerte gelesen werden“ in Makrobenchmarks beim Start zu beheben. (Ia517c)

Version 1.1.1

Version 1.1.1

9. November 2022

androidx.benchmark:benchmark-*:1.1.1 ist veröffentlicht. Version 1.1.1 enthält diese Commits.

Fehlerkorrekturen

  • Behebt android.system.ErrnoException: open failed: EACCES, der auf einigen Geräten mit Android 11 (API 30) oder höher auftrat. Dies ist ein Cherry-Pick einer Fehlerbehebung aus 1.2.0-alpha01. (aosp/2072249)

Version 1.1.0

Version 1.1.0

15. Juni 2022

androidx.benchmark:benchmark-*:1.1.0 ist veröffentlicht. Version 1.1.0 enthält diese Commits.

  • Diese Version ist identisch mit androidx.benchmark:benchmark-*:1.1.0-rc03.

Wichtige Änderungen seit 1.0.0

Version 1.1.0-rc03

1. Juni 2022

androidx.benchmark:benchmark-*:1.1.0-rc03 ist veröffentlicht. Version 1.1.0-rc03 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Vermeiden Sie es, das Zielpaket bei jeder Benchmark-Iteration neu zu installieren. ( aosp/​​2093027, b/231976084)

  • Entfernen Sie die Verzögerung von 300ms aus pressHome(). (aosp/2086030, b/231322975)

  • Die Iterationsgeschwindigkeit von Macrobenchmark wurde durch die Optimierung der im Hintergrund verwendeten Shell-Befehle verbessert. (aosp/2086023, b/231323582)

  • Unterstützung für verwaltete Gradle-Geräte beim Generieren von Baseline-Profilen mit Macrobenchmarks. (aosp/2062228, b/228926421)

Version 1.1.0-rc02

11. Mai 2022

androidx.benchmark:benchmark-*:1.1.0-rc02 ist veröffentlicht. Version 1.1.0-rc02 enthält diese Commits.

  • Diese Version enthält eine Verhaltensänderung, da Apps jetzt zwischen den einzelnen Benchmarks vollständig neu installiert werden, um genaue Messungen zu ermöglichen.

Fehlerkorrekturen/Verhaltensänderungen

  • Ein Problem wurde behoben, durch das die App-Kompilierung zwischen Makro-Benchmarks nicht richtig und bei Builds ohne Root-Zugriff überhaupt nicht zurückgesetzt wurde. So werden viele Fälle behoben, in denen die Ausführung mehrerer Tests dazu führen würde, dass CompilationMode kaum oder gar keine Auswirkungen auf die Analysen hat. Um dieses Problem zu umgehen, wird die Ziel-App jetzt bei jeder Testmethode vollständig neu installiert. Dadurch werden die Anwendungsdaten zwischen den einzelnen Makro-Benchmarks gelöscht. (I31c74, b/230665435)

  • Da dies verhindert, dass Apps vor Tests einen Status einrichten, ist es jetzt möglich, die Kompilierung bzw. Neuinstallation zu überspringen, um dieses Problem zu umgehen. Sie können das Ziel beispielsweise mit dem Shell-Befehl cmd package compile -f -m speed <package> vollständig kompilieren und dann den Kompilierungsschritt des Macrobenchmarks umgehen.

    Beispiel in der Datei „build.gradle“ Ihres Makrobenchmarks:

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

    Oder über die Gradle-Befehlszeile:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Durch Hinzufügen des Instrumentierungsarguments androidx.benchmark.enabledRules ist es jetzt möglich, ein Modul zwischen Makro-Benchmarks und Tests zur Generierung von Baseline-Profilen zu teilen. Übergeben Sie „Macrobenchmark“ oder „BaselineProfile“, um nur einen Testtyp auszuführen, z.B. beim Generieren von BaselineProfiles auf einem Emulator. (I756b7, b/230371561)

    Beispiel in der Datei „build.gradle“ Ihres Makro-Benchmarks:

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

    Oder über die Gradle-Befehlszeile:

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

Version 1.1.0-rc01

20. April 2022

androidx.benchmark:benchmark-*:1.1.0-rc01 ist veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Die Ausgabelinks für das Baseline-Profil in Android Studio verwenden jetzt einen eindeutigen Dateinamen. So spiegelt die Ausgabe immer die neuesten Ergebnisse der Verwendung eines BaselineProfileRule wider. ( aosp/2057008, b/228203086 )

Version 1.1.0-beta06

6. April 2022

androidx.benchmark:benchmark-*:1.1.0-beta06 ist veröffentlicht. Version 1.1.0-beta06 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Absturz bei der Trace-Aufzeichnung in API 21/22 behoben (If7fd6, b/227509388)
  • Die Erkennung des Abschlusses des Aktivitätsstarts wurde überarbeitet, um die Ausnahme „Unable to read any metrics“ (Keine Messwerte lesbar) in Startup-Makro-Benchmarks zu beheben. (Ia517c)
  • Problem mit Startmesswerten für Macrobenchmarks behoben, wenn CompilationMode.None() verwendet wird. Vor dieser Änderung schien CompilationMode.Partial() langsamer als Compilation.None() zu sein. (611ac9).

Version 1.1.0-beta05

23. März 2022

androidx.benchmark:benchmark-*:1.1.0-beta05 ist veröffentlicht. Version 1.1.0-beta05 enthält diese Commits.

Fehlerkorrekturen

  • Paket beenden, nachdem die Profilinstallation bei Verwendung von CompilationMode.None übersprungen wurde. (aosp/1991373)
  • Ein Problem wurde behoben, durch das mit Macrobenchmarks keine Startmesswerte erfasst werden konnten, wennStartupMode.COLDverwendet wurde. (aosp/2012227 b/218668335)

Version 1.1.0-beta04

23. Februar 2022

androidx.benchmark:benchmark-*:1.1.0-beta04 ist veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.

Fehlerkorrekturen

  • Fehlende Messwerte unter Android 10 und NoSuchElementException beheben, die dadurch verursacht werden, dass Prozessnamen in Traces nicht richtig erfasst werden. (Ib4c17, b/218668335)

  • Verwenden Sie PowerManager für die Erkennung von thermischer Drosselung auf Q (API 29) und höher. Dadurch wird die Häufigkeit von Falschmeldungen bei der Erkennung von Thermal Throttling (Benchmark-Wiederholung nach 90 Sekunden Abkühlzeit) deutlich reduziert und Benchmarks werden auf Nutzer-Builds deutlich beschleunigt. Außerdem wird die Drosselung auch dann erkannt, wenn die Taktfrequenzen gesperrt sind (wenn sie für die physische Umgebung des Geräts zu hoch gesperrt sind). (I9c027, b/217497678, b/131755853)

  • Einfaches Profiling von Simpleperf auf den Thread measureRepeated filtern, um die Überprüfung zu vereinfachen (Ic3e12, b/217501939)

  • Unterstützung von Messwerten aus benannten UI-Unterprozessen in Apps mit mehreren Prozessen (Ice6c0, b/215988434)

  • Baseline-Profilregeln werden gefiltert, um Android 9 (SDK 28) als Ziel festzulegen. aosp/1980331 b/216508418

  • Überspringen Sie die Profilinstallation, wenn Sie Compilation.None() verwenden. Außerdem werden Warnungen ausgegeben, wenn die App eine ältere Version von androidx.profileinstaller und dem Android-Gradle-Plug-in verwendet. aosp/1977029

Version 1.1.0-beta03

9. Februar 2022

androidx.benchmark:benchmark-*:1.1.0-beta03 ist veröffentlicht. Version 1.1.0-beta03 enthält diese Commits.

API-Änderungen

  • AudioUnderrunMetric wurde unter einem experimentellen Flag zur Macrobenchmark-Bibliothek hinzugefügt, um die Erkennung von Audio-Underruns zu ermöglichen (Ib5972)
  • BaselineProfileRule akzeptiert keinen setup-Block mehr, da dieser dieselbe Funktion wie profileBlock hatte. (Ic7dfe, b/215536447)

    Beispiel:

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

Diverse Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem Microbenchmark-Profiler-Traces bei nachfolgenden Ausführungen nicht aktualisiert wurden, wenn sie in der Studio-Ausgabe verknüpft waren (I5ae4d, b/214917025).
  • Kompilierung von Shell-Befehlen auf API 23 verhindern (Ice380)
  • FrameCpuTime wurde in FrameDurationCpu und FrameUiTime in FrameDurationUi umbenannt, um zu verdeutlichen, dass es sich um Dauern und nicht um Zeitstempel handelt, und um die Präfixe anzupassen. (I0eba3, b/216337830)

Version 1.1.0-beta02

26. Januar 2022

androidx.benchmark:benchmark-*:1.1.0-beta02 ist veröffentlicht. Version 1.1.0-beta02 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Die Ergebnisse von Microbenchmark Stack Sampling / Method Tracing Profile sind jetzt in der Studio-Ausgabe verknüpft, ähnlich wie andere Profiling-Ausgaben, und unterdrücken den Zuweisungs-Messwert nicht. (Idcb65, b/214440748, b/214253245)
  • „BaselineProfileRule“ gibt jetzt den Befehl adb pull in der Logcat- und Studio-Ausgabe aus, um die generierte BaselineProfile-Textdatei abzurufen. (f08811)

Version 1.1.0-beta01

12. Januar 2022

androidx.benchmark:benchmark-*:1.1.0-beta01 ist veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.

Diverse Fehlerkorrekturen

  • Behebt das Problem, dass das Profiler-Argument „enable“ ignoriert wird. (I37373, b/210619998)
  • Eingestelltes CompliationModes entfernt (I98186, b/213467659)
  • Das Argument „baselineProfile“ von CompilationMode.Partial wurde zur besseren Verständlichkeit in eine Aufzählung geändert. (Id67ea)

Version 1.1.0-alpha13

15. Dezember 2021

androidx.benchmark:benchmark-*:1.1.0-alpha13 ist veröffentlicht. Version 1.1.0-alpha13 enthält diese Commits.

API-Änderungen

  • System Tracing mit geringem Overhead wird der Microbench-Ausgabe unter Android Q (API 29+) hinzugefügt. Derzeit werden keine benutzerdefinierten Traces (über die Jetpack-APIs android.os.Trace oder androidx.tracing) erfasst, um die Ergebnisse nicht zu beeinträchtigen. Dieses Tracing sollte bei der Diagnose von Instabilität hilfreich sein, insbesondere bei Quellen außerhalb des Benchmarks. (I298be, b/205636583, b/145598917)
  • CompilationModes in drei Klassen unterteilen: Vollständig, Keine, Teilweise. Zuvor wurden sie uneinheitlich nach Kompilierungsargumenten (die wir jetzt als Implementierungsdetails behandeln) und Funktionen benannt. Dadurch werden die Kompromisse, potenziellen Kombinationen und das Verhalten über Plattformversionen hinweg deutlicher. (I3d7bf, b/207132597)
  • Einrichtung und Messung sind jetzt immer paarweise und in der richtigen Reihenfolge angeordnet. Sie können jetzt den Paketnamen und die Iteration abfragen (obwohl die Iteration in bestimmten Warmup-Szenarien null sein kann). (Id3b68, b/208357448, b/208369635)

Diverse Fehlerkorrekturen

  • Fehler behoben, bei dem CompilationMode.Speed fälschlicherweise als None behandelt wurde (I01137)

Version 1.1.0-alpha12

17. November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha12 ist veröffentlicht. Version 1.1.0-alpha12 enthält diese Commits.

Neue Funktionen

  • Experimentellen TraceSectionMetric für benutzerdefinierte zeitbasierte Messungen hinzufügen. (I99db1, b/204572664)

Diverse Fehlerkorrekturen

  • Gerät bei jeder Iteration aktivieren, damit die Benutzeroberfläche getestet werden kann – erfordert, dass der Sperrbildschirm deaktiviert ist. (Ibfa28, b/180963442)
  • Mehrere Abstürze im StackSampling-Profilierungsmodus auf Emulatoren und nicht gerooteten Geräten wurden behoben (Icdbda, b/202719335).
  • Am Ende jeder Iteration wurde eine Pause von 0,5 Sekunden entfernt.Wenn Sie aufgrund dieser Änderung fehlende Messwerte feststellen, melden Sie bitte einen Fehler. (Iff6aa)
  • Reduzierung der Wahrscheinlichkeit von Datenverlusten und des Speicher-Overheads durch Tracing (Id2544, b/199324831, b/204448861)
  • Die Trace-Größe wurde durch die Umstellung auf das kompakte Sched-Speicherformat um ca. 40% reduziert. (Id5fb6, b/199324831)
  • Die Implementierungen von Startmesswerten wurden aktualisiert, sodass sie immer am Ende des Renderthreads enden. Das ist über alle Plattformversionen hinweg einheitlicher und entspricht eher den In-App-Messungen. (Ic6b55)

Version 1.1.0-alpha11

3. November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha11 ist veröffentlicht. Version 1.1.0-alpha11 enthält diese Commits.

API-Änderungen

  • Macrobenchmark hat jetzt die minSdkVersion 23. (If2655)
  • Fügt ein neues experimentelles BaselineProfileRule hinzu, mit dem Baseline-Profile für die kritische User Journey einer App generiert werden können. Eine detaillierte Dokumentation folgt. (Ibbefa, b/203692160)
  • Entfernt die Schnittstellenvariante „measureRepeated“, die für Java-Aufrufer hinzugefügt wurde, da sie zu Unklarheiten beim Abschließen/Auflösen der Methode führte. Java-Aufrufer müssen wieder Unit.Instance von measureRepeated zurückgeben. Wenn das ein Problem ist, melden Sie bitte einen Fehler. Wir können uns das in einer zukünftigen Version noch einmal ansehen. (Ifb23e, b/204331495)

Version 1.1.0-alpha10

27. Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha10 ist veröffentlicht. Version 1.1.0-alpha10 enthält diese Commits.

API-Änderungen

  • StartupTimingMetric so rückportiert, dass sie bis zur API 23 funktioniert. Diese neue Implementierung verarbeitet reportFullyDrawn() auch besser, um zu warten, bis die entsprechenden Inhalte gerendert wurden. (If3ac9, b/183129298)
  • JvmOverloads wurden mehreren MacrobenchmarkScope-Methoden für Java-Aufrufer hinzugefügt. (I644fe, b/184546459)
  • Alternative „MacrobenchmarkRule.measureRepeated“-Funktion, die ein Consumer<MacrobenchmarkScope> für die idiomatische Verwendung in der Java-Sprache verwendet. (If74ab, b/184546459)

Diverse Fehlerkorrekturen

  • Fehler behoben, bei dem Traces nicht früh genug gestartet wurden und Messwertdaten fehlten. Dadurch sollten Ausnahmen vom Typ „Unable to read any metrics during benchmark“ (Während des Benchmarks konnten keine Messwerte gelesen werden) behoben werden, die durch die Bibliothek selbst verursacht wurden. (I6dfcb, b/193827052, b/200302931)
  • FrameNegativeSlack wurde in FrameOverrun umbenannt, um die Bedeutung zu verdeutlichen: wie viel das Frame sein Zeitbudget überschritten hat. (I6c2aa, b/203008701)

Version 1.1.0-alpha09

13. Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha09 ist veröffentlicht. Version 1.1.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • Unterstützung für das Löschen des Kernel-Seitencaches ohne Root-Zugriff auf API 31/S+, wodurch die Genauigkeit von StartupMode.COLD-Starts erhöht wird. (Iecfdb, b/200160030)

Version 1.1.0-alpha08

29. September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha08 ist veröffentlicht. Version 1.1.0-alpha08 enthält diese Commits.

API-Änderungen

  • Scroll-Macrobenchmarks können jetzt bis zur API 23 ausgeführt werden (If39c2, b/183129298)
  • Der Benutzeroberfläche und der JSON-Ausgabe wurde ein neuer Typ von Stichprobenmesswert hinzugefügt, der sich auf Perzentile mehrerer Stichproben pro Iteration konzentriert. (I56247, b/199940612)
  • Wechsel zu Gleitkomma-Messwerten in den Benchmark-Bibliotheken (in der Studio-UI abgeschnitten). (I69249, b/197008210)

Version 1.1.0-alpha07

1. September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha07 ist veröffentlicht. Version 1.1.0-alpha07 enthält diese Commits.

API-Änderungen

  • Das Mindest-API-Level wurde auf 21 erhöht, um das niedrigste API-Level widerzuspiegeln, das in Zukunft unterstützt werden soll. Die aktuelle Mindest-API-Version wird weiterhin über RequiredApi() übermittelt und ist derzeit 29 (I440d6, b/183129298).

Diverse Fehlerkorrekturen

  • Es wurden Korrekturen für ProfileInstaller vorgenommen, um die Ausführung von Macrobenchmarks mit CompilationMode.BaselineProfile für Apps mit Baseline-Profilen zu vereinfachen. (I42657, b/196074999) HINWEIS: Erfordert auch ein Update auf androidx.profileinstaller:profileinstaller:1.1.0-alpha04 oder höher.
  • StartupMode.COLD + CompilationMode.None Benchmarks sind jetzt stabiler. (I770cd, b/196074999)

Version 1.1.0-alpha06

18. August 2021

androidx.benchmark:benchmark-*:1.1.0-alpha06 ist veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.

API-Änderungen

  • Das Instrumentierungsargument androidx.benchmark.iterations wurde hinzugefügt, um das manuelle Überschreiben der Iterationsanzahl beim lokalen Testen/Profilieren zu ermöglichen. (6188be, b/194137879)

Diverse Fehlerkorrekturen

  • Wechsel zu Simpleperf als Standard-Sampling-Profiler für API 29 und höher. (Ic4b34, b/158303822)

Bekannte Probleme

  • CompilationMode.BaselineProfile ist noch in der Entwicklung. Verwenden Sie ihn vorerst nicht, um die Qualität eines Profils zu bestimmen.

Version 1.1.0-alpha05

4. August 2021

androidx.benchmark:benchmark-*:1.1.0-alpha05 ist veröffentlicht. Version 1.1.0-alpha05 enthält diese Commits.

1.1.0-alpha04 wurde vor der Veröffentlichung aufgrund eines sporadischen Absturzes abgebrochen. b/193827052

API-Änderungen

  • startActivityAndWait wurde so geändert, dass der Start über am start aufgerufen wird. Dadurch wird die Zeit jeder Messiteration um etwa 5 Sekunden verkürzt, allerdings werden Intent-Parcelables nicht mehr unterstützt. (I5a6f5, b/192009149

Fehlerkorrekturen

  • Reduzieren Sie die Aggressivität der Erkennung von thermischer Drosselung und berechnen Sie die Referenz neu, wenn häufig Drosselungen erkannt werden. (I7327b)
  • Die FrameTimingMetric funktioniert jetzt auch in der Android S-Betaversion (Ib60cc, b/193260119).
  • Verwende einen EmptyActivity, um die Ziel-App aus dem Status „Beenden erzwingen“ zu holen und CompilationMode.BaselineProfile besser zu unterstützen. (Id7cac, b/192084204)
  • Die Dateiendung für die Tracedatei wurde in .perfetto-trace geändert, um dem Plattformstandard zu entsprechen. (I4c236, b/174663039)
  • „StartupTimingMetric“ gibt jetzt den Messwert „fullyDrawnMs“ aus, um die Zeit bis zum Abschluss des Renderings Ihrer Anwendung zu messen. Um diesen Messwert für Ihre App zu definieren, rufen Sie Activity.reportFullyDrawn auf, wenn Ihre ersten Inhalte bereit sind, z. B. wenn Ihre ersten Listenelemente aus der Datenbank oder dem Netzwerk geladen werden. Die Methode „reportFullyDrawn“ ist ohne Build-Versionsprüfungen für „ComponentActivity“ verfügbar. Beachte, dass der Test lange genug laufen muss, um den Messwert zu erfassen (startActivityAndWait wartet nicht auf reportFullyDrawn). (If1141, b/179176560)
  • Kosten für das Anhängen von UI-Metadaten an Traces um mehr als 50 ms reduziert (Ic8390, b/193923003)
  • Die Abfragehäufigkeit beim Beenden des Tracings wurde drastisch erhöht, wodurch sich z. B. die Laufzeit des Start-Benchmarks um mehr als 30 % reduzieren kann (Idfbc1, b/193723768).

Version 1.1.0-alpha03

16. Juni 2021

androidx.benchmark:benchmark-*:1.1.0-alpha03 ist veröffentlicht. Version 1.1.0-alpha03 enthält diese Commits.

Neue Funktionen

Diverse Fehlerkorrekturen

  • Der Gradle-Beispielcode zum Unterdrücken von Benchmark-Fehlern wurde aktualisiert, um eine nicht verworfene API mit einer Syntax zu verwenden, die auch .gradle.kts-Nutzer unterstützt.

    Beispiel:

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

Version 1.1.0-alpha02

18. Mai 2021

Mit Benchmark-Version 1.1.0-alpha02 wird eine wichtige Komponente für Benchmarking eingeführt: Macrobenchmark. Zusätzlich zu Benchmark, mit dem Sie CPU-Schleifen messen können, können Sie mit Macrobenchmark Interaktionen in der gesamten App wie Start und Scrollen messen und Traces erfassen. Weitere Informationen finden Sie in der Dokumentation zur Bibliothek.

androidx.benchmark:benchmark-*:1.1.0-alpha02 ist veröffentlicht. Version 1.1.0-alpha02 enthält diese Commits.

Neue Funktionen

Makrobenchmark-Artefakte hinzugefügt (androidx.benchmark:benchmark-macro-junit4 und androidx.benchmark:benchmark-macro)

  • Leistungsmesswerte beim Starten, Scrollen und Animieren Ihrer App lokal oder in der CI erfassen
  • Traces in Android Studio erfassen und prüfen

Diverse Fehlerkorrekturen

  • Problem mit Shell-Berechtigungen für das Ausgabeverzeichnis unter Android 12 umgehen (Hinweis: Möglicherweise muss das Android-Gradle-Plug-in auf Version 7.0.0 Canary und Android Studio auf Arctic Fox (2020.3.1) aktualisiert werden, damit Ausgabedateien auf betroffenen Geräten weiterhin erfasst werden können). (Icb039)
  • Unterstützung für Konfigurations-Caching in BenchmarkPlugin (6be1c1, b/159804788)
  • Vereinfachte Dateiausgabe – standardmäßig aktiviert, in einem Verzeichnis, für das kein requestLegacyExternalStorage=true erforderlich ist (8b5a4d, b/172376362)
  • Es wurde ein Problem behoben, bei dem die Bibliothek Logcat-Warnungen ausgab, dass der JIT-Thread auf Plattformversionen, auf denen er nicht vorhanden ist, nicht gefunden wurde. (I9cc63, b/161847393)
  • Fehler bei der maximalen Frequenz des Lesegeräts behoben. (I55c7a)

Version 1.1.0-alpha01

10. Juni 2020

androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 und androidx.benchmark:benchmark-junit4:1.1.0-alpha01 sind veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.

Neue Funktionen in Version 1.1

  • Zuweisungs-Messwert: Bei Benchmarks wird jetzt nach der Aufwärm- und Timing-Phase eine zusätzliche Phase ausgeführt, in der die Zuweisungsanzahl erfasst wird. Zuweisungen können auf älteren Versionen der Plattform zu Leistungsproblemen führen (140 ns in O wurden zu 8 ns in M – gemessen auf Nexus 5X mit gesperrten Taktfrequenzen). Dieser Messwert wird in der Konsolenausgabe von Android Studio sowie im
  • Profiling-Unterstützung: Sie können jetzt Profiling-Daten für einen Benchmark-Lauf erfassen, um zu prüfen, warum Ihr Code möglicherweise langsam ausgeführt wird. Benchmark unterstützt entweder das Erfassen von Methoden-Tracing oder Methoden-Sampling von ART. Diese Dateien können mit dem Profiler in Android Studio über File > Open untersucht werden.
  • Das Benchmark-Gradle-Plug-in bietet jetzt Standardeinstellungen für eine einfachere Einrichtung:
    • testBuildType ist standardmäßig auf „Release“ festgelegt, um die Verwendung von Abhängigkeiten mit integrierter Codeabdeckung zu vermeiden. Der Release-Build-Typ ist auch als Standard-Build-Typ konfiguriert. So kann Android Studio automatisch die richtige Build-Variante auswählen, wenn ein Projekt zum ersten Mal geöffnet wird. (b/138808399)
    • signingConfig.debug wird als Standardsignaturkonfiguration verwendet (b/153583269).

** Fehlerkorrekturen **

  • Der Übergang zum Warm-up wurde deutlich verkürzt. Die erste Messung für jeden Benchmark war künstlich höher als andere. Dieses Problem war bei sehr kleinen Benchmarks (1 Mikrosekunde oder weniger) stärker ausgeprägt. (b/142058671)
  • Der Fehler InstrumentationResultParser, der bei der Ausführung über die Befehlszeile für jeden Benchmark ausgegeben wurde, wurde behoben. (I64988, b/154248456)

Bekannte Probleme

  • Bei Benchmark-Aufrufen über die Befehlszeile oder Gradle werden die Ergebnisse nicht direkt ausgegeben. Sie können dieses Problem umgehen, indem Sie entweder Studio verwenden oder die JSON-Ausgabedatei nach Ergebnissen parsen.
  • Bei der Benchmark-Berichterstellung kann der Bericht nicht von Geräten abgerufen werden, auf denen eine App mit einer applicationId installiert ist, die auf „android“ oder „download“ endet (Groß-/Kleinschreibung wird nicht berücksichtigt). Nutzer, die von diesem Problem betroffen sind, sollten das Android-Gradle-Plug-in auf Version 4.2-alpha01 oder höher aktualisieren.

Version 1.0.0

Benchmark-Version 1.0.0

20. November 2019

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 und androidx.benchmark:benchmark-junit4:1.0.0 wurden ohne Änderungen gegenüber 1.0.0-rc01 veröffentlicht. Version 1.0.0 enthält diese Commits.

Wichtige Funktionen von Version 1.0.0

Mit der Benchmark-Bibliothek können Sie Leistungsbenchmarks für App-Code schreiben und schnell Ergebnisse erhalten.

So werden Probleme bei der Build- und Laufzeitkonfiguration vermieden und die Geräteleistung stabilisiert, damit die Messungen genau und konsistent sind. Führen Sie die Benchmarks direkt in Android Studio oder in CI aus, um die Codeleistung im Zeitverlauf zu beobachten und Regressionen zu verhindern.

Zu den wichtigsten Funktionen gehören:

  • Taktstabilisierung
  • Automatische Thread-Priorisierung
  • Unterstützung für UI-Leistungstests, z. B. im RecyclerView-Beispiel
  • JIT-kompatible Aufwärmung und Schleifen
  • JSON-Benchmarkausgabe für die Nachbearbeitung

Version 1.0.0-rc01

23. Oktober 2019

androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 und androidx.benchmark:benchmark-junit4:1.0.0-rc01 sind veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.

Neue Funktionen

  • Systrace-Tracing zu Benchmarks hinzugefügt

Diverse Fehlerkorrekturen

  • Problem mit der Instabilität von Messwerten behoben, bei dem JIT aufgrund einer Herabstufung der Priorität nicht vor dem Warm-up abgeschlossen wurde (b/140773023)
  • Einheitliches JSON-Ausgabeverzeichnis für Android-Gradle-Plug-in 3.5 und 3.6

Version 1.0.0-beta01

9. Oktober 2019

androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 und androidx.benchmark:benchmark-junit4:1.0.0-beta01 sind veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.

Neue Funktionen

  • Führen Sie vor jedem Warmup eine automatische Speicherbereinigung aus, um die Speicherbelastung von einem Benchmark zum nächsten zu reduzieren (b/140895105).

Diverse Fehlerkorrekturen

  • Die Abhängigkeit androidx.annotation:android-experimental-lint wurde hinzugefügt, damit Java-Code Lint-Fehler korrekt erzeugt, wenn die experimentelle API nicht verwendet wird. Dies ähnelt der experimentellen Kotlin-Annotation für Kotlin-Aufrufer.
  • Das Instrumentierungsargument additionalTestOutputDir für die Ausgabe im Android-Gradle-Plug-in 3.6 wird jetzt korrekt erkannt, um zu wissen, wann das AGP das Kopieren von Daten übernimmt.
  • Nicht erkannte Taktfrequenz in JSON korrigiert, um -1 korrekt auszugeben (b/141945670).

Version 1.0.0-alpha06

18. September 2019

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 und androidx.benchmark:benchmark-junit4:1.0.0-alpha06 sind veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Es wurde eine Prüfung auf die falsche Verwendung des alten Pakets für den Test-Runner hinzugefügt. Dadurch wird jetzt eine hilfreichere Fehlermeldung angezeigt.

API-Änderungen

  • Die experimentelle Annotation ExperimentalAnnotationReport ist jetzt korrekt öffentlich. Für die Verwendung der experimentellen API BenchmarkState#report ist jetzt diese Annotation erforderlich.

Version 1.0.0-alpha05

5. September 2019

androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 und androidx.benchmark:benchmark-junit4:1.0.0-alpha05 sind veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • BenchmarkState.reportData-API ist jetzt als experimentell gekennzeichnet

Diverse Fehlerkorrekturen

  • Problem mit dem Skript zum Sperren der Uhr behoben, das auf Geräten fehlschlug, auf denen die Shell-Dienstprogramme cut oder expr fehlten.
  • Ein Problem mit der Aufgabe ./gradlew lockClocks wurde behoben, bei dem die Aufgabe auf Geräten, die mit einer älteren Version des su-Dienstprogramms gerootet wurden, nicht mehr reagierte. Diese Version unterstützte das Flag -c nicht.

Version 1.0.0-alpha04

7. August 2019

androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 und androidx.benchmark:benchmark-junit4:1.0.0-alpha04 sind veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Außerdem wurde eine neue Dokumentation zur Verwendung der Benchmark-Bibliothek ohne Gradle hinzugefügt, sowohl für die Verwendung mit verschiedenen Build-Systemen (wie Bazel oder Buck) als auch für die Ausführung in CI. Weitere Informationen finden Sie unter Benchmarks ohne Gradle erstellen und Benchmarks in Continuous Integration ausführen.

Neue Funktionen

  • Gradle-Plug-in
    • Deaktiviert jetzt automatisch die Testabdeckung und legt standardmäßig AndroidBenchmarkRunner fest (b/138374050)
    • Unterstützung für das neue AGP-basierte Kopieren von Daten hinzugefügt, wenn Benchmarks ausgeführt werden und AGP 3.6 oder höher verwendet wird
  • Ergänzungen des JSON-Formats
    • Gesamte Ausführungszeit des Benchmark-Tests ausgeben (b/133147694)
    • Bei @Parameterized-Benchmarks, die einen Namensstring verwenden (z. B. @Parameters(name = "size={0},depth={1}")), werden jetzt Parameternamen und -werte pro Benchmark in der JSON-Ausgabe ausgegeben (b/132578772).
  • Probelaufmodus (b/138785848)
    • Es wurde ein „Probelauf“-Modus hinzugefügt, in dem jede Benchmark-Schleife nur einmal ausgeführt wird, um nach Fehlern/Abstürzen zu suchen, ohne Messungen zu erfassen. Das kann z.B. nützlich sein, um Benchmarks vor dem Einreichen schnell auszuführen und zu prüfen, ob sie funktionieren.

API-Änderungen

  • Die Modulstruktur wurde geändert und die Bibliothek aufgeteilt (b/138451391).
    • benchmark:benchmark-junit4 enthält Klassen mit JUnit-Abhängigkeit: AndroidBenchmarkRunner und BenchmarkRule. Beide wurden in das Paket androidx.benchmark.junit4 verschoben.
    • benchmark:benchmark-common enthält die restliche Logik, einschließlich der BenchmarkState API.
    • Durch diese Aufteilung kann die Bibliothek in Zukunft Benchmarking ohne JUnit4-APIs unterstützen.
  • Konfigurationswarnungen werden jetzt als Fehler behandelt und führen zum Absturz des Tests (b/137653596).
    • Dies soll die Genauigkeit der Messungen weiter fördern, insbesondere in CI.
    • Diese Fehler können mit einem Instrumentierungsargument wieder zu Warnungen herabgestuft werden. Beispiel: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Diverse Fehlerkorrekturen

  • Fehler beim Schreiben auf externen Speichergeräten auf Q-Geräten liefern aussagekräftigere Meldungen mit Vorschlägen zur Behebung des Problems.
  • Bildschirme werden während Benchmark-Ausführungen automatisch eingeschaltet, anstatt dass die Ausführung fehlschlägt, wenn der Bildschirm ausgeschaltet ist

Externe Beiträge

  • Vielen Dank an Sergey Zakharov für die Verbesserungen bei der JSON-Ausgabe und die Behebung von Problemen beim Ausschalten des Displays.

Version 1.0.0-alpha03

2. Juli 2019

androidx.benchmark:benchmark:1.0.0-alpha03 und androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 sind veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Schlafdauer aufgrund von thermischer Drosselung pro Benchmark im vollständigen JSON-Bericht anzeigen

Diverse Fehlerkorrekturen

  • Das Gradle-Plug-in muss nicht mehr nach Android-Plug-ins und dem Android-Block angewendet werden.
  • Unterstützung für Benchmarkberichte auf Android 10-Geräten mit begrenztem Speicher hinzugefügt

Version 1.0.0-alpha02

6. Juni 2019

androidx.benchmark:1.0.0-alpha02 und androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 sind veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Beachten Sie, dass wir das JSON-Schema als API behandeln. Wir planen, dieselben Stabilitätsbeschränkungen wie bei anderen APIs einzuhalten: stabil (mit sehr seltenen Ausnahmen) in der Betaphase und in der endgültigen Version, mit nur Ergänzungen in Nebenversionen und Änderungen/Entfernungen in Hauptversionen.

API-Änderungen

  • Überarbeitetes JSON-Schema. Weitere Änderungen am JSON-Schema beschränken sich wahrscheinlich auf Ergänzungen:

    • Die Struktur des Ergebnisobjekts wurde neu organisiert, um in Zukunft zusätzliche Messwertgruppen zu unterstützen (b/132713021).
    • Dem Objekt der obersten Ebene wurden Kontextinformationen zum Testlauf hinzugefügt, z. B. Geräte- und Build-Informationen sowie Informationen dazu, ob die Taktfrequenz gesperrt ist (b/132711920).
    • Zeitbezogene Messwertnamen enthalten jetzt „ns“ (b/132714527)
    • Zusätzliche Statistiken pro gemeldetem Berichtsmesswert hinzugefügt (Maximum, Median, Minimum) und vereinfachte Zusammenfassungsstatistik „nanos“ entfernt (b/132713851)
  • XML-Ausgabe entfernt (b/132714414)

  • Erkennung von thermischer Drosselung aus der BenchmarkState.reportData API entfernt (b/132887006)

Diverse Fehlerkorrekturen

  • Das Problem, dass ./gradlew lockClocks auf einigen Geräten mit neueren Betriebssystemen nicht richtig angebracht wurde, wurde behoben (b/133424037).
  • Drosselungserkennung für Emulator deaktiviert (b/132880807)

Version 1.0.0-alpha01

7. Mai 2019

androidx.benchmark:benchmark:1.0.0-alpha01 ist veröffentlicht. Die in dieser Version enthaltenen Commits sind hier verfügbar.