Benchmark

Messen Sie die Leistung Ihres Codes in Android Studio präzise.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpharelease
17. April 2024 1.2.4 1.3.0-alpha03

Abhängigkeiten deklarieren

Zum Hinzufügen einer Abhängigkeit von Benchmark müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Makro-Benchmark

Damit Sie MacroBenchmark in Ihrem Projekt verwenden können, fügen Sie der Datei build.gradle die folgenden Abhängigkeiten für Ihr MakroBenchmark-Modul hinzu:

Groovy

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

Kotlin

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

Mikro-Benchmark

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

Groovy

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

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

Kotlin

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

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

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

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

Groovy

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

Kotlin

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

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

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Lassen Sie uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 1.3

Version 1.3.0-alpha03

17. April 2024

androidx.benchmark:benchmark-*:1.3.0-alpha03 wird freigegeben. Version 1.3.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Es werden öffentliche API-PerfettoTraceProcessor.Session.queryMetrics-APIs mit JSON-, Textproto- und proto-binär- (nicht decodierten) Varianten hinzugefügt. Damit können Sie die in TraceProcessor integrierten Messwerte (I54d7f, b/304038382) abfragen.
  • profilerOutput wurde zur JSON-Ausgabe hinzugefügt, um die Erstellung von Profilprofilen für Traces (z.B. Perfetto, Methoden-Traces) einfacher zu gestalten. (I05ddd, b/332604449)
  • Ein Power-Tag wurde für das Benchmarking der Perfetto-Konfiguration hinzugefügt. Dadurch werden beispielsweise Wakelock-Tracepunkte erfasst. (Icfe44, b/286551983)
  • Das Inst-Argument androidx.benchmark.profiling.skipWhenDurationRisksAnr wurde hinzugefügt und kann auf „false“ gesetzt werden, um zu verhindern, dass Methoden-Traces übersprungen werden, wenn die erwartete Dauer zu einem ANR-Fehler führen kann. Dies wird bei CI-Ausführungen dringend empfohlen.
  • Das experimentelle Inst-Argument androidx.benchmark.profiling.perfCompare.enable wurde hinzugefügt. Setzen Sie diesen Wert auf „true“, um den Vergleichszeitpunkt zwischen Mess- und Profilerstellungsphasen auszuführen. Nützlich zum Beispiel zur Bewertung des Aufwands beim Methoden-Tracing. (I61fb4, b/329146942)

API-Änderungen

  • Die Klasse TraceSectionMetric.Mode wurde in versiegelte Klasse geändert, um zukünftige Erweiterungen zu ermöglichen, ohne dass die vollständige Aufzählung bei Anweisungen eingeschränkt wird (I71f7b).
  • TraceSectionMetric.Mode.Average und .Count sowie neu angeordnete Argumente wurden hinzugefügt, sodass das häufiger verwendete Argument (Modus) weiter oben in der Liste der Argumente steht. Dadurch müssen weniger Parameternamen angegeben werden. (Ibf0b0, b/315830077, b/322167531)
  • Metric.getResult wurde in getMeasurements umbenannt, um dem Rückgabetyp (I42595) zu entsprechen

Fehlerkorrekturen

  • Beheben Sie das Problem, damit für Benchmarks generierte Referenzprofile verwendet werden, wenn automaticGenerationDuringBuild deaktiviert ist (Ic144f, b/333024280).
  • Korrigieren Sie BaselineProfile-Eigenschaftsüberschreibungen des Gradle-Plug-ins, um die Generierung von Referenzprofilen und das Benchmarking zu aktivieren, wenn Sie einen nonMinified- oder Benchmark-Build-Typ anpassen. (Ib8f05, b/324837887)
  • Die Trace-Methode wurde korrigiert, sodass die Traces auch auf langsameren Geräten vollständig erfasst und gültig sind. (I6349a, b/329904950)
  • Aktivieren Sie den Blockierstart für den Perfetto-Trace-Datensatz, um das Risiko fehlender Daten am Anfang des Trace zu verringern. Wird nur ab API 33 unterstützt. (Ie6e41, b/310760059)
  • Es wurde eine Warnung hinzugefügt, wenn Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dies dazu führt, dass JSON-Ausgabedateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
  • Tausendertrennzeichen (,) „,“ (Komma) für Konsistenz in der Studio-Ausgabe erzwingen, wobei die Sprache des Geräts ignoriert wird (I3e921, b/313496656)
  • TraceSectionMetric unterstützt jetzt Segmente, die mit Trace.{begin|end}AsyncSection erstellt wurden. (I91b32, b/300434906)
  • Allen Fehlern bei der Starterkennung wurden log.w-/Ausnahmelabels hinzugefügt. Dies wirkt sich nicht auf das aktuelle Verhalten aus (sodass einige Fehler ausgelöst werden und andere den Startvorgang ohne Rückmeldung nicht erkennen), macht es nur verständlicher. Im Allgemeinen sind diejenigen, die Log.w() und keine Startmesswerte melden, diejenigen, bei denen Ereignisse ohne Frames fehlen. Ausnahmen werden ausgelöst, wenn ein Start erkannt wird, mit Ausnahme von Frame-Timing-Informationen (aus UI-/RT-Segmenten). (Id240f, b/329145809)
  • Brechen Sie Jobs zur Hintergrunddexoptimierung vor dem Ausführen einer Macro-Benchmark ab, um Störungen zu reduzieren. (I989ed)
  • Der Messwert „frameCount“ wurde zu FrameTimingMetric hinzugefügt. So können Sie leichter Szenarien erkennen, in denen sich die Messungen ändern, weil sich die Anzahl der generierten Frames geändert hat (neue Animationen hinzugefügt, Probleme mit der Entwertung behoben). (I1e5aa)
  • Es wurde verdeutlicht, dass frameOverrunMs der bevorzugte Messwert für das Tracking ist (sofern in Docs verfügbar) und warum. (I18749, b/329478323)

Version 1.3.0-alpha02

20. März 2024

androidx.benchmark:benchmark-*:1.3.0-alpha02 wird freigegeben. Version 1.3.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Experimentelle R8-Unterstützung in Microbench über eingebettete Proguard-Regeln. Diese Unterstützung ist experimentell und erfordert AGP 8.3 für die Reduzierung von Bibliotheksmodultests. Mit den folgenden Schritten aktivieren Sie die R8-Minifikation/-Optimierung im build.gradle Ihres Benchmark-Moduls, was je nach Arbeitslast zu einer deutlichen Leistungserhöhung führen sollte. (I738a3, b/184378053)

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

Fehlerkorrekturen

  • Die Warnung zur Methodenverfolgung wurde korrigiert und befindet sich nun in einer separaten Zeile von der Ausgabe der Mikrobench. (I0455c, b/328308833)

Version 1.3.0-alpha01

21. Februar 2024

androidx.benchmark:benchmark-*:1.3.0-alpha01 wird freigegeben. Version 1.3.0-alpha01 enthält diese Commits.

API-Änderungen

  • Boolesche MicrobenchmarkConfig-Parameter wurden umbenannt, um unnötiges Wort „sollte“ zu vermeiden (Ia8f00, b/303387299)
  • BenchmarkRule.measureRepeatedOnMainThread wurde hinzugefügt, um das Auslösen von ANR-Fehlern zu vermeiden, insbesondere bei großen Suiten in CI. Dazu gehören z. B. solche, die mit „Views“ oder „Compose“-UIs interagieren. (I5c86d)
  • FrameTimingGfxInfoMetric wurde hinzugefügt, eine experimentelle alternative Implementierung von FrameTimingMetric, bei der Messungen direkt von der Plattform stammen und nicht aus dem Perfetto-Trace extrahiert werden. (I457cb, b/322232828)
  • Fügen Sie die Möglichkeit zum Dump eines ART-Profils während einzelner warmUp-Iterationen hinzu. (I17923)
  • Mehrere Änderungen an der TraceSectionMetric API:
    • Mode.Min und Mode.Max hinzufügen
    • Labelargument zum Überschreiben des Abschnittsnamens als Messwertlabel hinzufügen
    • Der Ausgabemodus wurde ein Modusname hinzugefügt, um die Bedeutung des Messwerts zu verdeutlichen.
    • Die Standardeinstellung wurde in die Summe geändert, da der Großteil dieses Messwerts für wiederkehrende Ereignisse verwendet wird. Beachten Sie diese Änderungen bei der CI-Nutzung, da sie zu Unterbrechungen oder beim Parsen führen kann. (Ic1e82, b/301892382, b/301955938)

