Benchmark
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:
Groovig
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.
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 ingetMeasurements
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 einennonMinified
- 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 mitTrace.{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 zuFrameTimingMetric
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 vonFrameTimingMetric
, 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
undMode.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 beiStartupMode.Cold
-Starts), insbesondere beim Benchmarking von Apps, die Profileinstaller 1.3 noch nicht verwendenandroidx.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 auf500 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, dassStartupMode.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
- Ausführungsprotokolle zeigen den Ausgabedateipfad des Basisprofils als lokalen Datei-URI (aosp/2843918, aosp/2853665, b/313976958) an.
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 experimentellenBaselineProfileRule.collectBaselineProfile
API- Geben Sie einfach
packageName
an, um Ihre App zu starten.
- Geben Sie einfach
- 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
undMethodTracing
. 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 mitStartupMode.COLD
das Timing erheblich beeinflusst wird, da die Tracing-Bibliothek beim Start der App geladen und aktiviert wird.
- Unterstützung des Instrumentierungsarguments
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.
- Für Makro-Benchmarks ist jetzt
Neue experimentelle Messwert-APIs
- Es wurde eine experimentelle
TraceSectionMetric
-Funktion hinzugefügt, mit der sich ein einfaches Timing austrace("") {}
-Blöcken in Ihrer App extrahieren lässt, oder TraceMetric, um die volle Abfragefunktion von PerfettoTraceProcessor
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.
- Es wurde eine experimentelle
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 überMacrobenchmarkScope.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 vonBenchmarkRule
, 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.
- Es wurde eine experimentelle
- 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, indemIsolationActivity
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 inperfettoSdkTracing.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
alsapi
anstelle einerimplementation
-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ßtframeDurationCpuMs
. (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 inBaselineProfileRule.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
zuTraceSectionMetric
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. DiecollectStableBaselineProfile
API wurde entfernt. Verwenden Sie stattdessencollectBaselineProfile
. (I17262, b/281078707) - Das Argument
filterPredicate
vonBaselineProfileRule
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 indryRunMode
, 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
undandroidx.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ährendRenderThread
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 warenUiAutomation
-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
undBaselineProfileRule
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 Instrumentierungsargumentandroidx.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 {}
undPerfettoTraceRule
, 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 Probleme
– MacrobenchmarkScope.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 ausStartupMode.COLD
-Benchmarks entfernt, da Shader jetzt regelmäßig bei jedem Durchlauf gelöscht werden. Bisher wurden bei derPartial
-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 vonprofileinstaller:1.3.0-alpha02
in der Ziel-App erforderlich. Informationen zu den API-Änderungen derProfileInstaller
-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 beispielsweiseTraceSectionMetric("inflate", Mode.Sum)
einen MesswertinflateMs
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, daTraceSectionMetric
zusammen mitandroidx.tracing.Trace
wieder auf niedrigere API-Levels setzt, wobei in der Ziel-AppforceEnableAppTracing
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 demStartupMode.COLD
den Zielprozess nach demsetupBlock
nicht beendet hat. WennsetupBlock
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
oderCompilationMode.Partial(warmupIterations)
auf einem nicht gerooteten Gerät verwenden möchtest, musst du auch deine Ziel-App aufandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
aktualisieren. Dadurch kann das Profil korrekt auf das Laufwerk geleert werden, sodass es kompiliert/extrahiert werden kann.
Fehlerkorrekturen
- Behebt den
SampledProfiling
-Absturz in API 33 und höher. (I40743, b/236109374)
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ürFrameOverrun
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 zumMacrobenchmarkScope.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 vonBenchmarkRule
/JUnit4
) hinzugefügt. (Id478f, b/228489614)
Fehlerkorrekturen
- Leanback-Fallback für
startActivityAndWait
hinzugefügt. (01ed77, b/242899915)
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ürMacrobenchmarkScope.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 nurBaselineProfiles
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
undTotalEnergyMetric
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 von1.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
Durch die Unterstützung von Jetpack-Makro-Benchmarks können App-Interaktionen wie Starten und Scrollen gemessen werden. Außerdem lassen sich Traces erfassen und Trace-Abschnitte messen.
Unterstützung von Baseline-Profilen
CompilationMode.Partial
, um die Wirksamkeit von Baseline-Profilen zu messen.@BaselineProfileRule
, um automatisch Baseline-Profile für einen bestimmten kritischen Nutzerpfad zu erstellen.
Unterstützung von Zuweisungsmesswerten und Profilen während der Ausführung von MicroBenchmarks.
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 vonpressHome()
. (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 vonBaselineProfiles
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äreCompilationMode.Partial()
wahrscheinlich langsamer alsCompilation.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 vonandroidx.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 einensetup
-Block nicht mehr, da dies genauso funktioniert wie derprofileBlock
-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
- oderandroidx.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 alsNone
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
von23
. (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 mitCompilationMode.BaselineProfile
ausführen können. (I42657, b/196074999) HINWEIS: Hierfür ist auch eine Aktualisierung aufandroidx.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 undCompilationMode.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
- Ein neuer
CompilationMode.BaselineProfile
wurde zur Unterstützung von Profilen hinzugefügt, die mit der Jetpack ProfileInstaller-Bibliothek installiert wurden. (aosp/1720930)
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
oderexpr
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+
- Die Testabdeckung wird jetzt automatisch deaktiviert und
- 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
undBenchmarkRule
, die beide in dasandroidx.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.