Benchmark
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpha-Release |
---|---|---|---|---|
10. Juli 2024 | 1.2.4 | - | 1.3.0-beta02 | - |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Benchmark hinzufügen möchten, müssen Sie Ihrem Projekt das Maven-Repository von Google hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Makro-Benchmark
Wenn Sie MacroBenchmark in Ihrem Projekt verwenden möchten, fügen Sie der Datei build.gradle
für das Makro-Benchmark-Modul die folgenden Abhängigkeiten 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 in Ihrem Projekt MicroBenchmark verwenden möchten, fügen Sie der Datei build.gradle
für das MicroBenchmark-Modul die folgenden Abhängigkeiten hinzu:
Groovig
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" } }
Die MicroBenchmark-Bibliothek enthält außerdem ein Gradle-Plug-in zur Verwendung mit Ihrem MikroBenchmark-Modul.
Dieses Plug-in legt Standardeinstellungen für die Build-Konfiguration für das Modul fest, richtet eine Benchmark-Ausgabekopie zum Host ein und stellt die
Aufgabe ./gradlew lockClocks
bereit.
Fügen Sie die folgende Zeile in den Block „plugins“ in der Datei build.gradle
der obersten Ebene ein, um das Plug-in zu verwenden:
Groovig
plugins { id 'androidx.benchmark' version '1.2.4' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.2.4" apply false }
Wenden Sie dann das Plug-in auf die Datei build.gradle
Ihres Benchmark-Moduls an.
Groovig
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Feedback
Dein Feedback hilft uns, Jetpack zu verbessern. Teilen Sie uns mit, wenn Sie neue Ausgaben entdecken oder Verbesserungsvorschläge für diese Bibliothek haben. Bitte sieh dir die vorhandenen Probleme in dieser Bibliothek an, bevor du eine neue erstellst. Sie können einem vorhandenen Problem Ihre Stimme hinzufügen, indem Sie auf die Sternschaltfläche klicken.
Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.
Version 1.3
Version 1.3.0-beta02
10. Juli 2024
androidx.benchmark:benchmark-*:1.3.0-beta02
wurde veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Behandeln Sie EXITCODE
2
ordnungsgemäß, wenn Perfetto gestartet wird, um eine Warnung zu protokollieren, aber fahren Sie fort.
Version 1.3.0-beta01
12. Juni 2024
androidx.benchmark:benchmark-*:1.3.0-beta01
wurde veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.
API-Änderungen
MethodTracing.affectsMeasurementOnThisDevice
wurde aus Konsistenzgründen inAFFECTS_MEASUREMENT_ON_THIS_DEVICE
umbenannt. (I1bdfa)- Die experimentelle
BlackHole.consume()
API wurde hinzugefügt, um die Eliminierung von veraltetem Code in MikroBenchmarks zu verhindern. (If6812, b/286091643) - MicroBenchmark wird jetzt korrekt ausgegeben, um zu verhindern, dass die Methodenverfolgung die Messungen beeinträchtigt. Dies tritt auf bestimmten Geräten auf, wenn das Methoden-Tracing über Instrumentierungsargumente oder
MicrobenchmarkConfig
erzwungen wird und wenn nach einem Methoden-Trace eine Messung versucht wird. Die betroffenen Geräte haben API 26-30 oder bestimmte ART-Mainline-Modulversionen, die von dieser Störung betroffen sind. Sie können während der Laufzeit überProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
erkannt werden. (Iafb92, b/303660864)
Fehlerkorrekturen
- Die empfohlene maximale AP-Version wurde auf 9.0.0-alpha01 erhöht. (I5bbb0)
- Kompilierungsmodus zum Benchmark-Kontext hinzugefügt (If5612, b/325512900)
- AIDL-Tracing standardmäßig aktivieren (erfordert API 28) (Ia0af2, b/341852305)
- In der JSON-Ausgabe wurden zusätzliche Informationen im Benchmark-Kontext hinzugefügt:
context.artMainlineVersion
: ganzzahlige Version des Art-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls -1)context.build.id
– Ist gleichandroid.os.Build.ID
context.build.version.codename
– Ist gleichandroid.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
: entspricht dem ersten Buchstaben des Codenamens der Vorabveröffentlichung (auch bei Release-Builds) (Ie5020)
- Der Fehler in
StackSampling
wurde so korrigiert, dassandroidx.benchmark.profiling.sampleDurationSeconds
berücksichtigt wird (Ib1d53). - Ändere die allgemeine Abhängigkeit von Makro-> zu
api()
, damit die Verwendung einfacher ist, z.B.PerfettoTrace
undPerfettoConfig
. (Icdae3, b/341851833) - Achten Sie darauf, dass die Aufgaben
mergeArtProfile
undmergeStartupProfile
immer auf die Erstellung des Basisprofils warten. (I623d6, b/343086054) - Berücksichtigen Sie bei der Entscheidung, ob eine Variante aktiviert werden soll, den Aktivierungsstatus für Varianten. (I5d19e, b/343249144)
- Das standardmäßige Startzeitlimit des Perfetto-Trace-Prozessors wurde erhöht. (I87e8c, b/329145808)
Version 1.3.0-alpha05
14. Mai 2024
androidx.benchmark:benchmark-*:1.3.0-alpha05
wurde veröffentlicht. Version 1.3.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Klarere Ausnahme auslösen, wenn der Makrobench-Messwert für alle Iterationen Nullwerte zurückgibt (Iab58f, b/314931695)
- Den Microbench-Proguard-Regeln wurden zusätzliche Problemumgehungen hinzugefügt, einschließlich der Unterstützung von Listener-Regeln und anderen beobachteten Warnungen / Fehlern. (I14d8f, b/329126308, b/339085669)
- Das Methoden-Tracing wird während eines MacroBenchmark als separate Phase ausgeführt und wirkt sich nicht mehr auf Messungen aus. (If9a50, b/285912360, b/336588271)
- Es wurden zusätzliche Vorschläge zur Fehlerbehebung hinzugefügt, um eine Fehlermeldung für Shader-Broadcasts zu hinterlassen. (I5efa6, b/325502725)
Version 1.3.0-alpha04
1. Mai 2024
androidx.benchmark:benchmark-*:1.3.0-alpha04
wurde veröffentlicht. Version 1.3.0-alpha04 enthält diese Commits.
API-Änderungen
- Es wurde die experimentelle Variante
MacrobenchmarkRule#measureRepeated
hinzugefügt, die eine benutzerdefiniertePerfettoConfig
für eine vollständig benutzerdefinierte Perfetto-Trace-Aufzeichnung verwendet. Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messwertklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384) PowerMetric.deviceSupportsPowerEnergy
zur besseren Verständlichkeit inPowerMetric.deviceSupportsHighPrecisionTracking
umbenennen (I5b82f)PowerMetric.deviceBatteryHasMinimumCharge()
undPowerMetric.deviceSupportsPowerEnergy()
wurden hinzugefügt, damit Benchmarks je nach der Fähigkeit zur Messung der Geräteleistung geändert oder übersprungen werden können. (I6a591, b/322121218)
Fehlerkorrekturen
- Vergleich mit vorherigem Basisprofil hinzugefügt (I824c8, b/269484510)
- DSL zum Deaktivieren von Warnungen hinzugefügt (Ic4deb, b/331237001)
- Ausnahme für das Infofenster wurde geändert, wenn Benchmark-Varianten deaktiviert sind (I8a517, b/332772491).
- Vereinfachen Sie die Erfassung von Methoden-Traces für eine MacroBenchmark, die auf die Dauer der tatsächlichen
measureBlock()
beschränkt ist. Bisher wurde es beim Start des Zielprozesses gestartet und nur Kaltstarts unterstützt (Iee85a, b/300651094). - Abstürze vermeiden, wenn Perfetto Trace-Prozessor langsam startet (I98841, b/329145808)
Version 1.3.0-alpha03
17. April 2024
androidx.benchmark:benchmark-*:1.3.0-alpha03
wurde veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.
Neue Funktionen
- Fügt öffentliche API
PerfettoTraceProcessor.Session.queryMetrics
APIs mit JSON-, textproto- und proto-binären (nicht decodierten) Varianten hinzu. Damit können Sie in TraceProcessor integrierte Messwerte (I54d7f, b/304038382) abfragen. profilerOutput
wurde der JSON-Ausgabe hinzugefügt, um die Tools zur Profilerstellung zu vereinfachen (z.B. Perfetto, Methoden-Traces). (I05ddd, b/332604449)- Leistungs-Tag wurde der Perfetto-Konfiguration für Benchmarks hinzugefügt. Damit werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
- Das inst-Argument
androidx.benchmark.profiling.skipWhenDurationRisksAnr
wurde hinzugefügt. Es kann auf „false“ gesetzt werden, um das Überspringen von Methoden-Traces zu vermeiden, wenn die erwartete Dauer zu einem ANR-Fehler führen kann. Dies sollte bei CI-Ausführungen dringend empfohlen werden. - Das experimentelle Argument
androidx.benchmark.profiling.perfCompare.enable
wurde hinzugefügt. Setzen Sie es auf "true", um einen Vergleich zwischen der Mess- und der Profilerstellungsphase auszuführen. Nützlich bei der Bewertung des Aufwands bei der Methodenverfolgung. (I61fb4, b/329146942)
API-Änderungen
TraceSectionMetric.Mode
wurde in eine „siegelte Klasse“ geändert, um eine zukünftige Erweiterung zu ermöglichen, ohne dass bei Anweisungen alle Informationen erschöpft sind (I71f7b)- Es wurden
TraceSectionMetric.Mode.Average
und.Count
hinzugefügt und Argumente neu angeordnet, sodass das häufigere Argument (Modus) weiter oben in der Argumentliste stand, wodurch die Notwendigkeit der Angabe von Parameternamen reduziert wurde. (Ibf0b0, b/315830077, b/322167531) Metric.getResult
wurde ingetMeasurements
umbenannt, um dem Rückgabetyp zu entsprechen (I42595)
Fehlerkorrekturen
- Beheben Sie das Problem, damit für Benchmarks generierte Referenzprofile verwendet werden, wenn „
automaticGenerationDuringBuild
“ deaktiviert ist (Ic144f, b/333024280). - Beheben Sie die Überschreibungen der
BaselineProfile
-Gradle-Plug-in-Eigenschaften, um das Generieren von Referenzprofilen und Benchmarking zu aktivieren, wenn Sie einennonMinified
- oder Benchmark-Build-Typ anpassen. (Ib8f05, b/324837887) - Methoden-Traces wurden in der Makro-Benchmark korrigiert, sodass Methoden-Traces auch auf langsameren Geräten vollständig erfasst und gültig sind. (I6349a, b/329904950)
- Aktivieren Sie die Blockierung des Starts für den Perfetto-Trace-Eintrag, um das Risiko fehlender Daten zu Beginn 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 dadurch Ausgabe-JSON-Dateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
- Erzwingen Sie Tausendertrennzeichen "," (Komma) aus Gründen der Konsistenz in der Studio-Ausgabe, 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)- Alle Fehler bei der Starterkennung wurden mit log.w / Exception-Labels versehen. Dies ändert das aktuelle Verhalten nicht, sodass einige Fehler ausgegeben werden und andere den Start unbemerkt nicht erkennen. Sie sind lediglich verständlicher. Im Allgemeinen sind Ereignisse, bei denen Nicht-Frame-Ereignisse fehlen,
Log.w()
und keine Startmesswerte melden. Ausnahmen werden ausgelöst, wenn ein Start erkannt wird, mit Ausnahme von Frame-Timing-Informationen (aus UI-/RT-Slices). (Id240f, b/329145809) - Brechen Sie Dexopt-Jobs im Hintergrund ab, bevor Sie eine MacroBenchmark ausführen, um Störungen zu reduzieren. (I989ed)
frameCount
wurde zuFrameTimingMetric
hinzugefügt, um bei der Erkennung von Szenarien zu helfen, in denen sich Messungen ändern, weil sich die Anzahl der erzeugten Frames geändert hat (neue Animationen hinzugefügt, Probleme mit der Entwertung behoben). (I1e5aa)- Es wurde klargestellt, dass
frameOverrunMs
der bevorzugte Messwert für das Tracking ist, wenn er in Dokumenten verfügbar ist, und die Gründe dafür. (I18749, b/329478323)
Version 1.3.0-alpha02
20. März 2024
androidx.benchmark:benchmark-*:1.3.0-alpha02
wurde veröffentlicht. 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 zur Reduzierung von Bibliotheksmodultests. Mit dem folgenden Befehl können Sie die R8-Komprimierung/-Optimierung im
build.gradle
Ihres Benchmark-Moduls aktivieren. Dies sollte je nach Arbeitslast zu einer deutlichen Leistungssteigerung führen. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
Fehlerkorrekturen
- Es wurde behoben, dass die Warnung für Methoden-Tracing in einer anderen Zeile von der Microbench-Ausgabe angezeigt wird. (I0455c, b/328308833)
Version 1.3.0-alpha01
21. Februar 2024
androidx.benchmark:benchmark-*:1.3.0-alpha01
wurde veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.
API-Änderungen
- Boolesche Parameter von
MicrobenchmarkConfig
wurden umbenannt, um unnötiges Wort „sollte“ zu vermeiden (Ia8f00, b/303387299) BenchmarkRule.measureRepeatedOnMainThread
wurde hinzugefügt, damit Hauptthread-Benchmarks (z.B. solche, die auf die UI für Ansichten oder das Schreiben tippen) verhindern, dass ANR-Fehler ausgelöst werden, insbesondere bei großen Suiten in CI. (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 hinzu, ein ART-Profil während einzelner
warmUp
-Iterationen zu erstellen. (I17923) - An der
TraceSectionMetric
API wurden mehrere Änderungen vorgenommen:Mode.Min
undMode.Max
hinzufügen- Labelargument hinzufügen, um den Abschnittsnamen als Messwertlabel zu überschreiben
- Modusname für die Ausgabe hinzugefügt, um die Bedeutung der Messwerte zu verdeutlichen
- Änderung des Standardwerts in Summe, da dieser Messwert größtenteils für wiederkehrende Ereignisse genutzt wird. Beachten Sie diese Änderungen bei der CI-Nutzung, da dies zu Unterbrechungen oder Störungen beim Parsen führen kann. (Ic1e82, b/301892382, b/301955938)
Fehlerkorrekturen
- Verbesserte Fehlermeldung im Gradle-Plug-in für Basisprofil, wenn das angegebene verwaltete Gerät nicht vorhanden ist (Idea2b, b/313803289)
- Fehlerkorrektur für das Einbeziehen von Referenzprofilen der Bibliothek in AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- Die Ausgabe-URL für die Referenz und das Startprofil 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 für das Überschreiben des Shader-Drop-Verhaltens hinzu, um Abstürze beim Benchmarking von Apps ohne
ProfileInstaller
1.3 zu umgehen:androidx.benchmark.dropShaders.enable=true/false
: kann verwendet werden, um alle Shader Drops zu überspringen (einschließlich der inStartupMode.Cold
-Einführungen durchgeführten Drops), 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 Apps ohne Profiler 1.3 (I4f573).
- Die Methodenverfolgung im UI-Thread wird übersprungen, wenn sie voraussichtlich länger als ein paar Sekunden dauert, und Methodentraces beim Auslösen bereinigt. (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 paarweise kombiniert wurden, was fälschlicherweise als einzelner extrem langer Frame gemeldet wurde. (I39353, b/322232828)
- Verwenden Sie
--skip verification
ab API 30 und höher, wenn Sie ein Paket auf API 30-33 neu installieren, um ART-Profile von Nutzer-Builds zu löschen. So lassen sich Play Protect-Warnungen umgehen, die bei einigen Geräten zu Fehlern führen. (Ic9e36) - Mit
am force-stop
kannst du Apps beenden, wenn es sich nicht um System-Apps wie die System-UI oder den Launcher handelt. (I5e028) - MacroBenchmark wartet jetzt 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 Nachverfolgen aus, wenn das Parsen von Messwerten fehlschlägt, um die Problemdiagnose zu erleichtern. (I956b9) - Absturz behoben, bei dem
FrameTimingMetric
die Frame-ID nicht parsen konnte, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276) - Die strengen Prüfungen in
FrameMetrics
wurden gelockert und es wurden weitere Details zu Fehlermeldungen hinzugefügt. (Iade)
Version 1.2
Version 1.2.4
17. April 2024
androidx.benchmark:benchmark-*:1.2.4
wurde veröffentlicht. Version 1.2.4 enthält diese Commits.
Fehlerkorrekturen
- Es wurde behoben, dass das Referenzprofil „srcset“ nicht in Benchmark-Varianten eingerichtet wurde. Behebt außerdem
automaticGenerationDuringBuild
in Bibliotheken, die eine zirkuläre Abhängigkeit verursachen. (I28ab7, b/333024280) - Mit
am force-stop
kannst du Apps beenden, wenn es sich nicht um System-Apps wie die System-UI oder den Launcher handelt. Dadurch werdenStartupMode.COLD
-Benchmarks behoben, die von „Das Paket $package darf nicht vor dem Kaltstart ausgeführt werden!“ abstürzen, da der Prozess nicht vollständig beendet wurde. (I5e028)
Version 1.2.3
24. Januar 2024
androidx.benchmark:benchmark-*:1.2.3
wurde veröffentlicht. Version 1.2.3 enthält diese Commits.
Fehlerkorrekturen
- Die Ausnahme wurde aus dem Gradle-Plug-in für das Baseline-Profil entfernt, wenn die AGP-Version 8.3.0 oder höher ist.
- Fehlerkorrektur für das Einbeziehen von Referenzprofilen der Bibliothek in AAR vor AGP 8.3.0-alpha15.
Version 1.2.2
1. Dezember 2023
androidx.benchmark:benchmark-*:1.2.2
wurde veröffentlicht. Version 1.2.2 enthält diese Commits.
Baseline-Profile
- In Ausführungsprotokollen wird der Ausgabedateipfad des Basisprofils als lokaler Datei-URI angezeigt (aosp/2843918, aosp/2853665, b/313976958).
Version 1.2.1
15. November 2023
androidx.benchmark:benchmark-*:1.2.1
wurde veröffentlicht. Version 1.2.1 enthält diese Commits.
Neue Funktionen
- Verbesserte Fehlermeldung, wenn der Nutzer Testvarianten deaktiviert (b/307478189)
- Es wurden 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
wurde veröffentlicht. Version 1.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.1.0
Baseline-Profile
- Das neue Gradle-Plug-in für Baseline Profile automatisiert die Erfassung und Einbeziehung 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 und starten Sie Ihre App.
- Geben Sie einfach
- Für Bibliotheken, die Referenzprofile generieren, können Sie jetzt die generierten Regeln entweder im Code (Argument
BaselineProfileRule.collect
) oder sogar noch einfacher im Gradle-Plug-in filtern. - Korrekturen
- Feste Basisprofilerfassung unter Android U+ (Id1392, b/277645214)
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 das Benchmarking für Android 14 und höher dringend empfohlen, wenn Sie den Status (z. B. Nutzeranmeldung) in dem gemessenen Wert beibehalten möchten (z. B. Nutzeranmeldung).
- Sie können dies auch umgehen, indem Sie die App-Kompilierung separat steuern und sie mit
CompilationMode.Ignore()
oder einem Instrumentierungsargument überspringen.
Instrumentierungsargumente
- Unterstützung für das
androidx.benchmark.dryRunMode.enable
-Instrumentierungsargument (bereits in MicroBenchmark verfügbar) für schnellere Validierungsausführungen (z.B. beim Erstellen der Benchmark oder beim Vorabsenden) - Unterstützung für
androidx.benchmark.profiling.mode=StackSampling
undMethodTracing
. androidx.benchmark.enabledRules
wurde hinzugefügt, um Tests von Basisprofilen im Vergleich zu MakroBenchmark-Regeln bei der Laufzeitfilterung zu ermöglichen- Das Argument
androidx.benchmark.perfettoSdkTracing.enable
wurde hinzugefügt, um das Tracing mit Tracing-Perfetto zu aktivieren, z.B. Tracing zur Neuzusammensetzung. Bei Verwendung mitStartupMode.COLD
wirkt sich das Timing erheblich aus, da die Tracing-Bibliothek beim Start der App geladen und aktiviert wird.
- Unterstützung für das
Voraussetzungen
- MacroBenchmark erfordert jetzt
ProfileInstaller
1.3.0 oder höher in der Ziel-App, um das Erfassen / Zurücksetzen des Profils und das Leeren des Shader-Cache zu ermöglichen.
- MacroBenchmark erfordert jetzt
Neue experimentelle Messwert-APIs
- Es wurde eine experimentelle Funktion
TraceSectionMetric
hinzugefügt, mit der ein einfaches Timing austrace("") {}
-Blöcken in Ihrer App extrahiert werden kann. Mit TraceMetric können Sie die volle Abfragefunktion von PerfettoTraceProcessor
nutzen. - Es wurde eine experimentelle Funktion
PowerMetric
hinzugefügt, um Informationen zum Stromverbrauch zu erfassen - Experimentelle Funktion
MemoryCountersMetric
zum Zählen von Seitenfehlern hinzugefügt - Die experimentelle
PerfettoTraceProcessor
API wurde hinzugefügt, die intern zum Extrahieren von Messwerten aus System-Traces (auch als Perfetto-Traces bezeichnet) verwendet wird.
- Es wurde eine experimentelle Funktion
Fehlerkorrekturen
- Abstürze beim Installieren oder Extrahieren von Profilen aus einer App, die aus mehreren APKs installiert wurde (z.B. aus einem App Bundle), behoben wurden.
- Fehler bei
FrameTimingMetric
behoben, bei dem Frames mit inkonsistenten Frame-IDs ignoriert wurden (im Allgemeinen Frames während der Ripples ab API 31) (I747d2, b/279088460) - Parsing-Fehler bei Traces > 64 MB behoben (Ief831, b/269949822)
- Die Fehler, die angezeigt wurden, wenn das Betriebssystem-Image des Geräts (insbesondere Emulator) für das Tracing oder Kompilierung nicht richtig konfiguriert wurde, wurde behoben.
- Akkuladestandsprüfung bei Geräten ohne Akku überspringen (Mikro und Makro)
- Verbesserte Dateiausgabe mit deutlicheren Fehlern für ungültige Ausgabeverzeichnisse und sichereren Standardeinstellungen
- Die Stabilität von
StartupMode.COLD
wurde verbessert, indem der Shader-Cache regelmäßig gelöscht wird (auch überMacrobenchmarkScope.dropShaderCache
verfügbar). - Leanback-Fallback für
startActivityAndWait
wurde korrigiert.
Mikro-Benchmark
- Features
- Die Profilerstellung wurde nach anderen Messwerten in eine separate Phase verschoben, sodass in einem Testlauf sowohl das genaue Timing als auch die Profilerstellungsergebnisse angezeigt werden können.
- Experimentelle APIs
- Es wurde die experimentelle
MicrobenchmarkConfig
API zum Definieren benutzerdefinierter Messwerte und zum Konfigurieren von Tracing und Profilerstellung hinzugefügt. Kann verwendet werden, um Methoden-Traces oder Tracepunkte zu erfassen (berücksichtigen Sie jedoch den Tracing-Overhead). - Es wurden experimentelle APIs hinzugefügt, um
BenchmarkState
unabhängig vonBenchmarkRule
(ohne JUnit) zu steuern. - Ein experimenteller
PerfettoTrace
-Eintrag wurde hinzugefügt, um die Erfassung von Perfetto-Traces mit benutzerdefinierter Konfiguration zu ermöglichen, die von Benchmark-APIs getrennt sind.
- Es wurde die experimentelle
- Korrekturen
- Problemumgehung ohne führende Leerzeichen in der Android Studio-Benchmark-Ausgabe.
- Ein Problem wurde behoben, bei dem Warnungen in der Android Studio-Benchmark-Ausgabe möglicherweise nicht ausgegeben wurden.
- Der Absturz von
SampledProfiling
unter Android 13 (API 33) und höher wurde behoben. - Deutlich verbesserte Leistung von
dryRunMode
durch Überspringen vonIsolationActivity
und Perfetto-Tracing (bis zu 10-mal schnellerer Probelaufmodus bei älteren Betriebssystemversionen).
Version 1.2.0-rc02
6. Oktober 2023
androidx.benchmark:benchmark-*:1.2.0-rc02
wurde veröffentlicht. Version 1.2.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Korrigieren Sie die Benchmark-Dateiausgabe so, dass das Kopieren von
BaselineProfile
-Plug-in-Dateien nicht mehr unterbrochen wird. Die Dateien wurden zwar generiert und vom Gerät kopiert, aber so umbenannt, dass sie vom Gradle-Plug-in nicht erkannt wurden. (I8dbcc, b/303034735, b/296453339) tracing-perfetto
Fehler beim Laden von Fehlermeldungen bei der Injektion aus dem Makro-Benchmark-Modul in die Zielanwendung wurde klarer formuliert.
Version 1.2.0-rc01
20. September 2023
androidx.benchmark:benchmark-*:1.2.0-rc01
wurde veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Eine Ausnahme (mit Anweisungen zur Fehlerbehebung) wird jetzt ausgelöst, wenn das Perfetto SDK-Tracing in einer Benchmark nicht initialisiert werden kann. (I6c878, b/286228781)
- OOM-Absturz beim Konvertieren von ART-Methoden-Trace -> Perfetto-Format wurde behoben. (I106bd, b/296905344)
- (MacroBenchmark) Das Label für das Methoden-Tracing in der Studio-Testausgabe wurde klarer formuliert. Außerdem wurde das Problem, dass Dateinamen für das Methoden-Tracing auf dem Gerät/Host eindeutig sein müssen, sodass sie nicht überschrieben werden, wenn mehrere Benchmarks ausgeführt werden. (I08e65, b/285912360)
- Das Gerät muss aktiv sein, wenn ein Basisprofil erfasst wird. (I503fc)
Version 1.2.0-beta05
30. August 2023
androidx.benchmark:benchmark-*:1.2.0-beta05
wurde veröffentlicht. Version 1.2.0-beta05 enthält diese Commits.
Neue Funktionen
- Das Gradle-Plug-in für das Baseline-Profil 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
wurde veröffentlicht. Version 1.2.0-beta04 enthält diese Commits.
Neue Funktionen
- Das Gradle-Plug-in für Baseline-Profile unterstützt jetzt das Android-Gradle-Plug-in 8.3. (aosp/2715214)
Fehlerkorrekturen
- Beheben Sie Fehler beim Schreiben, Verschieben und Abrufen von Dateien (insbesondere bei parametrisierten Tests), indem Sie Ausgabedateinamen weiter bereinigen und „=“ und „:“ in den Namen von Ausgabedateien vermeiden. (I759d8)
Version 1.2.0-beta03
9. August 2023
androidx.benchmark:benchmark-*:1.2.0-beta03
wurde veröffentlicht. Version 1.2.0-beta03 enthält diese Commits.
API-Änderungen
- Argument zum Filtern von
TraceSectionMetric
wurde nur dem Zielpaket hinzugefügt, standardmäßig aktiviert (Ia219b, b/292208786).
Fehlerkorrekturen
- Das Instrumentierungsargument
fullTracing.enable
wurde zur Konsistenz mit dem Artefaktnamen und anderen Referenzen inperfettoSdkTracing.enable
umbenannt.fullTracing.enable
funktioniert weiterhin als Fallback. (I7cc00) - Interne Tracepoints der Benchmark-Bibliothek (einschließlich MicroBenchmark-Schleifen-/Phasen-Tracing) werden jetzt im System-Trace-Viewer von Studio angezeigt und unter dem richtigen Prozess in Perfetto verschachtelt. (I6b2e7, b/293510459)
- Der MakroBenchmark-Fehler NOT-PROFILEABLE für API 31 und höher wurde entfernt und die profilierbare Prüfung auf gerooteten Root-Geräten (eng/userdebug) wird übersprungen. (I2abac, b/291722507)
- Bei Verwendung von Dex Layout-Optimierungen werden Regeln für Startprofile jetzt auch als Basisprofilregeln betrachtet. (aosp/2684246, b/293889189)
Version 1.2.0-beta02
26. Juli 2023
androidx.benchmark:benchmark-*:1.2.0-beta02
wurde veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.
API-Änderungen
- Es wurden experimentelle APIs für benutzerdefinierte Microbench-Messwerte und -Konfigurationen hinzugefügt (z.B. Profiler und Tracing). (I86101, b/291820856)
Fehlerkorrekturen
- Fehler in Makrobench melden, wenn das Betriebssystem für das Tracing falsch konfiguriert ist. Dies wurde kürzlich in den ARM64-Emulatoren der API 26/28 behoben. (I0a328, b/282191686)
- Der Fehler beim Zurücksetzen der Kompilierung wurde mit weiteren Details ergänzt, die eine Aktualisierung des Emulators vorschlagen, da dieses Problem von einigen Emulatoren kürzlich behoben wurde. (I8c815, b/282191686)
- Machen Sie
androidx.test.uiautomator:uiautomator:2.2.0
alsapi
-Abhängigkeit anstelle einerimplementation
-Abhängigkeit. (I1981e)
Version 1.2.0-beta01
18. Juli 2023
androidx.benchmark:benchmark-*:1.2.0-beta01
wurde veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Probleme wurden behoben, die in der Benchmarkausgabe in Studio manchmal unterdrückt wurden und dass führende Leerzeichen in der Benchmarkausgabe nicht in Studio angezeigt wurden (Ia61d0, b/227205461, b/286306579, b/285912360).
- Der Kommentar für
FrameTimingMetric
wurde korrigiert. Der untergeordnete Messwert heißtframeDurationCpuMs
. (Ib097f, b/288830934).
Version 1.2.0-alpha16
21. Juni 2023
androidx.benchmark:benchmark-*:1.2.0-alpha16
wurde veröffentlicht. Version 1.2.0-alpha16 enthält diese Commits.
API-Änderungen
- Die
BaselineProfileRule.collectBaselineProfile()
API wurde inBaselineProfileRule.collect()
umbenannt. (I4b665)
Fehlerkorrekturen
- MacroBenchmark-Unterstützung für
androidx.benchmark.profiling.mode = MethodTracing
. (I7ad37, b/285912360) - Die Erstellung von MicroBenchmark-Profilen wurde in eine separate Phase verschoben. Sie wird also nach der Messung nacheinander statt als Ersatz durchgeführt. Falls vorhanden, sind jetzt auch
MethodTracing
-Trace-Abschnitte im erfassten Perfetto-Trace enthalten. (I9f657, b/285014599) - Fügen Sie die Messung der Anzahl mit
Mode.Sum
zuTraceSectionMetric
hinzu. (IC121a, b/264398606)
Version 1.2.0-alpha15
7. Juni 2023
androidx.benchmark:benchmark-*:1.2.0-alpha15
wurde veröffentlicht. Version 1.2.0-alpha15 enthält diese Commits.
Neue Funktionen
- Experimentelle
MemoryUsageMetric
zum Verfolgen 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) - Es wurde eine Property hinzugefügt, mit der die Erstellung des Basisprofils übersprungen werden kann. Nutzung:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
API-Änderungen
- Die
collectBaselineProfile
API generiert immer stabile Basisprofile. DiecollectStableBaselineProfile
API wurde entfernt. Verwenden Sie stattdessencollectBaselineProfile
. (I17262, b/281078707) - Das Argument
filterPredicate
vonBaselineProfileRule
wurde in einen Nicht-Null-Wert mit einem entsprechenden Standardwert geändert, damit das Standardfilterverhalten in Dokumenten klarer erkennbar ist. (I3816e)
Fehlerkorrekturen
- Deaktivieren Sie
IsolationActivity
und Perfetto-Tracing indryRunMode
, um die Leistung erheblich zu verbessern, da diese den Großteil der Laufzeit ausmachen. (Ie4f7d) - Unterstützung für das Sampling von Aufrufstacks in Makro-Benchmarks mit den Instrumentierungstestargumenten
androidx.benchmark.profiling.mode=StackSampling
undandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Absturzfehler beim Verwerfen von Shadern unter Android U (API 34) sowie in Emulatoren wurden behoben. (I031ca, b/274314544)
Version 1.2.0-alpha14
3. Mai 2023
androidx.benchmark:benchmark-*:1.2.0-alpha14
wurde veröffentlicht. Version 1.2.0-alpha14 enthält diese Commits.
Fehlerkorrekturen
- Fehler bei
FrameTimingMetric
beheben, ohne Frames mit inkonsistenten Frame-IDs zu ignorieren. Dies würde dazu führen, dass einige Animationen in neueren Plattformversionen (API 31 und höher) viele Frames ignorieren, währendRenderThread
animiert wurde (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)
- Das Erstellen des Basisprofils unter Android U schlug aufgrund der unterschiedlichen Ausgabe des Befehls
pm dump-profiles
fehl. (Id1392, b/277645214) - Fehler im GPU-Sperrskript für die Uhr zum korrekten Vergleich von Strings (I53e54, b/213935715)
Version 1.2.0-alpha13
5. April 2023
androidx.benchmark:benchmark-*:1.2.0-alpha13
wurde veröffentlicht. Version 1.2.0-alpha13 enthält diese Commits.
API-Änderungen
- Beim Generieren von Referenzprofilen 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 zum Definieren von vollständig benutzerdefinierten Messwerten basierend auf dem Inhalt eines Perfetto-Trace hinzugefügt. (I4ce31, b/219851406) - Fügen Sie einen experimentellen Messwert hinzu, um die Anzahl der Seitenfehler während einer Benchmark zu ermitteln. (I48db0)
Version 1.2.0-alpha12
22. März 2023
androidx.benchmark:benchmark-*:1.2.0-alpha12
wurde veröffentlicht. Version 1.2.0-alpha12 enthält diese Commits.
Neue Funktionen
- Das neue Gradle-Plug-in für das Basisprofil wird in der Alphaversion veröffentlicht, sodass es einfacher ist, ein Basisprofil zu generieren, und der Entwickler-Workflow wird dadurch vereinfacht.
API-Änderungen
- Die Unterstützung für Perfetto-Tracing in API 21 und 22, die sowohl MicroBenchmarks als auch die experimentellen
PerfettoTrace
APIs umfasst, wurde entfernt. Vor dieser Version warenUiAutomation
-Verbindungen auf einigen Geräten unzuverlässig. (I78e8c) - Öffentliche experimentelle API für
PerfettoTraceProcessor
hinzugefügt, um das Parsen von Trace-Inhalten zu ermöglichen. Dies ist ein Schritt hin zu vollständig benutzerdefinierten Messwerten, die auf Perfetto-Trace-Daten basieren. (I2659e, b/219851406)
Version 1.2.0-alpha11
8. März 2023
androidx.benchmark:benchmark-*:1.2.0-alpha11
wurde veröffentlicht. Version 1.2.0-alpha11 enthält diese Commits.
Fehlerkorrekturen
- Die Abstürze in
MacrobenchmarkRule
undBaselineProfileRule
bei der Neuinstallation oder Extraktion von Profilen aus einem App Bundle mit mehreren APKs wurden behoben. (I0d8c8, b/270587281)
Version 1.2.0-alpha10
22. Februar 2023
androidx.benchmark:benchmark-*:1.2.0-alpha10
wurde veröffentlicht. Version 1.2.0-alpha10 enthält diese Commits.
Neue Funktionen
- Unter Android 14 und höher installiert MacroBenchmark dank einer neuen Plattformfunktion keine Zielanwendungen mehr neu, um den Kompilierungsstatus zurückzusetzen. Bisher war es notwendig, ein gerootetes Gerät zu haben oder den gesamten Anwendungsstatus (z.B. die Nutzeranmeldung) zu entfernen, bevor eine Benchmark ausgeführt werden konnte. (I9b08c, b/249143766)
Fehlerkorrekturen
DryRunMode
wurde so behoben, dass bei einem leeren Profil nicht mehr abstürzt, weil die Kompilierung übersprungen wird. Stattdessen wird eine einzelne Iteration ausgeführt und das Profil extrahiert, um sicherzustellen, dass etwas erfasst wird. (I2f05d, b/266403227)- Der
PowerMetric
-Absturz bei der Überprüfung auf das Vorhandensein von PowerStats auf alten API-Ebenen wurde behoben. (5faaf9, b/268253898)
Version 1.2.0-alpha09
11. Januar 2023
androidx.benchmark:benchmark-*:1.2.0-alpha09
wurde veröffentlicht. Version 1.2.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Die Übergabe von
None
an das Instrumentierungsargumentandroidx.benchmark.enabledRules
wurde aktiviert, um alle Benchmarks / das Generieren von Referenzprofilen zu deaktivieren. (I3d7fd, b/258671856) PerfettoTrace
-Aufnahme in App-Modulen (d.h. nicht selbst instrumentierenden Test-APKs) korrigieren (I12cfc)- Feste Reihenfolge der ADB-Pull-Argumente des Basisprofils in der Studio-Ausgabe (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)
- Überprüfung des Akkustands bei 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
wurde veröffentlicht. Version 1.2.0-alpha08 enthält diese Commits.
API-Änderungen
- Es wurden experimentelle neue APIs
PerfettoTrace.record {}
undPerfettoTraceRule
hinzugefügt, um Perfetto-Traces (auch als System-Traces bezeichnet) im Rahmen eines Tests zu erfassen und so das Testverhalten und die Leistung zu prüfen. (I3ba16) BaselineProfileRule
akzeptiert jetzt ein Filterprädikat anstelle einer Liste von Paketpräfixen. Dadurch erhält der Test die volle Kontrolle über die Filterung. (I93240)- Fügen Sie eine experimentelle API
BaselineProfileRule.collectStableBaselineProfile
hinzu, die wartet, bis ein Basisprofil für n Iterationen stabil ist. (I923f3) - Sie können jetzt ein Präfix für den Ausgabedateinamen angeben, wenn Sie Basisprofile mit
BaselineProfileRule
generieren. (I7b59f, b/260318655)
Fehlerkorrekturen
- Verbessern Sie die Sicherheit beim Schreiben von Dateiausgaben. Damit sollte verhindert werden, dass Ausgabedateien im Hintergrund nicht geschrieben / angehängt werden, insbesondere bei API 21/22. (If8c44, b/227510293)
- Korrigieren Sie die Trace-Ausgabe von
simpleperf
, damit die Datei korrekt erstellt und platziert werden kann. Dadurch sollten auch allgemein Probleme behoben werden, bei denen eine Datei erfolglos von Gradle abgerufen wurde. (I12a1c, b/259424099) - Fehlermeldung zum Verbessern der Profileinstaller-Fehlermeldung, die ausgegeben wird, wenn profileinstaller zu alt ist. Damit werden Sie jetzt angewiesen, die Profileinstaller-Version (1.2.1) zum Messen von Basisprofilen unter API 31 bis 33 zu aktualisieren, anstatt anzugeben, dass sie nicht unterstützt wird. (Ia517f, b/253519888)
- Mehrere Fehler bei Shell-Befehlsfehlern bei Fehlermeldung Erforderliche API <=23 drucken, u. a. fehlgeschlagene Binäreinrichtung der Perfetto-Erfassung und Fehler bei der Trace-Erfassung (Ib6b87, b/258863685)
- Erstellte Profilregeln automatisch sortieren, um die Anzahl der Änderungen zu minimieren, die sich im Laufe der Zeit ändern (beim Einchecken von Profilregeln in die Versionsverwaltung). (IE2509)
- Der 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 noch nicht veröffentlichten Broadcast-Registry im profileinstaller-Manifest abstürzen. (I5c728, b/258619948) Um das Problem in profileinstaller:1.3.0-alpha02
zu umgehen, fügen Sie der Datei „AndroidManifest.xml“ Ihrer App (nicht der Ihrer Benchmark) Folgendes hinzu:
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Version 1.2.0-alpha07
9. November 2022
androidx.benchmark:benchmark-*:1.2.0-alpha07
wurde veröffentlicht. Version 1.2.0-alpha07 enthält diese Commits.
API-Änderungen
- Fügt die
PowerMetric
API für die Messung von Energie und Leistung in Makro-Benchmarks hinzu. (Ife601, b/220183779) - Fehler bei
MacrobenchmarkScope.dropShaderCache()
behoben, durch den der Shader-Cache tatsächlich gelöscht wird. Dadurch werden etwa 20 ms an Rauschen aus denStartupMode.COLD
-Benchmarks entfernt, da Shader jetzt konsistent bei jeder Iteration gelöscht werden. Bisher wurden bei derPartial
-Kompilierung mit Aufwärmiterationen falsch schnelle Zahlen gemeldet, da Shader-Caching während des Aufwärmvorgangs wahrscheinlicher war. Für diese Korrektur ist entweder ein gerootetes Gerät oder die Verwendung vonprofileinstaller:1.3.0-alpha02
in der Ziel-App erforderlich. Informationen zu API-Änderungen derProfileInstaller
-Bibliothek findest du auf der Seite ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) TraceSectionMode("label", Mode.Sum)
wurde hinzugefügt, mit dem die Gesamtzeit gemessen werden kann, die für mehrere Trace-Abschnitte mit demselben Label aufgewendet wurde. Beispielsweise gibt „TraceSectionMetric("inflate", Mode.Sum)
“ den Messwert „inflateMs
“ für die Gesamtzeit in einer Makro-Benchmark aus, die für die Inflation aufgewendet wurde. Die Anforderung für API 29 wurde ebenfalls entfernt, daTraceSectionMetric
mitandroidx.tracing.Trace
zusammenarbeitet, um zu niedrigeren API-Levels bei Verwendung vonforceEnableAppTracing
in der Ziel-App zu gelangen. (Id7b68, b/231455742)
Fehlerkorrekturen
- Verbesserte Sicherheit aller internen Shell-Befehle durch Überprüfung aller Ausgaben/Fehler. (I5984d, b/255402908, b/253094958)
- Geben Sie das Gerät im Befehl
adb pull
für das Basisprofil 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 die Makro-Benchmark-Test-APK nicht zur Selbstinstrumentierung eingerichtet ist. Dieser Fehler verhindert Makro-Benchmarking innerhalb des Prozesses der Ziel-App. In diesem Fall wäre es nicht in der Lage, die App zu kompilieren, zu beenden oder einen Kaltstart zu starten. Außerdem wäre es nicht in der Lage, die eigenen Berechtigungen zu steuern (I4279b).
- Es wurde ein Problem in
measureRepeated()
behoben, bei demStartupMode.COLD
den Zielprozess nachsetupBlock
nicht beendet hat. WennsetupBlock
jetzt mit der App interagiert, wird der App-Prozess weiter ausgeführt und eine Kaltstartmessung ist ungültig. (I8ebb7)
Version 1.2.0-alpha06
24. Oktober 2022
androidx.benchmark:benchmark-*:1.2.0-alpha06
wurde veröffentlicht. Version 1.2.0-alpha06 enthält diese Commits.
API-Änderungen
BaselineProfileRule
erfordert unter Android 13 (API 33) kein Root mehr und ist nicht mehr experimentell. (Ie0a7d, b/250083467, b/253094958)- Mit dieser Änderung wird auch behoben, wie Profile einer App auf nicht gerooteten Geräten auf das Laufwerk geleert werden. Es muss jedoch die „profileinstaller“-Abhängigkeit der Ziel-App aktualisiert werden.
- Wenn Sie
BaselineProfileRule
oderCompilationMode.Partial(warmupIterations)
auf einem nicht gerooteten Gerät verwenden möchten, müssen Sie auch Ihre Ziel-App aktualisieren, umandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
zu verwenden. Dadurch wird das Profil korrekt auf das Laufwerk geleert, sodass es kompiliert/extrahiert werden kann.
Fehlerkorrekturen
- Der
SampledProfiling
-Absturz bei API 33 und höher wurde behoben. (I40743, b/236109374)
Version 1.2.0-alpha05
5. Oktober 2022
androidx.benchmark:benchmark-*:1.2.0-alpha05
wurde veröffentlicht. Version 1.2.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Frame-Aufschlüsselung im System Trace Viewer in Studio für vom Benchmark erfasste Traces korrigieren (I3f3ae, b/239677443)
- Korrigieren Sie
FrameTimingMetric
, damit fürFrameOverrun
API 31 statt 29 erforderlich ist (I716dd, b/220702554). - Legen Sie die Iteration in
BaselineProfileRule
fest und geben Sie klar aus, wenn das Zielpaket nicht installiert ist (wurde bereits für MacroBenchmarkRule durchgeführt). (Ic09a3, b/227991471)
Version 1.2.0-alpha04
21. September 2022
androidx.benchmark:benchmark-*:1.2.0-alpha04
wurde veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.
Neue Funktionen
Zusätzliche Unterstützung für das
dryRunMode.enable
-Instrumentierungsargument zur MakroBenchmark (bereits in Mikro verfügbar), um die lokale Entwicklung zu beschleunigen und die App-Automatisierung zu validieren (z.B. in „Vorabsenden“). Dadurch werden die Iterationen 1 überschrieben, die Kompilierung übersprungen, alle Konfigurationsfehler werden unterdrückt und die Ausgabe der .json-Datei für Messungen deaktiviert. (Ib51b4, b/175149857)In der Gradle-Befehlszeile:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
In build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Fehlerkorrekturen
- Der Fehler „
StartupTimingMetric
“ wurde so behoben, dass gemessene Aktivitäten nicht mehr überMacrobenchmarkScope.startActivityAndWait()
gestartet werden müssen. Das bedeutet, dass der Messwert Startvorgänge von z.B. Benachrichtigungen,Context.startActivity()
, aktivitätsbasierte Navigation in der App oder Shell-Befehlen erfassen kann. (Ia2de6, b/245414235) - Es wurde ein Fehler behoben, bei dem
startActivityAndWait
durch eine Reduzierung der strengen Frame-Erkennung eine Zeitüberschreitung beim Warten auf den Abschluss des Starts für Emulatoren verursachte. (Ibe2c6, b/244594339, b/228946895)
Version 1.2.0-alpha03
7. September 2022
androidx.benchmark:benchmark-*:1.2.0-alpha03
wurde veröffentlicht. Version 1.2.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es wurden experimentelle APIs für die unabhängige Verwendung von
BenchmarkState
, getrennt vonBenchmarkRule
/JUnit4
, hinzugefügt. (Id478f, b/228489614)
Fehlerkorrekturen
- Leanback-Fallback für
startActivityAndWait
wurde hinzugefügt. (01ed77, b/242899915)
Version 1.2.0-alpha02
24. August 2022
androidx.benchmark:benchmark-*:1.2.0-alpha02
wurde veröffentlicht. Version 1.2.0-alpha02 enthält diese Commits.
API-Änderungen
- Die Standardeinstellung ist
am force stop
fürMacrobenchmarkScope.killProcess()
, auch wenn das Gerät gerootet ist, 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 grundlegenden Profilerstellung für System-Apps. (I900b8, b/241214097)
- Die Prüfung auf ODPM-Power-Messwerte auf nicht gerooteten Geräten wird unterstützt. (a38c78, b/229623230)
Version 1.2.0-alpha01
27. Juli 2022
androidx.benchmark:benchmark-*:1.2.0-alpha01
wurde veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.
Neue Funktionen
- Neue Tracing-Perfetto-Komponente, die Tools zum Aktivieren von Tracing über das Perfetto SDK in einer App ermöglicht, in der die Tracing-Funktion sichtbar ist (I2cc7f)
Es wurde ein
androidx.benchmark.enabledRules
-Instrumentierungsargument hinzugefügt, um das Filtern von Makro-Benchmark-Ausführungen nur nach Benchmarks oder nur nach der Generierung von Referenzprofilen zu ermöglichen. Übergeben Sie "MacroBenchmark" oder "BaselineProfile", um nur eine Art von Test auszuführen, z.B. wenn nurBaselineProfiles
in einem Emulator generiert wird. Eine durch Kommas getrennte Liste wird ebenfalls unterstützt. (I756b7, b/230371561)Beispiel: in der build.gradle-Datei Ihrer MakroBenchmark:
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
für das Messen von Energie und Energie in Benchmarks hinzugefügt. (I9f39b, b/220183779) - Der neue 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 dem Entwickler, das Gerät zu entladen, um den Energieverbrauch zu messen. (I6a6cb)
- Die Funktion zum Leeren des Shader-Caches in
MacrobenchmarkScope
wurde hinzugefügt. (I32122) - Entwickler können die Anzeige des Messwerttyps konfigurieren und die gewünschten Subsystemkategorien angeben. (I810c9)
- Bisher wurde bei Ausführung auf einem nicht unterstützten Gerät ein
UnsupportedOperationException
in die Benchmark aufgenommen. Jetzt wird UOE nur angezeigt, wenn der Messwert auf dem nicht unterstützten Gerät verwendet wird (d. h.PowerMetric.configure
). (I5cf20, b/227229375) TotalPowerMetric
undTotalEnergyMetric
für die Messung von Gesamtleistung und -energie in jeder Systemkategorie in Makro-Benchmarks wurden hinzugefügt. (I3b26b, b/224557371)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem kompilierte Methoden zwischen den einzelnen Makro-Benchmarks in nicht gerooteten Builds nicht korrekt zurückgesetzt wurden. Dafür muss die APK-Datei leider bei jeder Iteration neu installiert werden, wodurch die Anwendungsdaten für jede Makro-Benchmark gelöscht werden. (I31c74, b/230665435)
- Absturz der Trace-Aufzeichnung in API 21/22 beheben (If7fd6, b/227509388, b/227510293, b/227512788)
- Die Erkennung des Abschlusses des Starts von Aktivitäten wurde überarbeitet, um die Ausnahme „Keine Messwerte können 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
wurde veröffentlicht. Version 1.1.1 enthält diese Commits.
Fehlerkorrekturen
- Das Problem
android.system.ErrnoException: open failed: EACCES
wurde auf einigen Geräten mit Android11 (API 30) oder höher behoben. Das hier ist eine Top-Empfehlung von1.2.0-alpha01
. (aosp/2072249)
Version 1.1.0
Version 1.1.0
15. Juni 2022
androidx.benchmark:benchmark-*:1.1.0
wurde veröffentlicht. 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
Die Unterstützung von Jetpack-Makro-Benchmarks, mit denen Sie Interaktionen innerhalb der gesamten App wie Starten und Scrollen messen können, bietet die Möglichkeit, Traces zu erfassen und Trace-Bereiche zu messen.
Unterstützung von Baseline-Profilen
CompilationMode.Partial
, um die Effektivität von Baseline-Profilen zu messen.@BaselineProfileRule
zum automatischen Generieren von Referenzprofilen für einen bestimmten kritischen Nutzerpfad.
Unterstützung für Zuordnungsmesswerte und Profilerstellung während MicroBenchmark-Ausführungen.
Version 1.1.0-rc03
1. Juni 2022
androidx.benchmark:benchmark-*:1.1.0-rc03
wurde veröffentlicht. 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)
Entferne die
300ms
-Verzögerung vonpressHome()
. (aosp/2086030, b/231322975)Verbessern Sie die Geschwindigkeit der MacroBenchmark-Iteration, indem Sie die im Hintergrund verwendeten Shell-Befehle optimieren. (aosp/2086023, b/231323582)
Unterstützung für verwaltete Gradle-Geräte beim Generieren von Baseline-Profilen mit MacroBenchmarks. (aosp/2062228, b/228926421)
Version 1.1.0-rc02
11. Mai 2022
androidx.benchmark:benchmark-*:1.1.0-rc02
wurde veröffentlicht. Version 1.1.0-rc02 enthält diese Commits.
- Hinweis: Diese Version enthält eine Verhaltensänderung, da Apps jetzt zwischen den einzelnen Benchmarks vollständig neu installiert werden, um genaue Messungen zu ermöglichen.
Fehlerkorrekturen/Verhaltensänderungen
Ein Problem wurde behoben, bei dem die App-Kompilierung zwischen Makro-Benchmarks und bei nicht gerooteten Builds nicht korrekt zurückgesetzt wurde. Dadurch wird häufig behoben, dass das Ausführen mehrerer Tests dazu führt, dass
CompilationMode
wenig oder gar keine Auswirkungen auf die Messungen hat. Um dieses Problem zu umgehen, wird nun jede Testmethode von der Ziel-App vollständig neu installiert. Dadurch werden die Anwendungsdaten zwischen den einzelnen Makro-Benchmarks gelöscht. (I31c74, b/230665435)Da dies verhindert, dass Apps den Status vor Tests einrichten, kann jetzt die Kompilierung / Neuinstallation übersprungen werden, um dieses Problem zu umgehen. Sie können das Ziel beispielsweise mit dem Shell-Befehl
cmd package compile -f -m speed <package>
vollständig kompilieren und dann den Kompilierungsschritt der Makro-Benchmark überspringen.Beispiel: in der build.gradle-Datei Ihrer MakroBenchmark:
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 eines
androidx.benchmark.enabledRules
-Instrumentierungsarguments ist es möglich, ein Modul zwischen Makro-Benchmarks und Tests zum Generieren von Referenzprofilen zu teilen. Ü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 MakroBenchmark:
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
wurde veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Links für die Ausgabe des Referenzprofils in Android Studio verwenden jetzt einen eindeutigen Dateinamen. So werden in der Ausgabe immer die neuesten Ergebnisse bei Verwendung eines
BaselineProfileRule
ausgegeben. ( aosp/2057008, b/228203086 )
Version 1.1.0-beta06
6. April 2022
androidx.benchmark:benchmark-*:1.1.0-beta06
wurde veröffentlicht. Version 1.1.0-beta06 enthält diese Commits.
Fehlerkorrekturen
- Absturz der Trace-Aufzeichnung in API 21/22 beheben (If7fd6, b/227509388)
- Die Erkennung des Abschlusses des Starts von Aktivitäten wurde überarbeitet, um die Ausnahme „Keine Messwerte können gelesen werden“ in Start-Makro-Benchmarks zu beheben. (Ia517c)
- Startmesswerte für Makro-Benchmarks bei Verwendung von
CompilationMode.None()
wurden korrigiert. Vor dieser Änderung schien „CompilationMode.Partial()
“ langsamer alsCompilation.None()
zu sein. (611ac9)
Version 1.1.0-beta05
23. März 2022
androidx.benchmark:benchmark-*:1.1.0-beta05
wurde veröffentlicht. 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). - Ein Problem wurde behoben, bei dem MacroBenchmarks 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
wurde veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.
Fehlerkorrekturen
Probleme mit fehlenden Messwerten in Android 10 und
NoSuchElementException
aufgrund nicht korrekter Erfassung von Prozessnamen in Traces wurden behoben. (Ib4c17, b/218668335)Verwenden Sie
PowerManager
für die Erkennung der thermischen Drosselung unter Q (API 29) und höher. Dadurch wird die Häufigkeit falsch-positiver Ergebnisse bei der Erkennung von thermischen Drosselung (Benchmark-Wiederholung nach einer Cool-down-Einstellung von 90 Sekunden) erheblich reduziert und die Benchmarks bei Nutzer-Builds erheblich beschleunigt. Außerdem bietet es eine Drosselungserkennung, auch wenn die Uhren gesperrt sind (wenn sie für die physische Umgebung des Geräts zu hoch sperrt). (I9c027, b/217497678, b/131755853)Filtern der simpleperf-Stichprobenprofilerstellung nur nach
measureRepeated
-Thread, um die Prüfung zu vereinfachen (Ic3e12, b/217501939)Unterstützung von Messwerten aus benannten UI-Unterprozessen in Multi-Prozess-Anwendungen (Ice6c0, b/215988434)
Regeln für das Baseline-Profil nach Android 9 (SDK 28) filtern. aosp/1980331 b/216508418
Überspringen Sie die Profilinstallation bei Verwendung von
Compilation.None()
. Außerdem kannst du Warnungen senden, wenn in der App eine ältere Version vonandroidx.profileinstaller
und das Android-Gradle-Plug-in verwendet wird. aosp/1977029
Version 1.1.0-beta03
9. Februar 2022
androidx.benchmark:benchmark-*:1.1.0-beta03
wurde veröffentlicht. Version 1.1.0-beta03 enthält diese Commits.
API-Änderungen
AudioUnderrunMetric
wurde der MakroBenchmark-Bibliothek unter dem Flag „experimental“ hinzugefügt, um die Erkennung von Audio-Unterläufen zu ermöglichen (Ib5972).BaselineProfileRule
akzeptiert keinensetup
-Block mehr, da dies genauso funktioniert wieprofileBlock
. (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 wurden (I5ae4d, b/214917025).
- Kompilierungs-Shell-Befehle auf API 23 (Ice380) verhindern
- Umbenennung von
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
, um klarzustellen, dass es sich um Dauer und 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
wurde veröffentlicht. Version 1.1.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Die Ergebnisse des MicroBenchmark-Stack-Stichproben-/Methoden-Tracing-Profils werden jetzt, ähnlich wie bei anderen Profilerstellungsausgaben, in der Studio-Ausgabe verknüpft. Der Zuordnungsmesswert wird nicht unterdrückt. (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
wurde veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde behoben, dass die Profiler-Argumentaktivierung ignoriert wird. (I37373, b/210619998)
- Veraltete
CompliationModes
(I98186, b/213467659) entfernt - Das Argument des Basisprofils von
CompilationMode.Partial
wurde zur besseren Übersichtlichkeit in Enum geändert. (Id67ea)
Version 1.1.0-alpha13
15. Dezember 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13
wurde veröffentlicht. Version 1.1.0-alpha13 enthält diese Commits.
API-Änderungen
- Fügen Sie der Microbench-Ausgabe unter Android Q (API 29 und höher) System Tracing mit geringem Aufwand hinzu. Beachten Sie, dass benutzerdefiniertes Tracing (über die
android.os.Trace
oderandroidx.tracing
Jetpack APIs) derzeit nicht erfasst wird, um Auswirkungen auf die Ergebnisse zu vermeiden. Dieses Tracing sollte bei der Diagnose von Instabilität hilfreich sein, insbesondere von Quellen außerhalb der Benchmark. (I298be, b/205636583, b/145598917) CompilationModes
wurde in drei Klassen eingeteilt: „Full“, „None“ und „Partial“. Früher wurden sie uneinheitlich nach Kompilierungsargumenten (die wir jetzt als Implementierungsdetails behandeln) und Funktionen benannt. Dadurch werden die Vor- und Nachteile sowie mögliche Kombinationen und das Verhalten der verschiedenen Plattformversionen deutlicher. (I3d7bf, b/207132597)- Einrichtung und Messung sind jetzt immer paarweise angeordnet. Sie können jetzt den Paketnamen und die Iteration abfragen. In bestimmten Aufwärmszenarien kann die Iteration
null
sein. (Id3b68, b/208357448, b/208369635)
Fehlerkorrekturen
- Fehler behoben, bei dem
CompilationMode.Speed
fälschlicherweise alsNone
behandelt wurde (I01137)
Version 1.1.0-alpha12
17. November 2021
androidx.benchmark:benchmark-*:1.1.0-alpha12
wurde veröffentlicht. Version 1.1.0-alpha12 enthält diese Commits.
Neue Funktionen
- Fügen Sie den experimentellen TraceSectionMetric-Typ für benutzerdefinierte Trace-basierte Zeitmessungen hinzu. (I99db1, b/204572664)
Fehlerkorrekturen
- Aktiviere bei jedem Durchlauf den Ruhemodus des Geräts, damit die Benutzeroberfläche getestet werden kann. Hierfür muss der Sperrbildschirm deaktiviert sein. (Ibfa28, b/180963442)
- Mehrere Abstürze im StackSampling-Profilerstellungsmodus auf Emulatoren und nicht gerooteten Geräten wurden behoben (Icdbda, b/202719335).
- Entfernung von 0,5 Sekunden Ruhezustand am Ende jeder Iteration.Wenn durch diese Änderung Messwerte fehlen, melden Sie bitte einen Fehler. (Iff6aa)
- Reduzieren Sie die Wahrscheinlichkeit, dass Daten verloren gehen, und verringern Sie den Arbeitsspeicher-Overhead durch Tracing (Id2544, b/199324831, b/204448861).
- Reduzieren Sie die Trace-Größe um ca. 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 in den verschiedenen Plattformversionen einheitlicher sein und den In-App-Messungen besser entsprechen. (IC6b55)
Version 1.1.0-alpha11
3. November 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11
wurde veröffentlicht. Version 1.1.0-alpha11 enthält diese Commits.
API-Änderungen
- Der Macro-Benchmark hat jetzt einen
minSdkVersion
von23
. (If2655) - Es wird eine neue experimentelle
BaselineProfileRule
hinzugefügt, mit der Referenzprofile für die kritische Nutzerreise 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 dies zu Unklarheiten bei der Durchführung bzw. Lösung der Methode führte. Java-Aufrufer müssen wieder Unit.Instance vonmeasureRepeated zurückgeben. Wenn Ihnen dies nicht gefällt, melden Sie den Fehler. Wir werden ihn in einer zukünftigen Version noch einmal prüfen. (Ifb23e, b/204331495)
Version 1.1.0-alpha10
27. Oktober 2021
androidx.benchmark:benchmark-*:1.1.0-alpha10
wurde veröffentlicht. Version 1.1.0-alpha10 enthält diese Commits.
API-Änderungen
- Backport von StartupTimingMetric, um auf API 23 zurückzuportieren. Mit dieser neuen Implementierung wird auch die Funktion „reportFullyDrawn()“ besser verarbeitet, um zu warten, bis der entsprechende Inhalt gerendert wurde. (If3ac9, b/183129298)
- JvmOverloads wurde mehreren MacroBenchmarkScope-Methoden für Java-Aufrufer hinzugefügt. (I644fe, b/184546459)
- Geben Sie eine alternative Funktion „MacroBenchmarkRule.measureRepeated“ an, die eine
Consumer<MacrobenchmarkScope>
für die idiomatische Verwendung in der Sprache Java verwendet. (If74ab, b/184546459)
Fehlerkorrekturen
- Das Problem wurde behoben, wenn Traces nicht früh genug gestartet wurden und Messwerte fehlen. Damit 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 seine Bedeutung zu verdeutlichen, d. h. wie weit der Frame sein Zeitbudget überschritten hat. (I6c2aa, b/203008701)
Version 1.1.0-alpha09
13. Oktober 2021
androidx.benchmark:benchmark-*:1.1.0-alpha09
wurde veröffentlicht. Version 1.1.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Unterstützung beim Löschen eines Kernel-Seiten-Cache ohne Root auf API 31/S+, wodurch die Genauigkeit von StartupMode.COLD-Starts erhöht wird. (Iecfdb, b/200160030)
Version 1.1.0-alpha08
29. September 2021
androidx.benchmark:benchmark-*:1.1.0-alpha08
wurde veröffentlicht. Version 1.1.0-alpha08 enthält diese Commits.
API-Änderungen
- Scroll-Makro-Benchmarks aktivieren, um zu API 23 zurückzukehren (If39c2, b/183129298)
- Hinzufügen eines neuen Messwertstichprobenmesswerts zur UI- und JSON-Ausgabe, der auf Perzentile mehrerer Stichproben pro Iteration konzentriert ist. (I56247, b/199940612)
- In den Benchmarkbibliotheken zu Gleitkommamesswerten wechseln (auf der Studio-Benutzeroberfläche abgeschnitten). (I69249, b/197008210)
Version 1.1.0-alpha07
1. September 2021
androidx.benchmark:benchmark-*:1.1.0-alpha07
wurde veröffentlicht. Version 1.1.0-alpha07 enthält diese Commits.
API-Änderungen
- Mindest-API-Level wurde auf 21 erhöht, um die niedrigste API-Ebene widerzuspiegeln, die in Zukunft unterstützt werden soll. Die aktuell unterstützte Mindest-API-Anzahl wird weiterhin über requiredApi() übertragen und ist derzeit 29 (I440d6, b/183129298).
Fehlerkorrekturen
ProfileInstaller
wurde korrigiert, damit Apps, die Referenzprofile verwenden, MacroBenchmarks mitCompilationMode.BaselineProfile
leichter ausführen können. (I42657, b/196074999) HINWEIS: erfordert auch eine Aktualisierung aufandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
oder höher.- Die Benchmarks für
StartupMode.COLD
undCompilationMode.None
sind jetzt stabiler. (I770cd, b/196074999)
Version 1.1.0-alpha06
18. August 2021
androidx.benchmark:benchmark-*:1.1.0-alpha06
wurde veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.
API-Änderungen
- Das
androidx.benchmark.iterations
-Instrumentierungsargument wurde hinzugefügt, um das manuelle Überschreiben der Iterationsanzahl bei lokalen Tests/Profilen zu ermöglichen. (6188be, b/194137879)
Fehlerkorrekturen
- Bei API 29 und höher zu Simpleperf gewechselt. (Ic4b34, b/158303822)
Bekannte Probleme
CompilationMode.BaselineProfile
ist noch in der Entwicklung. Verwenden Sie sie nicht, um herauszufinden, wie gut ein Profil im Moment ist.
Version 1.1.0-alpha05
4. August 2021
androidx.benchmark:benchmark-*:1.1.0-alpha05
wurde veröffentlicht. Version 1.1.0-alpha05 enthält diese Commits.
1.1.0-alpha04
wurde vor der Veröffentlichung aufgrund eines unregelmäßigen Absturzes abgebrochen. b/193827052
API-Änderungen
- startActivityAndwait wurde so geändert, dass der Start über
am start
gestartet wird. Dadurch wird die Zeit jedes Durchlaufs der Messung um etwa 5 Sekunden verkürzt, was auf Kosten der Tatsache besteht, dass Intent-Parcelables nicht mehr unterstützt werden. (I5a6f5, b/192009149
Fehlerkorrekturen
- Sie können die Aggressivität der Erkennung von thermischen Drosselungen reduzieren und die Referenz neu berechnen, wenn Drosselungen häufig erkannt werden. (I7327b)
- FrameTimingMetric wurde korrigiert, sodass es unter Android S Beta (Ib60cc, b/193260119) funktioniert.
- Verwende ein
EmptyActivity
, um die Ziel-App aus einem Status mit erzwungener Beendigung zu versetzen und soCompilationMode.BaselineProfile
besser zu unterstützen. (Id7cac, b/192084204) - Die Erweiterung der Trace-Datei wurde in
.perfetto-trace
geändert, damit sie dem Plattformstandard entspricht. (I4c236, b/174663039) - StartupTimingMetric gibt jetzt den Messwert "completeDrawnMs" aus, um die Zeit bis zum Abschluss des Renderings Ihrer Anwendung zu messen. Rufen Sie zum Definieren dieses Messwerts für Ihre App „Activity.reportFullyDrawn“ auf, wenn der ursprüngliche Inhalt bereit ist, z. B. wenn die anfänglichen 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 (startActivityAndWarten wartet nicht auf „reportFullyDrawn“). (If1141, b/179176560)
- Kosten für das Anhängen von Ui-Metadaten an Traces um mehr als 50 ms reduzieren (Ic8390, b/193923003)
- Deutlich erhöhte Abfragehäufigkeit beim Beenden des Tracings, wodurch sich die Benchmarklaufzeit beim Start beispielsweise um mehr als 30 % verringern kann (Idfbc1, b/193723768)
Version 1.1.0-alpha03
16. Juni 2021
androidx.benchmark:benchmark-*:1.1.0-alpha03
wurde veröffentlicht. Version 1.1.0-alpha03 enthält diese Commits.
Neue Funktionen
- Ein neuer
CompilationMode.BaselineProfile
wurde zur Unterstützung von Profilen hinzugefügt, die mithilfe der Jetpack ProfileInstaller-Bibliothek installiert wurden. (aosp/1720930)
Fehlerkorrekturen
Der Gradle-Beispielcode zum Unterdrücken von Benchmark-Fehlern 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 stellt eine wichtige Komponente beim Benchmarking dar: MacroBenchmark. Neben dem Benchmarking, mit dem Sie CPU-Schleifen messen können, können Sie mit MacroBenchmark auch die gesamte App-Interaktion wie Starten und Scrollen messen und Traces erfassen. Weitere Informationen finden Sie in der Dokumentation zur Bibliothek.
androidx.benchmark:benchmark-*:1.1.0-alpha02
wurde veröffentlicht. Version 1.1.0-alpha02 enthält diese Commits.
Neue Funktionen
MacroBenchmark-Artefakte hinzugefügt (androidx.benchmark:benchmark-macro-junit4
und androidx.benchmark:benchmark-macro
)
- Erfassen Sie Start-, Scroll- und Animationsmesswerte aus Ihrer App, lokal oder in CI.
- Traces in Android Studio erfassen und prüfen
Fehlerkorrekturen
- Shell-Berechtigungsprobleme mit Ausgabeverzeichnis unter Android 12 umgehen. Hinweis: Damit auf betroffenen Geräten weiterhin Ausgabedateien erfasst werden können, ist möglicherweise eine Aktualisierung des Android-Gradle-Plug-ins auf Canary-Version 7.0.0 und von Android Studio auf Arctic Fox (2020.3.1) erforderlich. (Icb039)
- Konfigurations-Caching in BenchmarkPlugin (6be1c1, b/159804788) wird unterstützt.
- Vereinfachte Dateiausgabe – standardmäßig aktiviert, in einem Verzeichnis, das
requestLegacyExternalStorage=true
nicht erfordert (8b5a4d, b/172376362) - Es wurde ein Problem mit Logcat-Warnungen für das Drucken von Bibliotheken behoben, die darauf hinweisen, dass der JIT-Thread in Plattformversionen, in denen er nicht vorhanden ist, nicht gefunden wird. (I9cc63, b/161847393)
- Fehler bei der maximalen Frequenz des Lesegeräts behoben. (I55c7a)
Version 1.1.0-alpha01
10. Juni 2020
androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
und androidx.benchmark:benchmark-junit4:1.1.0-alpha01
wurden veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.
Neue Funktionen von Version 1.1
- Zuordnungsmesswert: Benchmarks durchlaufen jetzt nach Warmup und Timing eine zusätzliche Phase, in der die Anzahl der Zuweisungen erfasst wird. Zuweisungen können bei älteren Versionen der Plattform zu Leistungsproblemen führen (140 ns in O wird zu 8ns in M – gemessen auf Nexus5X mit gesperrten Uhren). Dieser Messwert wird in der Android Studio-Konsolenausgabe und in der
- Unterstützung der 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 der Methodenaufzeichnung oder der Stichprobenerhebung aus ART. Diese Dateien können mit dem Profiler in Android Studio überprüft werden. Klicken Sie dazu auf File > Open (Datei > Öffnen).
- Das Benchmark-Gradle-Plug-in bietet jetzt Standardeinstellungen, um die Einrichtung zu vereinfachen:
testBuildType
ist standardmäßig freigegeben, um die Verwendung von Abhängigkeiten mit integrierter Codeabdeckung zu vermeiden. Der Release-BuildType wird auch als Standard-BuildType konfiguriert. Dadurch kann Android Studio beim ersten Öffnen eines Projekts automatisch die richtige Build-Variante auswählen. (b/138808399)signingConfig.debug
wird als Standardkonfiguration für die Signatur verwendet (b/153583269).
** Fehlerkorrekturen **
- Der Overhead für den Übergang zur Aufwärmphase konnte deutlich reduziert werden, da die erste Messung für jede Benchmark künstlich höher war als für andere. Dieses Problem trat in sehr kleinen Benchmarks (maximal 1 Mikrosekunde) aus. (b/142058671)
- Es wurde
InstrumentationResultParser
-Fehler behoben, der für jede Benchmark beim Ausführen über die Befehlszeile ausgegeben wurde. (I64988, b/154248456)
Bekannte Probleme
- Befehlszeile und Gradle-Aufrufe von Benchmark geben die Ergebnisse nicht direkt aus. Sie können dies umgehen, indem Sie entweder Studio verwenden oder die JSON-Ausgabedatei für die Ergebnisse parsen.
- Für Benchmarkberichte kann der Bericht nicht von Geräten abgerufen werden, auf denen eine App mit einer App-ID mit der Endung „android“ oder „download“ installiert ist. Die Groß-/Kleinschreibung wird dabei 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
Benchmarkversion 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 an 1.0.0 bis 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 App-Code schreiben und schnell Ergebnisse erhalten.
Sie verhindert Build- und Laufzeitkonfigurationsprobleme und stabilisiert die Geräteleistung, um genaue und konsistente Messungen zu gewährleisten. Führen Sie die Benchmarks direkt in Android Studio oder in Continuous Integration aus, um die Codeleistung im Zeitverlauf zu beobachten und Regressionen zu vermeiden.
Zu den wichtigsten Funktionen gehören:
- Uhrstabilisierung
- Automatische Thread-Priorisierung
- Unterstützung für UI-Leistungstests, wie im RecyclerView-Beispiel
- JIT-fähiges Aufwärmen und Looping
- 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
- Systrace-Tracing wurde den Benchmarks hinzugefügt.
Fehlerkorrekturen
- Es wurde ein Problem mit der Instabilität von Messwerten behoben, bei dem die JIT aufgrund einer herabgestuften Priorisierung nicht vor dem Aufwärmen beendet 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 Aufwärmvorgang eine automatische Speicherbereinigung aus, um die Speicherauslastung von einer Benchmark bis zur nächsten zu reduzieren (b/140895105).
Fehlerkorrekturen
- Die Abhängigkeit
androidx.annotation:android-experimental-lint
wurde hinzugefügt, damit der Java-Code Lint-Fehler korrekt erzeugt, wenn die experimentelle API nicht verwendet wird, ähnlich wie die experimentelle Kotlin-Anmerkung für Kotlin-Aufrufer. - Die Verwendung des
additionalTestOutputDir
-Instrumentierungsarguments für die Ausgabe im Android-Gradle-Plug-in 3.6 wird jetzt korrekt erkannt, um zu erkennen, wann AGP die Datenkopien verarbeitet. - Korrigieren Sie die nicht erkannte Taktfrequenz in JSON, damit
-1
korrekt gedruckt wird (b/141945670).
Version 1.0.0-alpha06
18. September 2019
androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
und androidx.benchmark:benchmark-junit4:1.0.0-alpha06
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, die jetzt eine hilfreichere Fehlermeldung bietet.
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 Skript zur Zeitsperre, das auf Geräten, auf denen das Shell-Dienstprogramm
cut
oderexpr
fehlt, nicht funktionierte. - Es wurde ein Problem mit der Aufgabe
./gradlew lockClocks
behoben, die auf Geräten hängen blieb, die mit einer älteren Version des SU-Dienstprogramms gerootet waren, die das Flag-c
nicht unterstützt.
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.
Es wurde auch eine neue Dokumentation zur Verwendung der Benchmark-Bibliothek ohne Gradle hinzugefügt, sowohl für die Verwendung mit verschiedenen Build-Systemen (z. B. Bazel oder Buck) als auch für die Ausführung in CI. Weitere Informationen finden Sie unter Benchmarks ohne Gradle erstellen und Benchmarks in Continuous Integration ausführen.
Neue Funktionen
- Gradle-Plug-in
- Deaktiviert jetzt automatisch die Testabdeckung und legt standardmäßig
AndroidBenchmarkRunner
fest (b/138374050) - Unterstützung für neue AGP-basierte Datenkopien beim Ausführen von Benchmarks und bei der Verwendung von AGP 3.6+
- Deaktiviert jetzt automatisch die Testabdeckung und legt standardmäßig
- Ergänzungen im JSON-Format
- Gesamte Benchmark-Testlaufzeit der Ausgabe (b/133147694)
@Parameterized
Benchmarks, die einen Namensstring (z. B.@Parameters(name = "size={0},depth={1}")
) verwenden, geben jetzt Parameternamen und -werte pro Benchmark in der JSON-Ausgabe aus (b/132578772).
- Probelaufmodus (b/138785848)
- Es wurde ein Probelaufmodus hinzugefügt, in dem jede Benchmark-Schleife nur einmal ausgeführt wird, um nach Fehlern/Abstürzen zu suchen, ohne Messungen zu erfassen. Dies kann z.B. nützlich sein, wenn Sie zum Beispiel schnell Benchmarks im Vorab einreichen, um zu prüfen, ob sie fehlerhaft sind.
API-Änderungen
- Die Modulstruktur wurde durch Aufteilung der Bibliothek geändert (b/138451391).
benchmark:benchmark-junit4
enthält Klassen mit JUnit-Abhängigkeit:AndroidBenchmarkRunner
undBenchmarkRule
. Beide wurden in dasandroidx.benchmark.junit4
-Paket verschoben.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 führen zum Absturz des Tests (b/137653596).
- Dies geschieht, um genaue Messungen zu fördern, insbesondere in CI.
- Diese Fehler lassen sich mit einem Instrumentierungsargument auf Warnungen reduzieren. Beispiel:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Fehlerkorrekturen
- Fehler beim Schreiben in externen Speicher auf Q-Geräten bieten aussagekräftigere Meldungen mit Vorschlägen zur Behebung des Problems.
- Die Bildschirme werden während Benchmark-Ausführungen automatisch aktiviert und funktionieren nicht mehr, wenn der Bildschirm ausgeschaltet ist
Externe Beiträge
- Vielen Dank an Sergey Zakharov für den Beitrag zur Verbesserung der JSON-Ausgabe und die Behebung von Problemen mit dem Display.
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
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Die Schlafdauer aufgrund von Temperaturdrosselung pro Benchmark im vollständigen JSON-Bericht angeben
Fehlerkorrekturen
- Das Gradle-Plug-in sollte nicht mehr erforderlich sein, nachdem Android-Plug-ins und die Android-Blockierung
- Unterstützung für Benchmarkberichte auf Android 10-Geräten mit eingeschränktem Speicher
Version 1.0.0-alpha02
6. Juni 2019
androidx.benchmark:1.0.0-alpha02
und androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
wurden freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
Beachten Sie, dass das JSON-Schema als API behandelt wird. Wir planen, die gleichen Stabilitätsbeschränkungen wie bei anderen APIs zu befolgen: stabil (mit sehr seltenen Ausnahmen) einmal in der Betaphase und in der endgültigen Version behoben, mit nur Ergänzungen von Nebenversionen und Änderungen/Entfernungen in Hauptversionen.
API-Änderungen
Überarbeitetes JSON-Schema. Weitere Änderungen am JSON-Schema sind wahrscheinlich auf Ergänzungen beschränkt:
- Die Struktur des Ergebnisobjekts wurde neu organisiert, um in Zukunft weitere Messwertgruppen zu unterstützen (b/132713021).
- Kontextinformationen zum Testlauf, wie Geräte- und Build-Informationen und ob Uhren gesperrt sind, wurden dem Objekt der obersten Ebene hinzugefügt (b/132711920).
- Namen von Zeitmesswerten enthalten jetzt das Wort "ns" (b/132714527).
- Zusätzliche Statistiken pro gemeldetem Messwert (Maximum, Medianwert, Minimum) und entfernte vereinfachte Nano-Zusammenfassungsstatistiken (b/132713851)
XML-Ausgabe entfernt (b/132714414)
Erkennung der Wärmedrosselung wurde aus der
BenchmarkState.reportData
API entfernt (b/132887006)
Fehlerkorrekturen
- Problem behoben, bei dem
./gradlew lockClocks
auf einigen neueren Betriebssystemgeräten nicht fixiert war (b/133424037) - Drosselungserkennung für Emulator deaktiviert (b/132880807)
Version 1.0.0-alpha01
7. Mai 2019
androidx.benchmark:benchmark:1.0.0-alpha01
wurde veröffentlicht. Die in dieser Version enthaltenen Commits sind hier verfügbar.