Fehlerkorrekturen

  • Verbesserte Fehlermeldung im Gradle-Plug-in für das Basisprofil, wenn das angegebene verwaltete Gerät nicht vorhanden ist (Idea2b, b/313803289)
  • Fehlerkorrektur für das Einbeziehen von Basisprofilen von Bibliotheken in AGP vor AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • Die Ausgabe-URL der Referenz und des Startprofils am Ende der Generierungsaufgabe wurde korrigiert (I802e5, b/313976958).
  • Zeitüberschreitungen 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 zum Überschreiben des Verhaltens von Shader-Drops hinzu, um Abstürze beim Benchmarking von Apps ohne ProfileInstaller 1.3 zu vermeiden:
    • androidx.benchmark.dropShaders.enable=true/false : kann verwendet werden, um alle Shader-Drops zu überspringen (auch bei StartupMode.Cold-Starts), insbesondere beim Benchmarking von Apps, die Profileinstaller 1.3 noch nicht verwenden
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : kann verwendet werden, um Fehler beim Löschen von Shadern zu tolerieren, z. B. beim Benchmarking von Anwendungen ohne Profileinstaller 1.3 (I4f573)
  • Überspringt das Methoden-Tracing im UI-Thread, wenn es voraussichtlich länger als ein paar Sekunden dauert, und Bereinigungsmethoden-Traces beim Auslösen. (I6e768)
  • Wird ausgelöst, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder Nachverarbeiten von Dateien zu vermeiden. (I4a5ab)
  • Es wurde ein Problem behoben, bei dem nicht abgeschlossene Frames am Anfang und Ende des Trace gekoppelt wurden, was fälschlicherweise als ein einziger extrem langer Frame gemeldet wurde. (I39353, b/322232828)
  • Verwenden Sie --skip verification in API 30 und höher, wenn Sie ein Paket in API 30-33 neu installieren, um ART-Profile in Nutzer-Builds zu löschen. So lassen sich Play Protect-Warnungen umgehen, die auf einigen Geräten zu Fehlern führen. (Ic9e36)
  • Verwende am force-stop, um Apps zu beenden, die keine System-App wie die System-UI oder der Launcher sind. (I5e028)
  • MacroBenchmark wartet nun auf 1 second, bis die Zielanwendung ein ART-Profil geleert hat. Zuvor wurde auf 500 ms gewartet (I85a50, b/316082056).
  • Verbessern Sie den FrameTimingMetric-Fehler, wenn keine Frames erzeugt werden, und geben Sie immer einen Link zum Tracing aus, wenn das Parsen von Messwerten fehlschlägt, um die Problemdiagnose zu erleichtern. (I956b9)
  • Ein Absturz in FrameTimingMetric, der die Frame-ID nicht parsen konnte, wurde behoben, insbesondere bei bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276)
  • Lockerer Strengen Modus für Prüfungen in FrameMetrics und zusätzliche Details zu Fehlermeldungen hinzugefügt. (Iadede)

Version 1.2

Version 1.2.4

17. April 2024

androidx.benchmark:benchmark-*:1.2.4 wird freigegeben. Version 1.2.4 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde behoben, dass das Referenzprofil „srcset“ nicht in Benchmarkvarianten eingerichtet wurde. Behebt auch automaticGenerationDuringBuild in Bibliotheken, die eine zirkuläre Abhängigkeit verursachen. (I28ab7, b/333024280)
  • Verwende am force-stop, um Apps zu beenden, die keine System-App wie die System-UI oder der Launcher sind. Dadurch wird behoben, dass StartupMode.COLD-Benchmarks aufgrund eines nicht vollständig erfolgreichen Vorgangsabschlusses „Paket $package darf nicht vor dem Kaltstart nicht ausgeführt werden!“ abstürzen. (I5e028)

Version 1.2.3

24. Januar 2024

androidx.benchmark:benchmark-*:1.2.3 wird freigegeben. Version 1.2.3 enthält diese Commits.

Fehlerkorrekturen

  • Die Ausnahme aus dem Baseline Profile Gradle-Plug-in wurde entfernt, wenn AGP-Version 8.3.0 oder höher ist.
  • Ein Fehler wurde behoben, durch den Referenzprofile von Bibliotheken vor AGP 8.3.0-alpha15 in AAE aufgenommen wurden.

Version 1.2.2

1. Dezember 2023

androidx.benchmark:benchmark-*:1.2.2 wird freigegeben. Version 1.2.2 enthält diese Commits.

Baseline-Profile

Version 1.2.1

15. November 2023

androidx.benchmark:benchmark-*:1.2.1 wird freigegeben. Version 1.2.1 enthält diese Commits.

Neue Funktionen

  • Verbesserte Fehlermeldung beim Deaktivieren von Testvarianten durch Nutzer (b/307478189)
  • Properties zur Unterstützung der AS-Testlaufintegration hinzugefügt (b/309805233), (b/309116324)

Version 1.2.0

18. Oktober 2023

androidx.benchmark:benchmark-*:1.2.0 wird freigegeben. Version 1.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.1.0

Baseline-Profile

  • Das neue Baseline Profile Gradle-Plug-in automatisiert das Erfassen und Einbeziehen von Referenzprofilen in Ihren Test- und Build-Workflow.
  • BaselineProfileRule.collect ist jetzt stabil, eine optimierte und vereinfachte Version der vorherigen experimentellen BaselineProfileRule.collectBaselineProfile API
    • Geben Sie einfach packageName an, um Ihre App zu starten.
  • Bei Bibliotheken, die Referenzprofile generieren, kannst du jetzt die Regeln filtern, die entweder im Code (BaselineProfileRule.collect-Argument) oder noch einfacher im Gradle-Plug-in generiert wurden
  • Fehlerkorrekturen
    • Problem mit der Erhebung von Referenzprofilen unter Android U und höher (Id1392, b/277645214) behoben

Makro-Benchmark

  • Kompilierung
    • MacroBenchmark setzt jetzt den Kompilierungsstatus für jede Kompilierung vollständig zurück. Dazu muss das APK vor Android 14 neu installiert werden. Daher wird ein Benchmarking unter Android 14 und höher empfohlen, wenn der Zustand (z. B. die Nutzeranmeldung) beibehalten werden soll, was gemessen wird.
    • Sie können das Problem auch umgehen, indem Sie die App-Kompilierung separat steuern und die Kompilierung mit dem CompilationMode.Ignore()- oder Instrumentierungsargument überspringen.
  • Instrumentierungsargumente

    • Unterstützung des Instrumentierungsarguments androidx.benchmark.dryRunMode.enable (bereits in Mikro-Benchmark verfügbar) für schnellere Validierungsausführungen (z.B. beim Erstellen der Benchmark oder beim Vorabeinreichen)
    • Unterstützung für androidx.benchmark.profiling.mode=StackSampling und MethodTracing.
    • androidx.benchmark.enabledRules wurde hinzugefügt, um das Filtern von Referenzprofilen und Makro-Benchmark-Regeltests nach der Laufzeit zu ermöglichen
    • Das Argument androidx.benchmark.perfettoSdkTracing.enable wurde hinzugefügt, um das Tracing mit „Tracing-perfetto“ zu aktivieren, z.B. das Tracing der Neuzusammensetzung erstellen. Beachten Sie, dass bei Verwendung mit StartupMode.COLD das Timing erheblich beeinflusst wird, da die Tracing-Bibliothek beim Start der App geladen und aktiviert wird.
  • Voraussetzungen

    • Für Makro-Benchmarks ist jetzt ProfileInstaller 1.3.0 oder höher in der Ziel-App erforderlich, um die Profilerfassung/-zurücksetzung und das Leeren des Shader-Cache zu aktivieren.
  • Neue experimentelle Messwert-APIs

    • Es wurde eine experimentelle TraceSectionMetric-Funktion hinzugefügt, mit der sich ein einfaches Timing aus trace("") {}-Blöcken in Ihrer App extrahieren lässt, oder TraceMetric, um die volle Abfragefunktion von Perfetto TraceProcessor zu nutzen.
    • Experimentelle PowerMetric wurde hinzugefügt, um Informationen zum Stromverbrauch zu erfassen
    • Die experimentelle Schaltfläche MemoryCountersMetric zum Zählen von Seitenfehlern wurde hinzugefügt
    • Es wurde eine experimentelle PerfettoTraceProcessor API hinzugefügt, mit der intern Messwerte aus System-Traces (auch Perfetto-Traces genannt) extrahiert werden.
  • Fehlerkorrekturen

    • Es wurden Abstürze beim Installieren oder Extrahieren von Profilen aus einer App behoben, die aus mehreren APKs (z.B. aus einem App-Bundle) installiert wurde.
    • Problem behoben, bei dem FrameTimingMetric Frames mit inkonsistenten Frame-IDs ignoriert hat (in der Regel Frames während der Ripples in API 31 und höher) (I747d2, b/279088460)
    • Parsing-Fehler bei Traces behoben, die größer als 64 MB sind (Ief831, b/269949822)
    • Es wurde näher erläutert, welche Fehler aufgetreten sind, wenn das Betriebssystem-Image des Geräts (insbesondere das Emulator) nicht richtig für das Tracing oder die Kompilierung konfiguriert wurde.
    • Überprüfung des Akkustands bei Geräten ohne Akku überspringen (Mikro und Makro)
    • Verbesserte Dateiausgabe mit klareren Fehlern bei ungültigen Ausgabeverzeichnissen und sichereren Standardeinstellungen
    • Verbesserte Stabilität von StartupMode.COLD durch kontinuierliches Löschen des Shader-Cache (auch über MacrobenchmarkScope.dropShaderCache verfügbar)
    • Fehlerkorrektur für Leanback-Fallback für startActivityAndWait.

Mikro-Benchmark

  • Funktionen
    • Die Profilerstellung wurde nach anderen Messwerten in eine separate Phase verschoben, sodass in einem Testlauf sowohl genaue Zeitangaben als auch Profilerstellungsergebnisse angezeigt werden können.
  • Experimentelle APIs
    • Es wurde eine 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 (achten Sie jedoch auf den Tracing-Aufwand).
    • Zusätzliche experimentelle APIs zur Steuerung von BenchmarkState getrennt von BenchmarkRule, ohne JUnit
    • Es wurde ein experimenteller PerfettoTrace-Eintrag hinzugefügt, um die Erfassung von Perfetto-Traces mit einer von Benchmark-APIs getrennten benutzerdefinierten Konfiguration zu ermöglichen.
  • Fehlerkorrekturen
    • Problemumgehung bei fehlenden führenden Leerzeichen in der Android Studio-Benchmark-Ausgabe
    • Problem behoben, bei dem Warnungen in der Android Studio-Benchmark-Ausgabe nicht gedruckt werden konnten.
    • Das Problem mit dem Absturz von SampledProfiling unter Android 13 (API 33) und höher wurde behoben.
    • Die Leistung von dryRunMode wurde deutlich verbessert, indem IsolationActivity und Perfetto-Tracing übersprungen wurde (bis zu zehnmal schnellerer Probelaufmodus bei älteren Betriebssystemversionen).

Version 1.2.0-rc02

6. Oktober 2023

androidx.benchmark:benchmark-*:1.2.0-rc02 wird freigegeben. Version 1.2.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Die Ausgabe der Benchmarkdatei wurde korrigiert, damit das Kopieren der BaselineProfile-Plug-in-Datei nicht mehr beeinträchtigt wird. 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 Ladefehlermeldungen für tracing-perfetto beim Einfügen aus dem MakroBenchmark-Modul in die Zielanwendung wurden näher erläutert.

Version 1.2.0-rc01

20. September 2023

androidx.benchmark:benchmark-*:1.2.0-rc01 wird freigegeben. Version 1.2.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Wenn das Perfetto SDK-Tracing nicht in einer Benchmark initialisiert wird, wird jetzt eine Ausnahme (mit Anleitung zur Abhilfe) ausgegeben. (I6c878, b/286228781)
  • Behebung eines OOM-Absturzes beim Konvertieren der ART-Methode für Trace in das Perfetto-Format (I106bd, b/296905344)
  • (Makro-Benchmark) Das Tracing-Label für die Methode wurde klarer formuliert, wenn es in der Studio-Testausgabe verknüpft ist, und die Dateinamen für das Tracing der Methoden wurden korrigiert, damit sie auf dem Gerät/Host eindeutig sind, sodass sie nicht überschrieben werden, wenn mehr als eine Benchmark ausgeführt wird. (I08e65, b/285912360)
  • Sorgt dafür, dass das Gerät aktiv ist, wenn ein Basisprofil erfasst wird. (I503fc)

Version 1.2.0-beta05

30. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta05 wird freigegeben. Version 1.2.0-beta05 enthält diese Commits.

Neue Funktionen

  • Das Baseline Profile 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 wird freigegeben. Version 1.2.0-beta04 enthält diese Commits.

Neue Funktionen

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

Fehlerkorrekturen

  • Beheben Sie Fehler beim Schreiben, Verschieben und Abrufen von Dateien (insbesondere aus parametrisierten Tests), indem Sie die Ausgabedateinamen weiter bereinigen und „=' und „:“ in den Namen der Ausgabedateien vermeiden. (I759d8)

Version 1.2.0-beta03

9. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta03 wird freigegeben. Version 1.2.0-beta03 enthält diese Commits.

API-Änderungen

  • Argument hinzugefügt, um TraceSectionMetric nur für das Zielpaket zu filtern, standardmäßig aktiviert (Ia219b, b/292208786)

Fehlerkorrekturen

  • Das fullTracing.enable-Instrumentierungsargument 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 MikroBenchmark-Schleifen-/Phasen-Tracing) werden jetzt im System Trace Viewer von Studio angezeigt und dem richtigen Prozess in Perfetto zugeordnet. (I6b2e7, b/293510459)
  • Der Makro-Benchmark NOT-PROFILEABLE wurde in API 31 und höher entfernt und die Profilable-Prüfung auf gerooteten eng/userdebug-Geräten wird übersprungen. (I2abac, b/291722507)
  • Bei der Verwendung von Dex-Layoutoptimierungen werden Startprofilregeln jetzt auch als Basisprofilregeln betrachtet. (aosp/2684246, b/293889189)

Version 1.2.0-beta02

26. Juli 2023

androidx.benchmark:benchmark-*:1.2.0-beta02 wird freigegeben. Version 1.2.0-beta02 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

  • Fehler in Macrobench melden, wenn das Betriebssystem für das Tracing falsch konfiguriert ist, wie vor Kurzem in API 26/28 ARM64-Emulatoren behoben. (I0a328, b/282191686)
  • Dem Fehler beim Zurücksetzen der Kompilierung wurde ein Detail hinzugefügt, um eine Aktualisierung des Emulators vorzuschlagen, da dieses Problem vor Kurzem von einigen Emulatoren behoben wurde. (I8c815, b/282191686)
  • Legen Sie androidx.test.uiautomator:uiautomator:2.2.0 als api anstelle einer implementation-Abhängigkeit fest. (I1981e)

Version 1.2.0-beta01

18. Juli 2023

androidx.benchmark:benchmark-*:1.2.0-beta01 wird freigegeben. Version 1.2.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Behebung von Warnungen, die manchmal in der Benchmark-Ausgabe in Studio unterdrückt wurden, und Umgehung führender Leerzeichen aus der Benchmark-Ausgabe, die in Studio nicht angezeigt wurden (Ia61d0, b/227205461, b/286306579, b/285912360)
  • Kommentar für FrameTimingMetric korrigiert. Der untergeordnete Messwert heißt frameDurationCpuMs. (Ib097f, b/288830934).

Version 1.2.0-alpha16

21. Juni 2023

androidx.benchmark:benchmark-*:1.2.0-alpha16 wird freigegeben. Version 1.2.0-alpha16 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

  • MacroBenchmark-Unterstützung für androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • Die MicroBenchmark-Profilerstellung wurde in eine separate Phase verschoben und findet in der Sequenz nach der Messung statt, anstatt sie zu ersetzen. MethodTracing-Trace-Abschnitte werden jetzt auch in den erfassten Perfetto-Trace aufgenommen, sofern vorhanden. (I9f657, b/285014599)
  • Fügen Sie die Messung mit Mode.Sum zu TraceSectionMetric hinzu. (Ic121a, b/264398606)

Version 1.2.0-alpha15

7. Juni 2023

androidx.benchmark:benchmark-*:1.2.0-alpha15 wird freigegeben. Version 1.2.0-alpha15 enthält diese Commits.

Neue Funktionen

  • Es wurde eine experimentelle MemoryUsageMetric zur Nachverfolgung der Arbeitsspeichernutzung einer Zielanwendung hinzugefügt. (I56453, b/133147125, b/281749311)
  • Unterstützung für vollständig benutzerdefinierte Perfetto-Konfigurationen mit PerfettoTrace.record hinzufügen (If9d75, b/280460183)
  • Property zum Überspringen der Generierung des Referenzprofils hinzugefügt. Nutzung: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)

API-Änderungen

  • Die collectBaselineProfile API generiert immer stabile Referenzprofile. Die collectStableBaselineProfile API wurde entfernt. Verwenden Sie stattdessen collectBaselineProfile. (I17262, b/281078707)
  • Das Argument filterPredicate von BaselineProfileRule wurde in einen anderen Wert mit einem äquivalenten Standardwert geändert, damit das Standardfilterverhalten in Dokumenten verständlicher ist. (I3816e)

Fehlerkorrekturen

  • Deaktivieren Sie IsolationActivity und Perfetto-Tracing in dryRunMode, um die Leistung erheblich zu verbessern, da diese den Großteil der Laufzeit betreffen. (Ie4f7d)
  • Unterstützung für das Sampling von Aufrufstacks in Macro-Benchmarks mit den Instrumentierungstestargumenten androidx.benchmark.profiling.mode=StackSampling und androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Behebung des Absturzes beim Löschen von Shadern unter Android U (API 34) und bei Emulatoren. (I031ca, b/274314544)

Version 1.2.0-alpha14

3. Mai 2023

androidx.benchmark:benchmark-*:1.2.0-alpha14 wird freigegeben. Version 1.2.0-alpha14 enthält diese Commits.

Fehlerkorrekturen

  • FrameTimingMetric ignoriert Frames mit unterschiedlichen Frame-IDs ignoriert. Dies würde dazu führen, dass einige Animationen in aktuellen Plattformversionen (API 31 und höher) viele Frames ignorieren, während RenderThread animiert war (z.B. während einer Welle). (I747d2, b/279088460)
  • Das Parsen des Trace-Prozessors für Traces, die größer als 64 MB sind, wurde behoben. (Ief831, b/269949822)
  • Die Generierung des Referenzprofils unter Android U schlug aufgrund der unterschiedlichen Ausgabe des Befehls pm dump-profiles fehl. (Id1392, b/277645214)
  • Korrigieren Sie das Sperrskript für die GPU-Taktung, um Strings korrekt zu vergleichen (I53e54, b/213935715)

Version 1.2.0-alpha13

5. April 2023

androidx.benchmark:benchmark-*:1.2.0-alpha13 wird freigegeben. Version 1.2.0-alpha13 enthält diese Commits.

API-Änderungen

  • Beim Generieren von Basisprofilen wurde ein Profiltypparameter hinzugefügt, um die künftige Funktion für Startprofile zu unterstützen (Ie20d7, b/275093123).
  • Es wurde eine neue experimentelle TraceMetric API hinzugefügt, mit der vollständig benutzerdefinierte Messwerte auf Grundlage des Inhalts eines Perfetto-Trace festgelegt werden können. (I4ce31, b/219851406)
  • Fügen Sie einen experimentellen Messwert hinzu, um die Anzahl der Seitenfehler während einer Benchmark zu bestimmen. I48db0

Version 1.2.0-alpha12

22. März 2023

androidx.benchmark:benchmark-*:1.2.0-alpha12 wird freigegeben. Version 1.2.0-alpha12 enthält diese Commits.

Neue Funktionen

  • Das neue Gradle-Plug-in für das Basisprofil wurde in der Alpha-Version veröffentlicht. Es vereinfacht das Erstellen eines Basisprofils und den Entwickler-Workflow.

API-Änderungen

  • Die Unterstützung für das Perfetto-Tracing wurde für die APIs 21 und 22 entfernt, die sowohl MicroBenchmarks als auch die experimentellen PerfettoTrace APIs umfassen. Vor dieser Version waren UiAutomation-Verbindungen auf einigen Geräten nicht zuverlässig. (I78e8c)
  • Eine öffentliche experimentelle API für PerfettoTraceProcessor wurde hinzugefügt, um das Parsen von Trace-Inhalten zu ermöglichen. Dies ist ein Schritt in Richtung vollständig benutzerdefinierter Messwerte, 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 wird freigegeben. Version 1.2.0-alpha11 enthält diese Commits.

Fehlerkorrekturen

  • Das Problem mit Abstürzen in MacrobenchmarkRule und BaselineProfileRule wurde behoben, wenn Profile aus einem App Bundle mit mehreren APKs neu installiert oder extrahiert wurden. (I0d8c8, b/270587281)

Version 1.2.0-alpha10

22. Februar 2023

androidx.benchmark:benchmark-*:1.2.0-alpha10 wird freigegeben. Version 1.2.0-alpha10 enthält diese Commits.

Neue Funktionen

  • Unter Android 14 und höher installiert MacroBenchmark die Zielanwendungen nicht mehr neu, um den Kompilierungsstatus aufgrund einer neuen Plattformfunktion zurückzusetzen. Bisher war es erforderlich, ein gerootetes Gerät zu haben oder alle Anwendungsstatus (z.B. Nutzeranmeldungen) zu entfernen, bevor die Benchmark ausgeführt wurde. (I9b08c, b/249143766)

Fehlerkorrekturen

  • Beheben Sie DryRunMode, damit nicht mehr mit einem leeren Profil abgestürzt ist, weil die Kompilierung übersprungen wurde. Stattdessen führt er einen einzigen Durchlauf aus und extrahiert das Profil, um sicherzustellen, dass etwas erfasst wird. (I2f05d, b/266403227)
  • Behebung des PowerMetric-Absturzes bei der Prüfung auf das Vorhandensein von Powerstats auf alten API-Levels. (5faaf9, b/268253898)

Version 1.2.0-alpha09

11. Januar 2023

androidx.benchmark:benchmark-*:1.2.0-alpha09 wird freigegeben. Version 1.2.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • Die Übergabe von None an das Instrumentierungsargument androidx.benchmark.enabledRules wurde aktiviert, um die Generierung aller Benchmarks / Referenzprofile zu deaktivieren. (I3d7fd, b/258671856)
  • Probleme mit PerfettoTrace-Aufnahmen in App-Modulen beheben (d.h. Test-APKs ohne Selbstinstrumentierung) (I12cfc)
  • Reihenfolge der ADB-Abrufargumente im Basisprofil in der Studio-Ausgabe korrigiert (I958d1, b/261781624)
  • ARM Emulator API 33 wird jetzt korrekt als solche erkannt, wenn versucht wird, eine Makro-Benchmark auszuführen, und gibt die Warnung korrekt aus. (69133b,b/262209591)
  • Akkustand von 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 wird freigegeben. Version 1.2.0-alpha08 enthält diese Commits.

API-Änderungen

  • Es wurden neue experimentelle APIs hinzugefügt, PerfettoTrace.record {} und PerfettoTraceRule, um Perfetto-Traces (auch System-Traces genannt) im Rahmen eines Tests zu erfassen und Testverhalten und -leistung zu untersuchen. (I3ba16)
  • BaselineProfileRule akzeptiert jetzt ein Filterprädikat anstelle einer Liste von Paketpräfixen. So hat der Test die volle Kontrolle über das Filtern. (I93240)
  • Fügen Sie eine experimentelle API (BaselineProfileRule.collectStableBaselineProfile) hinzu, die wartet, bis ein Basisprofil für N Iterationen stabil ist. (I923f3)
  • Fügen Sie die Möglichkeit hinzu, ein Präfix für den Ausgabedateinamen anzugeben, wenn Sie Referenzprofile mit BaselineProfileRule generieren. (I7b59f, b/260318655)

Fehlerkorrekturen

  • Verbessern Sie die Sicherheit beim Schreiben von Dateiausgaben, um zu verhindern, dass Ausgabedateien unbemerkt nicht geschrieben / 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. Außerdem sollten dadurch Probleme behoben werden, bei denen eine Datei nicht von Gradle abgerufen werden konnte. (I12a1c, b/259424099)
  • Die Fehlermeldung „profileinstaller“ verbessern, die angezeigt wird, wenn „profileinstaller“ zu alt ist. Damit werden Sie aufgefordert, die Profileinstaller-Version (1.2.1) zum Messen der Referenzprofile auf der API 31 bis 33 zu aktualisieren, anstatt anzugeben, dass sie nicht unterstützt wird. (Ia517f, b/253519888)
  • Mehrere Fehler bei Shell-Befehlen in der Fehlermeldung „Print required API <=23“ beheben, einschließlich fehlgeschlagener Einrichtung der Binärdatei für die Perfetto-Erfassung und fehlgeschlagener Trace-Erfassung (Ib6b87, b/258863685)
  • Sortieren Sie generierte Profilregeln automatisch, um die Anzahl der Änderungen zu minimieren, wenn sie sich im Laufe der Zeit ändern (beim Einchecken von Profilregeln in die Versionsverwaltung). (Ie2509)
  • Absturz bei nicht gerooteten Builds unter Android 13 (API 33) mit der Meldung Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183) wurde behoben.

Bekannte ProblemeMacrobenchmarkScope.dropShaderCache() kann aufgrund einer fehlenden Broadcast Registry im Profileinstaller-Manifest 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 Folgendes zur AndroidManifest.xml Ihrer App (nicht zur Ihres Benchmarks) 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 wird freigegeben. Version 1.2.0-alpha07 enthält diese Commits.

API-Änderungen

  • Fügt die PowerMetric API zum Messen von Energie und Strom in Macro-Benchmarks hinzu. (Ife601, b/220183779)
  • Problem mit MacrobenchmarkScope.dropShaderCache() behoben, sodass der Shader-Cache tatsächlich gelöscht wurde. Dadurch werden etwa 20 ms an Rauschen aus StartupMode.COLD-Benchmarks entfernt, da Shader jetzt regelmäßig bei jedem Durchlauf gelöscht werden. Bisher wurden bei der Partial-Kompilierung mit Aufwärm-Iterationen falsch schnelle Zahlen gemeldet, da das Shader-Caching während des Aufwärmvorgangs mit höherer Wahrscheinlichkeit erfolgte. Für diese Fehlerbehebung ist entweder ein gerootetes Gerät oder die Verwendung von profileinstaller:1.3.0-alpha02 in der Ziel-App erforderlich. Informationen zu den API-Änderungen der ProfileInstaller-Bibliothek findest du auf der Seite ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • TraceSectionMode("label", Mode.Sum) wurde hinzugefügt, sodass die Gesamtzeit gemessen werden kann, die für mehrere Trace-Abschnitte mit demselben Label aufgewendet wurde. So gibt beispielsweise TraceSectionMetric("inflate", Mode.Sum) einen Messwert inflateMs für die Gesamtzeit in einer Makro-Benchmark zurück, die für Inflation ausgegeben wird. Außerdem wurde die Anforderung von API 29 entfernt, da TraceSectionMetric zusammen mit androidx.tracing.Trace wieder auf niedrigere API-Levels setzt, wobei in der Ziel-App forceEnableAppTracing verwendet wird. (Id7b68, b/231455742)

Fehlerkorrekturen

  • Verbesserte Sicherheit aller internen Shell-Befehle durch Validierung aller Ausgaben/Fehler. (I5984d, b/255402908, b/253094958)
  • Geben Sie das Gerät im Basisprofil-Befehl adb pull an, damit der Pull-Befehl einfach kopiert werden kann, wenn mehrere Geräte verbunden sind (bis zu einem Emulator) (I6ac6c, b/223359380).
  • Fügen Sie einen Fehler hinzu, wenn das Makro-Benchmark-Test-APK nicht als selbstinstrumentierung eingerichtet ist. Durch diesen Fehler wird das Makro-Benchmarking innerhalb des Prozesses der Ziel-App verhindert. Im Prozess könnte Macrobench die App nicht kompilieren, beenden oder Kaltstarts ausführen und auch keine eigenen Berechtigungen steuern (I4279b).
  • Es wurde ein Problem in measureRepeated() behoben, bei dem StartupMode.COLD den Zielprozess nach dem setupBlock nicht beendet hat. Wenn setupBlock mit der App interagiert, läuft der App-Prozess jetzt nicht mehr und es wird eine ungültige Kaltstartmessung durchgeführt. (I8ebb7)

Version 1.2.0-alpha06

24. Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha06 wird freigegeben. Version 1.2.0-alpha06 enthält diese Commits.

API-Änderungen

  • BaselineProfileRule benötigt unter Android 13 (API 33) keinen Root-Zugriff mehr und befindet sich nicht mehr in der Testphase. (Ie0a7d, b/250083467, b/253094958)
    • Mit dieser Änderung wird auch behoben, wie Profile aus einer App auf nicht gerooteten Geräten auf das Laufwerk geleert werden. Hierfür muss jedoch die Profileinstaller-Abhängigkeit der Ziel-App aktualisiert werden.
    • Wenn du BaselineProfileRule oder CompilationMode.Partial(warmupIterations) auf einem nicht gerooteten Gerät verwenden möchtest, musst du auch deine Ziel-App auf androidx.profileinstaller.profileinstaller:1.3.0-alpha01 aktualisieren. Dadurch kann das Profil korrekt auf das Laufwerk geleert werden, sodass es kompiliert/extrahiert werden kann.

Fehlerkorrekturen

Version 1.2.0-alpha05

5. Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha05 wird freigegeben. Version 1.2.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Frame-Aufschlüsselung im Studio System Trace Viewer für in Benchmarks erfasste Traces korrigiert (I3f3ae, b/239677443)
  • Korrigieren Sie FrameTimingMetric so, dass für FrameOverrun die API 31 statt 29 erforderlich ist (I716dd, b/220702554).
  • Legen Sie die Iteration in BaselineProfileRule fest und geben Sie einen klaren Fehler aus, wenn das Zielpaket nicht installiert ist (was bereits für MacroBenchmarkRule getan wurde). (Ic09a3, b/227991471)

Version 1.2.0-alpha04

21. September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha04 wird freigegeben. Version 1.2.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Zusätzliche Unterstützung für das Instrumentierungsargument dryRunMode.enable in Makro-Benchmark (bereits in Mikros verfügbar), um die lokale Entwicklung zu beschleunigen und die App-Automatisierung (z.B. in der Vorabübermittlung) zu validieren. Dadurch werden Iterationen auf 1 überschrieben, die Kompilierung übersprungen, alle Konfigurationsfehler unterdrückt und die JSON-Dateiausgabe für Messungen deaktiviert. (Ib51b4, b/175149857)

    In der Gradle-Befehlszeile:

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

    Gehen Sie in build.gradle:

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

Fehlerkorrekturen

  • Problem behoben, bei dem für StartupTimingMetric keine gemessenen Aktivitäten mehr bis zum MacrobenchmarkScope.startActivityAndWait() gestartet werden müssen. Das bedeutet, dass der Messwert Starts wie Benachrichtigungen, Context.startActivity(), aktivitätsbasierte Navigation in der App oder Shell-Befehle übernehmen kann. (Ia2de6, b/245414235)
  • Ein Fehler wurde behoben, bei dem startActivityAndWait beim Versuch, auf den Abschluss des Starts in Emulatoren zu warten, eine Zeitüberschreitung verursachte, indem die strikte Frame-Erkennung reduziert wurde. (Ibe2c6, b/244594339, b/228946895)

Version 1.2.0-alpha03

7. September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha03 wird freigegeben. Version 1.2.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Es wurden experimentelle APIs zur unabhängigen Verwendung von BenchmarkState (getrennt von BenchmarkRule / JUnit4) hinzugefügt. (Id478f, b/228489614)

Fehlerkorrekturen

Version 1.2.0-alpha02

24. August 2022

androidx.benchmark:benchmark-*:1.2.0-alpha02 wird freigegeben. Version 1.2.0-alpha02 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

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

Version 1.2.0-alpha01

27. Juli 2022

androidx.benchmark:benchmark-*:1.2.0-alpha01 wird freigegeben. Version 1.2.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Mit der neuen Komponente „Tracing-perfetto-common“ kann das Perfetto SDK-Tracing in einer App aktiviert werden, die es freigibt (I2cc7f)
  • Das Instrumentierungsargument androidx.benchmark.enabledRules wurde hinzugefügt, um zu ermöglichen, dass Makro-Benchmark-Ausführungen nur nach Benchmarks oder nur nach Referenzprofilen gefiltert werden. Übergeben Sie "MacroBenchmark" oder "BaselineProfile", um nur einen Testtyp auszuführen, z.B. wenn nur BaselineProfiles in einem Emulator generiert wird. Durch Kommas getrennte Liste wird auch unterstützt. (I756b7, b/230371561)

    Beispiel: In der build.gradle-Datei Ihrer Makro-Benchmark:

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

    Oder über die Gradle-Befehlszeile:

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

API-Änderungen

  • Neue PowerMetric zum Messen von Energie- und Energieaufgaben in Benchmarks hinzugefügt. (I9f39b, b/220183779)
  • Ein neuer Kompilierungsmodus CompilationMode.Ignore wurde hinzugefügt, um das Zurücksetzen und Kompilieren des Profils zu überspringen. (Ibbcf8, b/230453509)
  • BaselineProfileRule#collectBaselineProfile wurde ein neuer Parameter hinzugefügt, um die Ausgabedatei nach Paketnamen zu filtern (If7338, b/220146561).
  • Ermöglicht es dem Entwickler, das Gerät zu entladen, um den Stromverbrauch zu messen. (I6a6cb)
  • Die Möglichkeit zum Leeren des Shader-Cache in MacrobenchmarkScope wurde hinzugefügt. (I32122)
  • Ermöglicht es dem Entwickler, die Anzeige des Messwerttyps und der gewünschten Subsystemkategorien zu konfigurieren. (I810c9)
  • Zuvor wurde bei Ausführung auf einem nicht unterstützten Gerät ein UnsupportedOperationException in der Benchmark ausgegeben. UOE tritt jetzt nur auf, wenn der Messwert auf dem nicht unterstützten Gerät verwendet wird (z. B. PowerMetric.configure). (I5cf20, b/227229375)
  • TotalPowerMetric und TotalEnergyMetric zur Messung von Gesamtenergie und -energie in jeder Systemkategorie in Makro-Benchmarks hinzugefügt. (I3b26b, b/224557371)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem kompilierte Methoden zwischen den einzelnen Makro-Benchmarks in nicht gerooteten Builds nicht korrekt zurückgesetzt wurden. Dies erfordert leider bei jeder Iteration eine Neuinstallation der APK-Datei, wodurch die Anwendungsdaten für jede Makro-Benchmark gelöscht werden. (I31c74, b/230665435)
  • Absturz der Trace-Aufzeichnung in API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788) beheben
  • Erkennung der abgeschlossenen Einführung von Aktivitäten überarbeiten, um die Ausnahme „Keine Messwerte können nicht gelesen werden“ in Start-Makro-Benchmarks zu beheben. (Ia517c)

Version 1.1.1

Version 1.1.1

9. November 2022

androidx.benchmark:benchmark-*:1.1.1 wird freigegeben. Version 1.1.1 enthält diese Commits.

Fehlerkorrekturen

  • Fehlerkorrekturen für android.system.ErrnoException: open failed: EACCES, die auf einigen Geräten mit Android 11 (API 30) und höher auftreten würden. Das ist eine Auswahl von 1.2.0-alpha01. (aosp/2072249)

Version 1.1.0

Version 1.1.0

15. Juni 2022

androidx.benchmark:benchmark-*:1.1.0 wird freigegeben. Version 1.1.0 enthält diese Commits.

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

Wichtige Änderungen seit Version 1.0.0

Version 1.1.0-rc03

1. Juni 2022

androidx.benchmark:benchmark-*:1.1.0-rc03 wird freigegeben. Version 1.1.0-rc03 enthält diese Commits.

Fehlerkorrekturen

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

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

  • Verbessern Sie die Iterationsgeschwindigkeit von MacroBenchmark, indem Sie Shell-Befehle optimieren, die im Hintergrund verwendet werden. (aosp/2086023, b/231323582)

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

Version 1.1.0-rc02

11. Mai 2022

androidx.benchmark:benchmark-*:1.1.0-rc02 wird freigegeben. Version 1.1.0-rc02 enthält diese Commits.

  • Diese Version beinhaltet eine Änderung des Verhaltens, da Apps nun zwischen den einzelnen Benchmarks vollständig neu installiert werden, um genaue Messungen zu gewährleisten.

Fehlerkorrekturen/Verhaltensänderungen

  • Ein Problem wurde behoben, bei dem die App-Kompilierung zwischen Makro-Benchmarks nicht korrekt und bei nicht gerooteten Builds nicht zurückgesetzt wurde. Dadurch werden viele Fälle behoben, in denen die Ausführung mehrerer Tests dazu führen würde, dass CompilationMode nur geringe oder gar keine Auswirkungen auf die Messungen hätte. Um dieses Problem zu umgehen, installiert die Ziel-App nun jede Testmethode vollständig neu, wodurch die Anwendungsdaten zwischen den einzelnen Makro-Benchmarks gelöscht werden. (I31c74, b/230665435)

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

    Beispiel: In der build.gradle-Datei Ihrer Makro-Benchmark:

    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 kann ein Modul zwischen Makro-Benchmarks und Tests zum Generieren von Referenzprofilen geteilt werden. Übergeben Sie "MacroBenchmark" oder "BaselineProfile", um nur einen Testtyp auszuführen, z.B. beim Generieren von BaselineProfiles in einem Emulator. (I756b7, b/230371561)

    Beispiel: In der build.gradle-Datei Ihrer Makro-Benchmark:

    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 wird freigegeben. Version 1.1.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Die Links für die Ausgabe des Referenzprofils in Android Studio haben jetzt einen eindeutigen Dateinamen. So spiegelt die Ausgabe immer die neuesten Ergebnisse der Verwendung von BaselineProfileRule wider. ( aosp/2057008, b/228203086 )

Version 1.1.0-beta06

6. April 2022

androidx.benchmark:benchmark-*:1.1.0-beta06 wird freigegeben. Version 1.1.0-beta06 enthält diese Commits.

Fehlerkorrekturen

  • Absturz der Trace-Aufzeichnung in API 21/22 (If7fd6, b/227509388) beheben
  • Erkennung der abgeschlossenen Einführung von Aktivitäten überarbeiten, um die Ausnahme „Keine Messwerte können nicht gelesen werden“ in Start-Makro-Benchmarks zu beheben. (Ia517c)
  • Korrigieren Sie die Startmesswerte für Makro-Benchmarks, wenn CompilationMode.None() verwendet wird. Vor dieser Änderung wäre CompilationMode.Partial() wahrscheinlich langsamer als Compilation.None(). 611ac9.

Version 1.1.0-beta05

23. März 2022

androidx.benchmark:benchmark-*:1.1.0-beta05 wird freigegeben. Version 1.1.0-beta05 enthält diese Commits.

Fehlerkorrekturen

  • Beenden Sie das Paket, nachdem Sie die Profilinstallation übersprungen haben, wenn Sie CompilationMode.None verwenden. (aosp/1991373)
  • Es wurde ein Problem behoben, bei dem Makro-Benchmarks bei Verwendung von StartupMode.COLD keine Startmesswerte erfassen konnten. (aosp/2012227 b/218668335)

Version 1.1.0-beta04

23. Februar 2022

androidx.benchmark:benchmark-*:1.1.0-beta04 wird freigegeben. Version 1.1.0-beta04 enthält diese Commits.

Fehlerkorrekturen

  • Probleme mit fehlenden Messwerten unter Android 10 und NoSuchElementException wurden behoben, die dadurch verursacht wurden, dass Prozessnamen in Traces nicht richtig erfasst wurden. (Ib4c17, b/218668335)

  • Verwenden Sie PowerManager zur Erkennung von thermischer Drosselung in Q (API 29) und höher. Dadurch wird die Häufigkeit falsch positiver Ergebnisse bei der Erkennung von Thermodrosselung erheblich reduziert (Benchmark-Wiederholung nach einer Wartezeit von 90 Sekunden) und die Benchmarks für Nutzer-Builds werden erheblich beschleunigt. Außerdem bietet sie Drosselungserkennung, auch wenn die Uhren gesperrt sind (wenn sie für die physische Umgebung des Geräts zu hoch eingestellt sind). (I9c027, b/217497678, b/131755853)

  • Filtern Sie die simpleperf-stichprobenbasierte Profilerstellung nur nach measureRepeated-Thread, um die Prüfung zu vereinfachen (Ic3e12, b/217501939).

  • Unterstützung von Messwerten von benannten UI-Unterprozessen in Multi-Prozess-Anwendungen (Ice6c0, b/215988434)

  • Filtern Sie die Regeln für das Ausgangsprofil so, dass sie auf Android 9 (SDK 28) ausgerichtet sind. aosp/1980331 b/216508418

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

Version 1.1.0-beta03

9. Februar 2022

androidx.benchmark:benchmark-*:1.1.0-beta03 wird freigegeben. Version 1.1.0-beta03 enthält diese Commits.

API-Änderungen

  • AudioUnderrunMetric wurde der Macro-Benchmark-Bibliothek unter dem Flag „experimentell“ hinzugefügt, um die Erkennung von Audiounterläufen zu ermöglichen (Ib5972).
  • BaselineProfileRule akzeptiert einen setup-Block nicht mehr, da dies genauso funktioniert wie der profileBlock-Block. (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()
                // ...
            }
        )
    }
    

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Microbench-Profiler-Traces in nachfolgenden Ausführungen nicht aktualisiert wurden, wenn sie in der Studio-Ausgabe verknüpft waren (I5ae4d, b/214917025).
  • Kompilierungs-Shell-Befehle in API 23 (Ice380) verhindern
  • Umbenennung von FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi, um zu verdeutlichen, dass es sich um Angaben zur Dauer, nicht um Zeitstempel handelt, und um Präfixe abzugleichen. (I0eba3, b/216337830)

Version 1.1.0-beta02

26. Januar 2022

androidx.benchmark:benchmark-*:1.1.0-beta02 wird freigegeben. Version 1.1.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Die Profilergebnisse für Stackproben und Methoden-Tracing sind jetzt in der Studio-Ausgabe verknüpft, ähnlich wie andere Profilerstellungsausgaben, und unterdrücken den Zuweisungsmesswert 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 wird freigegeben. Version 1.1.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Das Ignorieren der Profiler-Argumentaktivierung wurde behoben. (I37373, b/210619998)
  • Verworfene CompliationModes entfernt (I98186, b/213467659)
  • Das Basisprofilargument von CompilationMode.Partial wurde der Übersichtlichkeit halber auf „enum“ umgestellt. (Id67ea)

Version 1.1.0-alpha13

15. Dezember 2021

androidx.benchmark:benchmark-*:1.1.0-alpha13 wird freigegeben. Version 1.1.0-alpha13 enthält diese Commits.

API-Änderungen

  • Fügen Sie der Microbench-Ausgabe in Android Q (API 29 und höher) ein System-Tracing mit geringem Aufwand hinzu. Beachten Sie, dass damit derzeit kein benutzerdefiniertes Tracing (über die android.os.Trace- oder androidx.tracing-Jetpack-APIs) erfasst wird, um Auswirkungen auf die Ergebnisse zu vermeiden. Dieses Tracing sollte bei der Diagnose von Instabilität nützlich sein, insbesondere von Quellen außerhalb der Benchmark. (I298be, b/205636583, b/145598917)
  • Erläutere CompilationModes in drei Klassen: „Full“, „None“ und „Partial“. Zuvor wurden sie uneinheitlich nach Kompilierungsargumenten (die wir jetzt als Implementierungsdetails behandeln) und Funktionen benannt. Dadurch werden die Vor- und Nachteile, möglichen Kombinationen und das Verhalten plattformübergreifender Versionen deutlicher. (I3d7bf, b/207132597)
  • Einrichtung und Messung erfolgen jetzt immer paarweise und in der richtigen Reihenfolge. Sie können jetzt den Paketnamen und die Iteration abfragen. In bestimmten Aufwärmszenarien kann die Iteration jedoch null sein. (Id3b68, b/208357448, b/208369635)

Fehlerkorrekturen

  • Problem behoben, das CompilationMode.Speed fälschlicherweise als None behandelt hat (I01137)

Version 1.1.0-alpha12

17. November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha12 wird freigegeben. Version 1.1.0-alpha12 enthält diese Commits.

Neue Funktionen

  • Fügen Sie den experimentellen TraceSectionMetric für benutzerdefinierte Trace-basierte Zeitmessungen hinzu. (I99db1, b/204572664)

Fehlerkorrekturen

  • Aktivieren Sie das Gerät bei jeder Iteration, damit die UI getestet werden kann. Hierfür muss der Sperrbildschirm deaktiviert sein. (Ibfa28, b/180963442)
  • Behebt mehrere Abstürze im StackSampling-Profilerstellungsmodus auf Emulatoren und nicht gerooteten Geräten (Icdbda, b/202719335).
  • Der Ruhezustand von 0,5 Sekunden am Ende jedes Durchlaufs wurde entfernt.Wenn bei dieser Änderung Messwerte fehlen, melden Sie den Fehler. (Iff6aa)
  • Reduzieren Sie die Wahrscheinlichkeit, dass Daten verloren gehen, und verringern Sie den Speicheraufwand durch das Tracing (Id2544, b/199324831, b/204448861).
  • Verringern Sie die Trace-Größe um etwa 40 %, indem Sie zum kompakten geplanten Speicherformat wechseln. (Id5fb6, b/199324831)
  • Implementierungen von Startmesswerten wurden aktualisiert, sodass sie immer am Ende des Renderingthreads enden. Dies wird für alle Plattformversionen einheitlicher und entspricht den In-App-Messungen. (Ic6b55)

Version 1.1.0-alpha11

3. November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha11 wird freigegeben. Version 1.1.0-alpha11 enthält diese Commits.

API-Änderungen

  • MacroBenchmark hat jetzt einen minSdkVersion von 23. (If2655)
  • Ein neuer experimenteller BaselineProfileRule wird hinzugefügt, mit dem Referenzprofile für wichtige Nutzerpfade der App erstellt werden können. Detaillierte Dokumentation folgen. (Ibbefa, b/203692160)
  • Entfernt die Schnittstellenvariante „measureRepeated“, die für Java-Aufrufer hinzugefügt wurde, da sie Unklarheiten beim Abschließen/Auflösen der Methode verursacht hat. Java-Aufrufer müssen wieder "Unit.Instance" aus "measureRepeated" zurückgeben. Falls dies eine Unannehmlichkeit sein sollte, melden Sie bitte einen Fehler, damit wir das Problem in einer zukünftigen Version beheben können. (Ifb23e, b/204331495)

Version 1.1.0-alpha10

27. Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha10 wird freigegeben. Version 1.1.0-alpha10 enthält diese Commits.

API-Änderungen

  • Backport von StartupTimingMetric, um wieder zu API 23 zu arbeiten. Mit dieser neuen Implementierung lässt sich außerdem „reportFullyDrawn()“ besser verarbeiten, um zu warten, bis der entsprechende Inhalt gerendert wurde. (If3ac9, b/183129298)
  • Mehrere MacroBenchmarkScope-Methoden für Java-Aufrufer wurden um JvmOverloads ergänzt. (I644fe, b/184546459)
  • Stellen Sie eine alternative Funktion „MacrobenchmarkRule.measureRepeated“ bereit, die ein Consumer<MacrobenchmarkScope> für die idiomatische Nutzung in der Sprache Java verwendet. (If74ab, b/184546459)

Fehlerkorrekturen

  • Fehlerkorrektur für Traces, die nicht früh genug gestartet wurden und Messwertdaten fehlen. Dadurch wird erwartet, dass Ausnahmen vom Typ „Während der Benchmark können keine Messwerte gelesen werden“ behoben werden, die von der Bibliothek selbst verursacht wurden. (I6dfcb, b/193827052, b/200302931)
  • FrameNegativeSlack wurde in FrameOverrun umbenannt, um die Bedeutung zu verdeutlichen, d. h. wie stark der Frame sein Zeitbudget überschritten hat. (I6c2aa, b/203008701)

Version 1.1.0-alpha09

13. Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha09 wird freigegeben. Version 1.1.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • Unterstützung für das Löschen des Kernel-Seiten-Cache ohne Root in 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 wird freigegeben. Version 1.1.0-alpha08 enthält diese Commits.

API-Änderungen

  • Scroll-Makro-Benchmarks aktivieren, damit sie wieder zu API 23 ausgeführt werden (If39c2, b/183129298)
  • Der UI- und JSON-Ausgabe wurde ein neuer Messwerttyp hinzugefügt. Der Schwerpunkt liegt nun auf Perzentilen mit mehreren Stichproben pro Iteration. (I56247, b/199940612)
  • Wechseln Sie in den Benchmark-Bibliotheken (in der Studio-Benutzeroberfläche abgeschnitten) zu Gleitkommamesswerten. (I69249, b/197008210)

Version 1.1.0-alpha07

1. September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha07 wird freigegeben. Version 1.1.0-alpha07 enthält diese Commits.

API-Änderungen

  • Die API-Mindestanzahl wurde auf 21 erhöht, um das niedrigste API-Level anzugeben, das in Zukunft unterstützt werden soll. Die aktuell unterstützte Mindest-API wird weiterhin über requiredApi() übertragen und beträgt derzeit 29 (I440d6, b/183129298)

Fehlerkorrekturen

  • Fehlerkorrekturen für ProfileInstaller, sodass Apps, die Referenzprofile verwenden, Makro-Benchmarks mit CompilationMode.BaselineProfile ausführen können. (I42657, b/196074999) HINWEIS: Hierfür ist auch eine Aktualisierung auf androidx.profileinstaller:profileinstaller:1.1.0-alpha04 oder höher erforderlich.
  • Die Benchmarks für „StartupMode.COLD“ und „CompilationMode.None“ sind jetzt stabiler. (I770cd, b/196074999)

Version 1.1.0-alpha06

18. August 2021

androidx.benchmark:benchmark-*:1.1.0-alpha06 wird freigegeben. Version 1.1.0-alpha06 enthält diese Commits.

API-Änderungen

  • Das Instrumentierungsargument androidx.benchmark.iterations wurde hinzugefügt, um das manuelle Überschreiben der Iterationszahl bei lokalen Tests/Profilen zu ermöglichen. (6188be, b/194137879)

Fehlerkorrekturen

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

Bekannte Probleme

  • CompilationMode.BaselineProfile ist noch in der Entwicklung. Du solltest sie nicht verwenden, um festzustellen, wie gut ein Profil im Moment ist.

Version 1.1.0-alpha05

4. August 2021

androidx.benchmark:benchmark-*:1.1.0-alpha05 wird freigegeben. 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 Launch über am start gestartet wird. Dadurch wird die Zeit jedes Messdurchlaufs um etwa 5 Sekunden reduziert, allerdings auf Kosten, weil Intent-Parcelables nicht mehr unterstützt werden. (I5a6f5, b/192009149

Fehlerkorrekturen

  • Reduzieren Sie die Aggressivität der Erkennung von thermischen Drosselungen und berechnen Sie den Referenzwert neu, wenn Drosselungen häufig erkannt werden. (I7327b)
  • Fehlerbehebung: FrameTimingMetric funktioniert jetzt unter Android S Beta (Ib60cc, b/193260119).
  • Verwenden Sie ein EmptyActivity, um die Ziel-App aus einem erzwungenen Beenden-Zustand zu entfernen und CompilationMode.BaselineProfile besser zu unterstützen. (Id7cac, b/192084204)
  • Die Dateiendung für die Trace-Datei wurde in .perfetto-trace geändert, damit sie dem Plattformstandard entspricht. (I4c236, b/174663039)
  • StartupTimingMetric gibt jetzt den Messwert "filledDrawnMs" aus, um die Zeit zu messen, die bis zum Abschluss des Renderings der Anwendung benötigt wird. Um diesen Messwert für Ihre App zu definieren, rufen Sie Activity.reportFullyDrawn auf, sobald die ersten Inhalte bereit sind. Dies ist beispielsweise der Fall, wenn die ersten Listenelemente aus der Datenbank oder dem Netzwerk geladen werden. Die Methode „reportFullyDrawn“ ist ohne Build-Versionsprüfungen für „ComponentActivity“ verfügbar. Der Test muss lange genug ausgeführt werden, um den Messwert zu erfassen. Mit „startActivityAndWarte“ wird nicht auf „reportFullyDrawn“ gewartet. (If1141, b/179176560)
  • Kosten für das Anhängen von Ui-Metadaten an Traces um mehr als 50 ms reduzieren (Ic8390, b/193923003)
  • Drastisch erhöhte Abfragehäufigkeit beim Beenden des Tracings, was z.B. die Start-Benchmark-Laufzeit um mehr als 30 % reduzieren kann (Idfbc1, b/193723768)

Version 1.1.0-alpha03

16. Juni 2021

androidx.benchmark:benchmark-*:1.1.0-alpha03 wird freigegeben. Version 1.1.0-alpha03 enthält diese Commits.

Neue Funktionen

Fehlerkorrekturen

  • Der Gradle-Beispielcode zum Unterdrücken von Benchmarkfehlern wurde aktualisiert. Er verwendet nun eine nicht verworfene API mit einer Syntax, die auch .gradle.kts-Nutzer unterstützt.

    Z. B.

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

Version 1.1.0-alpha02

18. Mai 2021

Die Benchmark-Version 1.1.0-alpha02 bringt eine große Rolle beim Benchmarking mit, nämlich MacroBenchmark. Mit Benchmark können Sie nicht nur CPU-Schleifen messen, sondern mit MacroBenchmark Interaktionen 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 wird freigegeben. Version 1.1.0-alpha02 enthält diese Commits.

Neue Funktionen

Makro-Benchmark-Artefakte wurden hinzugefügt (androidx.benchmark:benchmark-macro-junit4 und androidx.benchmark:benchmark-macro)

  • Erfassen Sie Leistungsmesswerte beim Start, beim Scrollen oder bei Animationen aus Ihrer App, lokal oder in CI.
  • Traces in Android Studio erfassen und untersuchen

Fehlerkorrekturen

  • Damit lassen sich Probleme mit den Shell-Berechtigungen für das Ausgabeverzeichnis unter Android 12 umgehen. Hinweis: Möglicherweise müssen Sie das Android Gradle-Plug-in auf Canary-Version 7.0.0 und Android Studio auf Arctic Fox (2020.3.1) aktualisieren, um weiterhin Ausgabedateien auf betroffenen Geräten erfassen zu können. (Icb039)
  • Unterstützung des Konfigurations-Caching in BenchmarkPlugin (6be1c1, b/159804788)
  • Vereinfachte Dateiausgabe – standardmäßig aktiviert, in einem Verzeichnis, für das requestLegacyExternalStorage=true nicht erforderlich ist (8b5a4d, b/172376362)
  • Es wurden Logcat-Warnungen zum Drucken von Bibliotheken behoben, bei denen der JIT-Thread in Plattformversionen, auf denen er nicht vorhanden ist, nicht gefunden wird. (I9cc63, b/161847393)
  • Fehler bei maximaler 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 wurden veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.

Neue Funktionen in Version 1.1

  • Zuordnungsmesswert: Benchmarks werden jetzt nach dem Aufwärmen und der zeitlichen Abfolge in einer zusätzlichen Phase ausgeführt, in der die Anzahl der Zuweisungen erfasst wird. Zuweisungen können bei älteren Versionen der Plattform zu Leistungsproblemen führen (140 n in O werden zu 8 n in M – gemessen auf Nexus5X mit gesperrten Uhren). Dieser Messwert wird in der Ausgabe der Android Studio-Konsole sowie in der
  • Unterstützung für Profilerstellung: Sie können jetzt Profildaten für eine Benchmarkausführung erfassen, um zu prüfen, warum Ihr Code möglicherweise langsam ausgeführt wird. Benchmark unterstützt die Erfassung entweder von Methoden-Tracing oder von Methoden-Stichproben aus ART. Diese Dateien können in Android Studio mit dem Profiler überprüft werden. Klicken Sie dazu auf Datei > Öffnen.
  • Das Benchmark-Gradle-Plug-in bietet jetzt Standardeinstellungen für eine einfachere Einrichtung:
    • testBuildType ist auf den standardmäßigen Release gesetzt, um die Verwendung von Abhängigkeiten mit integrierter Codeabdeckung zu vermeiden. Der Build-Typ des Release ist auch als standardmäßiger „buildType“ konfiguriert, sodass Android Studio beim ersten Öffnen eines Projekts automatisch die richtige Build-Variante auswählen kann. (b/138808399)
    • signingConfig.debug wird als Standardkonfiguration für Signatur verwendet (b/153583269).

** Fehlerkorrekturen **

  • Der Aufwand für den Warmup-Übergang wurde deutlich reduziert, da die erste Messung für jede Benchmark künstlich höher war als andere. Dieses Problem war in sehr kleinen Benchmarks (1 Mikrosekunde oder weniger) stärker ausgeprägt. (b/142058671)
  • Der InstrumentationResultParser-Fehler, der bei der Ausführung über die Befehlszeile für jede Benchmark ausgegeben wurde, wurde behoben. (I64988, b/154248456)

Bekannte Probleme

  • Bei Gradle-Aufrufen von Benchmark-Befehlszeilen werden die Ergebnisse nicht direkt ausgegeben. Sie können das Problem umgehen, indem Sie entweder Studio verwenden oder die JSON-Ausgabedatei nach Ergebnissen parsen.
  • Bei Benchmarkberichten kann der Bericht nicht von Geräten abgerufen werden, auf denen eine App installiert ist, deren appId auf „android“ oder „download“ endet (Groß-/Kleinschreibung wird nicht berücksichtigt). Nutzer, bei denen dieses Problem auftritt, 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.

Hauptfunktionen von Version 1.0.0

Mit der Benchmark-Bibliothek können Sie Leistungs-Benchmarks für Anwendungscode schreiben und schnell Ergebnisse erhalten.

Sie verhindert Build- und Laufzeitkonfigurationsprobleme und stabilisiert die Geräteleistung, um für genaue und konsistente Messungen zu sorgen. Führen Sie die Benchmarks direkt in Android Studio oder in Continuous Integration aus, um die Codeleistung über einen längeren Zeitraum zu beobachten und Regressionen zu verhindern.

Zu den Hauptfunktionen gehören:

  • Uhrstabilisierung
  • Automatische Thread-Priorisierung
  • Unterstützung für UI-Leistungstests, z. B. im RecyclerView-Beispiel
  • JIT-fähiges Aufwärmen und Schleifen
  • JSON-Benchmark-Ausgabe 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 wurden veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.

Neue Funktionen

  • Benchmarks wurde das Systrace-Tracing hinzugefügt.

Fehlerkorrekturen

  • Problem mit Instabilität von Messwerten behoben, bei dem JIT aufgrund von Depriorisierung vor dem Aufwärmen nicht 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 wurden 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 Speicherauslastung von einer Benchmark zu reduzieren, die zu einer anderen führt (b/140895105).

Fehlerkorrekturen

  • Die androidx.annotation:android-experimental-lint-Abhängigkeit wurde hinzugefügt, damit Java-Code Lint-Fehler korrekt erzeugt, wenn keine experimentelle API verwendet wird, ähnlich wie bei der experimentellen Kotlin-Annotation für Kotlin-Aufrufer.
  • Erkennt jetzt korrekt die Verwendung des additionalTestOutputDir-Instrumentierungsarguments für die Ausgabe in Android Gradle-Plug-in 3.6, um festzustellen, wann AGP das Kopieren von Daten verarbeitet.
  • Korrigieren Sie die nicht erkannte Taktfrequenz in JSON, um -1 (b/141945670) korrekt auszugeben.

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 wurden veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Es wurde eine Prüfung auf falsche Verwendung des alten Pakets für den Test-Runner hinzugefügt, wodurch jetzt eine hilfreichere Fehlermeldung zurückgegeben wird.

API-Änderungen

  • Die experimentelle Anmerkung „ExperimentalAnnotationReport“ ist jetzt korrekt öffentlich. Für die Nutzung der experimentellen BenchmarkState#report API 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 wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • BenchmarkState.reportData API ist jetzt als experimentell gekennzeichnet

Fehlerkorrekturen

  • Fehlerkorrektur für das Sperrskript, das auf Geräten ohne das Shell-Dienstprogramm cut oder expr fehlgeschlagen ist.
  • Es wurde ein Problem mit der Aufgabe ./gradlew lockClocks behoben, das sich auf Geräten aufhängte, die mit einer älteren Version des su-Dienstprogramms gerootet wurden, das das Flag -c nicht unterstützte.

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 wurden 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 (z. B. Bali 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
    • Die Testabdeckung wird jetzt automatisch deaktiviert und AndroidBenchmarkRunner wird standardmäßig festgelegt (b/138374050)
    • Unterstützung für neue AGP-basierte Datenkopien beim Ausführen von Benchmarks und bei Verwendung von AGP 3.6+
  • Ergänzungen im JSON-Format
    • Gesamtausführungszeit des Benchmark-Ausgabetests (b/133147694)
    • @Parameterized-Benchmarks, die einen Namensstring verwenden (z. B. @Parameters(name = "size={0},depth={1}")), geben jetzt in der JSON-Ausgabe Parameternamen und -werte pro Benchmark aus (b/132578772).
  • Probelaufmodus (b/138785848)
    • Es wurde ein Probelaufmodus hinzugefügt, mit dem jede Benchmarkschleife nur einmal ausgeführt wird. So lässt sich nach Fehlern/Abstürzen suchen, ohne Messungen zu erfassen. Dies kann zum Beispiel nützlich sein, wenn Sie schnell Benchmarks in der Vorabübermittlung ausführen möchten, um zu überprüfen, ob sie fehlerhaft sind.

API-Änderungen

  • Die Modulstruktur hat sich geändert und die Bibliothek aufgeteilt (b/138451391)
    • benchmark:benchmark-junit4 enthält Klassen mit JUnit-Abhängigkeit: AndroidBenchmarkRunner und BenchmarkRule, die beide in das androidx.benchmark.junit4-Paket verschoben wurden.
    • benchmark:benchmark-common enthält den Rest der 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 bringen den Test zum Absturz (b/137653596).
    • Dies dient dazu, präzise Messungen zu fördern, insbesondere in CI.
    • Diese Fehler können mit einem Instrumentierungsargument auf Warnungen reduziert werden. Beispiel: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Fehlerkorrekturen

  • Wenn Fehler beim Schreiben in externen Speicher auf Q-Geräten auftreten, erhalten Sie aussagekräftigere Meldungen mit Vorschlägen zur Behebung des Problems
  • Die Bildschirme werden während der Benchmark-Ausführung automatisch eingeschaltet und es geht nicht aus, wenn der Bildschirm ausgeschaltet ist.

Externe Beiträge

  • Vielen Dank an Sergey Zakharov für die Verbesserung der JSON-Ausgabe und die Behebung von Bildschirmproblemen.

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 werden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Schlafdauer aufgrund von Drosselung der Energiezufuhr pro Benchmark im vollständigen JSON-Bericht freigeben

Fehlerkorrekturen

  • Das Gradle-Plug-in sollte nach Android-Plug-ins und dem Android-Block nicht mehr angewendet werden müssen.
  • Zusätzliche Unterstützung für Benchmarkberichte auf Android 10-Geräten mit begrenztem Speicherplatz

Version 1.0.0-alpha02

6. Juni 2019

androidx.benchmark:1.0.0-alpha02 und androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 werden freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.

Beachten Sie, dass wir das JSON-Schema als eine API behandeln. Wir planen dieselben Stabilitätseinschränkungen wie bei anderen APIs: mit sehr seltenen Ausnahmen, einmal in der Betaphase, und in der endgültigen Version behoben. Bei Hauptversionen werden nur Ergänzungen und Änderungen/Entfernungen vorgenommen.

API-Änderungen

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

    • Die Ergebnisobjektstruktur wurde neu strukturiert, um in Zukunft zusätzliche Messwertgruppen zu unterstützen (b/132713021).
    • Dem Objekt auf oberster Ebene (b/132711920) wurden Kontextinformationen für den Testlauf hinzugefügt, z. B. Geräte- und Build-Informationen sowie darüber, ob Uhren gesperrt sind.
    • Die Namen von Zeitmesswerten haben jetzt „ns“ im Namen (b/132714527).
    • Zusätzliche Statistiken pro gemeldetem Messwert (Maximum, Median, Minimum) hinzugefügt und vereinfachte zusammenfassende Nanos-Statistik entfernt (b/132713851)
  • XML-Ausgabe entfernt (b/132714414)

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

Fehlerkorrekturen

  • Problem behoben, das ./gradlew lockClocks auf einigen aktuellen Betriebssystemen nicht beibehalten konnte (b/133424037)
  • Drosselungserkennung für Emulator deaktiviert (b/132880807)

Version 1.0.0-alpha01

7. Mai 2019

androidx.benchmark:benchmark:1.0.0-alpha01 wird freigegeben. Die in dieser Version enthaltenen Commits sind hier verfügbar.