Benchmark
| Letzte Aktualisierung | Stabile Release | Releasekandidat | Beta-Release | Alpha-Release |
|---|---|---|---|---|
| 28. Januar 2026 | 1.4.1 | - | - | 1.5.0-alpha02 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Benchmark hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Makro-Benchmark
Wenn Sie Macrobenchmark in Ihrem Projekt verwenden möchten, fügen Sie die folgenden Abhängigkeiten der Datei build.gradle für Ihr Macrobenchmark-Modul hinzu:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.4.1" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.4.1") }
Mikrobenchmark
Wenn Sie Microbenchmark in Ihrem Projekt verwenden möchten, fügen Sie die folgenden Abhängigkeiten der Datei build.gradle für Ihr Microbenchmark-Modul hinzu:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.4.1" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.4.1") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Microbenchmark 库还提供了一个可与 Microbenchmark 模块搭配使用的 Gradle 插件。此插件可设置模块的默认 build 配置,设置将基准输出复制到主机,并提供 ./gradlew lockClocks 任务。
如需使用该插件,请在顶级 build.gradle 文件的“plugins”代码块中添加以下代码行:
Groovy
plugins { id 'androidx.benchmark' version '1.4.1' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.4.1" apply false }
然后,将该插件应用到基准模块的 build.gradle 文件
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben, lassen Sie es uns wissen. Bevor Sie ein neues Problem erstellen, sollten Sie sich jedoch die bereits gemeldeten Probleme in dieser Bibliothek ansehen. Wenn Sie sich einer Problemmeldung anschließen möchten, klicken Sie auf die Schaltfläche mit dem Stern.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 1.5
Version 1.5.0-alpha02
28. Januar 2026
androidx.benchmark:benchmark-*:1.5.0-alpha02 ist veröffentlicht. Version 1.5.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
Teilweise Unterstützung für die Generierung von Baseline-Profilen für Kotlin-Multiplattform-Module hinzugefügt. Normalerweise können Abhängigkeiten von Profilen mit der
baselineProfile-Gradle-Konfiguration im Block „dependencies“ definiert werden. Das funktioniert derzeit jedoch nicht für KMP-Module.kotlin { androidLibrary { namespace = "com.example.namespace" compileSdk = 36 } sourceSets { androidMain.dependencies { // THIS DOES NOT WORK // baselineProfile(":yourProducerProject") } } }Stattdessen sollten Sie Ihre Abhängigkeiten mit der
baselineProfile-**Erweiterung definieren. (Ie19c4)plugins { id("org.jetbrains.kotlin.multiplatform") id("com.android.kotlin.multiplatform.library") id("androidx.baselineprofile.consumer") } kotlin { androidLibrary { namespace = "com.example.namespace" compileSdk = 36 } sourceSets { androidMain.dependencies { // ... } } } // Define dependencies // This works ! baselineProfile { variants { androidMain { from(project(":yourProducerProject")) } } }
Version 1.5.0-alpha01
17. Dezember 2025
androidx.benchmark:benchmark-*:1.5.0-alpha01 ist veröffentlicht. Version 1.5.0-alpha01 enthält diese Commits.
- Macrobenchmark 1.5 verwendet
UiAutomator2.4, um die Interaktion mit der gemessenen Anwendung zu vereinfachen. Das MacrobenchmarkScope-Objekt wird jetzt von UiAutomatorTestScope abgeleitet. Dadurch können Sie die modernenUiAutomator-APIs wieonElement { ... }.click()verwenden. - Weitere Informationen zu
UiAutomator2.4 finden Sie in der Dokumentation.
Neue Funktionen
- Für das Baseline Profile Gradle-Plug-in ist in AGP 9.0 nicht mehr
newDsl=falseerforderlich (Iaaac7, b/443311090) - Die Trace-Konfiguration wird erweitert, um die Core-Größe (z.B. „little“/„big“) in Benchmark-System-/Perfetto-Traces zu erfassen. (I8e397, b/457469959)
API-Änderungen
- (In UiAutomator)
startActivitywurde in „wait for new window“ geändert. (I35da6, b/440021797) - Stabilisieren Sie
BlackHole-APIs in androidx.benchmark. (I2b67e, b/451749438) - Fügen Sie
@JvmOverloadsfür Convenience-Konstruktoren fürPerfettoTraceRulehinzu. (I1510a, b/443763207)
Version 1.4
Version 1.4.1
10. September 2025
androidx.benchmark:benchmark-*:1.4.1 ist veröffentlicht. Version 1.4.1 enthält diese Commits.
Fehlerkorrekturen
- Bei der Verwendung von
perfettoSdkTracing=true(z.B. beim Tracing von Compose in einem Microbenchmark) wurde der Zielprozess beendet, wenn er bereits ausgeführt wurde und kein StartupMode angegeben war. (Ib2c1f)
Version 1.4.0
30. Juli 2025
androidx.benchmark:benchmark-*:1.4.0 ist veröffentlicht. Version 1.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.3.0
Microbenchmark
- Die Gradle-Aufgaben
lockClocksundunlockClockswurden in Benchmark-Projekte verschoben, anstatt auf der obersten Ebene zu sein, um die Gradle-Projektisolation zu berücksichtigen. BenchmarkRulewurde refaktoriert, um auf Coroutinen zu basieren und ein besseresyield()-Verhalten zu unterstützen. Dadurch sollte das Risiko von ANRs bei Benchmarkläufen, insbesondere bei langen CI-Läufen, erheblich verringert werden. Hinweis: UI-Benchmarks sollten mitmeasureRepeatedOnMainThreadausgeführt werden.
Macrobenchmark
- Es wurde ein Workaround für API 34+ für
CompilationMode.None()hinzugefügt, da die Leistung aufgrund der ART-Überprüfung, die Apps teilweise nach dem ersten Start kompiliert, inkonsistent wäre. - Experimentelle Funktion: Mit Startup Insights können bestimmte häufige Probleme in einem Startup-Macrobenchmark hervorgehoben werden, indem
MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true)))übergeben wird. - ArtMetric wurde hinzugefügt. Damit lässt sich die JIT-Kompilierung und das unoptimierte Laden von Klassen erkennen. Beides ist nützlich, um Baseline-Profil-Optimierungen zu validieren.
Baseline-Profile
BaselineProfileRuleerfasst jetzt Profile für Apps mit mehreren Prozessen.
Weitere Änderungen
- TraceProcessor wurde in eine eigene Bibliothek (
androidx.benchmark:benchmark-traceprocessor) ausgelagert, damit sie auch außerhalb vonMacrobenchmark-Messwerten verwendet werden kann. Sie kann auch auf der Desktop-JVM ausgeführt werden, indem Sie einen eigenen ServerLifecycleManager definieren.
Version 1.4.0-rc01
18. Juni 2025
androidx.benchmark:benchmark-*:1.4.0-rc01 ist veröffentlicht. Version 1.4.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde eine Problemumgehung für Laufzeit-Images hinzugefügt, die dazu führen, dass
CompilationMode.None()die Worst-Case-Leistung nach der ersten Iteration nicht misst. Leider erfordert dieser Workaround eine Verzögerung von 5 Sekunden, um das Laufzeit-Image zu Beginn jeder Makrobenchmark-Suite absichtlich zu beschädigen (I4a4f1).
Version 1.4.0-beta02
4. Juni 2025
androidx.benchmark:benchmark-*:1.4.0-beta02 ist veröffentlicht. Version 1.4.0-beta02 enthält diese Commits.
API-Änderungen
- Es wurde ein
BaselineProfileConfig.Builderhinzugefügt, um den Aufruf vonBaselineProfileRule.collectWithResults()für Java-Entwickler zu vereinfachen. (I94905)
Version 1.4.0-beta01
7. Mai 2025
androidx.benchmark:benchmark-*:1.4.0-beta01 ist veröffentlicht. Version 1.4.0-beta01 enthält diese Commits.
API-Änderungen
PerfettoTraceRule-Konstruktorvariante hinzugefügt, diePerfettoConfigakzeptiert (Ie53ba)
Fehlerkorrekturen
- Das Format des Links zu Startup-Erkenntnissen wurde aktualisiert, um das richtige Plug-in und ein klareres Trennzeichen zu verwenden (
:ist kürzer als%3A, beide werden unterstützt) (Ie18ef)TraceProcessor - Verwenden Sie immer „Stopp erzwingen“, um Prozesse zu beenden, auch wenn das Gerät gerootet ist und System-Apps beendet werden. Behebt Ausnahmen des Typs
Expected no stdout/stderr from killall ... No such process. (Idca2c)
Externer Beitrag
- Proxy-Ausnahmebehandlung für
TraceProcessorHttpServerhinzugefügt (I480f5)
Version 1.4.0-alpha11
9. April 2025
androidx.benchmark:benchmark-*:1.4.0-alpha11 ist veröffentlicht. Version 1.4.0-alpha11 enthält diese Commits.
API-Änderungen
- Das Argument-Zeitlimit von
TraceProcessorwurde geändert: Das Zeitlimit ist jetzt so lang wie „timeoutMs“, damit Java-Aufrufer es besser nutzen können. (I9fbb5) - Markieren Sie den
TraceProcessor-Konstruktor als intern. Anrufer solltenTraceProcessor.startServeroderTraceProcessor.runSerververwenden. (Ia8c5b)
Fehlerkorrekturen
- Wenn Sie die Anwendung mit
MacrobenchmarkScope.killProcessbeenden, prüfen Sie die Ergebnisse des Befehls, um einen stillen Fehler und einen Zeitüberschreitungsfehler zu vermeiden. (I84555)
Abhängigkeitsupdates
- Diese Bibliothek ist jetzt auf das Sprachniveau von Kotlin 2.0 ausgerichtet und erfordert KGP 2.0.0 oder höher. (Idb6b5)
Version 1.4.0-alpha10
26. März 2025
androidx.benchmark:benchmark-*:1.4.0-alpha10 ist veröffentlicht. Version 1.4.0-alpha10 enthält diese Commits.
API-Änderungen
- Das Standardzeitlimit für das Laden und Abfragen des
TraceProcessor-Servers wurde auf 120 Sekunden erhöht (zuvor 60/30) und beide können jetzt mit einem einzigen Zeitlimitparameter konfiguriert werden. (Ifec87)
Fehlerkorrekturen
- Es wurden einige Probleme behoben, die beim Benchmarking oder Erfassen von Profilen einer App ohne
profileinstalleraufgetreten sind, wennBroadcastRecieverenthalten war. Dies betrifft nur Läufe auf gerooteten Geräten. (Ied308)
Version 1.4.0-alpha09
12. März 2025
androidx.benchmark:benchmark-*:1.4.0-alpha09 ist veröffentlicht. Version 1.4.0-alpha09 enthält diese Commits.
API-Änderungen
TraceProcessorund Session API mit schließbaren Handles hinzugefügt, um die Verwendung mit benutzerdefinierten Lebenszyklen zu vereinfachen. Dies ist auch ein Schritt hin zu einer einfacheren Verwendung von Coroutine und Java API. Die Erweiterungsfunktionen fürTraceProcessor.runServer {}sind jetzt als experimentell gekennzeichnet, da sie wahrscheinlich verschoben und in Zukunft nicht mehr als experimentell gekennzeichnet werden. (I358b4)
Fehlerkorrekturen
- Das Erfassen von Benchmark- und Baseline-Profilen funktioniert mit API 36 nicht mehr, da in
pgreptoybox eine Änderung vorgenommen wurde, die jetzt-aerfordert, um die vollständige Befehlszeile auszugeben. (Idc991) - Die Standard-Tracingkonfiguration wird gefiltert, um das Risiko von Datenverlust in Traces auf neueren API-Ebenen zu verringern. (I54e8a)
- Das experimentelle Instrumentierungsargument
androidx.benchmark.killExistingPerfettoRecordingswurde hinzugefügt. Es kann auffalsegesetzt werden, damit die Erfassung von vorhandenen Perfetto-Traces fortgesetzt werden kann. Standardmäßig werden vorhandene Perfetto-Trace-Aufzeichnungen auf dem Gerät beendet, um Störungen zu vermeiden. (I02a3c) - Das JSON-Feld
context.osCodenameAbbreviatedist jetztRELfür veröffentlichte Betriebssystemversionen mit API 35 und höher, da nicht numerische Codenamen von der zugrunde liegenden Plattform nicht mehr unterstützt werden. (Ib17fd) - Behebt einen Absturz in
FrameTimingMetric, wenn resynchronisierte Frames auftreten. (I7c6f4, b/394610806) - Es wird nicht mehr davon ausgegangen, dass
Choreographer#doFrameder oberste Stackframe im Hauptthread fürFrameTimingQueryist. (Iee0e0, b/340206285)
Version 1.4.0-alpha08
12. Februar 2025
androidx.benchmark:benchmark-*:1.4.0-alpha08 ist veröffentlicht. Version 1.4.0-alpha08 enthält diese Commits.
API-Änderungen
- Die
TraceProcessor.runSession()-Erweiterungs-APIs wurden als experimentell eingestuft, da sie auf Android wahrscheinlich zu konkreten Konstruktoren werden. (Ib0528, b/393640753) - Die meisten Implementierungen von Startup Insights sind jetzt öffentlich/experimentell und werden in das
TraceProcessor-Artefakt verschoben (sieheStartupInsights). (I0aa00) BenchmarkRule.runWithTimingDisabled {}wird zugunsten vonBenchmarkRule.runWithMeasurementDisabled {}eingestellt, da dieser Status das Verhalten klarer beschreibt: Alle Messwerte werden pausiert. Außerdem wird dieMicrobenchmarkScope-Superklasse verfügbar gemacht, da dierunWithMeasurementDisabled-Funktion nicht neu deklariert werden kann, um den Zugriff zu öffnen, da sie inline ist. (I9e23b, b/389149423, b/149979716)- Benchmark-Bibliotheken wurden zu Kotlin 2.0 migriert. (I9d1e0)
- Das Instrumentierungsargument
androidx.benchmark.startupProfiles.enablewurde entfernt. Sie ist nicht mehr nützlich, da sie über dasincludeInStartupProfile-Argument inBaselineProfileRule.collect()gesteuert werden kann. (I39eb4)
Fehlerkorrekturen
- Die Anzahl der internen Microbenchmark-Funktionen, die während der Profilerstellung aufgerufen werden, wurde reduziert, um z. B. Methodentraces übersichtlicher zu gestalten (Ifaed8).
- Spekulativer Fix für Abstürze: „Failed to stop [
ProcessPid(processName=perfetto, pid=...)]“ (Stoppen von [ProcessPid(processName=perfetto, pid=...)] fehlgeschlagen). Benchmark protokolliert jetzt eine Meldung anstatt abzustürzen, wenn ein Perfetto-Hintergrundprozess vor dem Ausführen des Benchmarks nicht beendet werden kann. (I37d3e, b/323601788) - Fehler bei
IllegalStateExceptionsmit dem Label „Expectedpm dump-profilesstdout“ behoben, die durch eine zu strenge Prüfung des Ausgabeformats verursacht wurden. (I358dc)
Version 1.4.0-alpha07
29. Januar 2025
androidx.benchmark:benchmark-*:1.4.0-alpha07 ist veröffentlicht. Version 1.4.0-alpha07 enthält diese Commits.
Neue Funktionen
BaselineProfileRuleführt jetzt einecollectWithResults(...)API ein, die eine Liste von Pfaden zu den berechneten Profilen enthält. (I056f8)- Das Instrumentierungsargument
androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadlinewurde hinzugefügt. Es kann auf „false“ gesetzt werden, um das Verhalten vonmeasureRepeatedOnMainThreadbeim Überschreiten der Frist für lokale Tests zu deaktivieren. Wird ansonsten nicht empfohlen, da dadurch die Wahrscheinlichkeit von ANRs bei Tests steigt. (Idbeec, b/353226476)
API-Änderungen
@JvmOverloadswurde dem Konstruktor vonMicrobenchmarkConfighinzugefügt. (I13fd3)BenchmarkRulewurde refaktoriert, um auf Coroutinen zu basieren und ein besseresyield()-Verhalten zu unterstützen. Bei dieser Umgestaltung wurden mehrere experimentelleBenchmarkState-APIs entfernt. Bei Bedarf werden sie jedoch ersetzt. Außerdem wurderunWithMeasurementDisabledhinzugefügt, um das Verhalten zu verdeutlichen (alle Messungen werden pausiert). In Zukunft wirdrunWithTimingDisabledeingestellt. (I19837, b/389149423, b/311242861)- Verschieben Sie
PerfettoTraceProcessornachTraceProcessorin ein neuesandroidx.benchmark:benchmark-traceprocessor-Artefakt und machen Sie den Großteil der API nicht experimentell. Alle benutzerdefiniertenTraceMetricoder Elemente, die aus Traces gelesen werden, müssen auf den neuenTraceProcessor-Import aktualisiert werden. Die neueTraceProcessorAPI funktioniert genau wie die alte, ist aber eine eigenständige Schnittstellenbibliothek (ähnlich derandroidx.sqlite-Ebene von Room) mit einer Android-spezifischen Implementierung, die in Macrobenchmark integriert ist. Das neue Artefakt kann auch auf der JVM verwendet werden. Derzeit müssen Sie jedoch eine eigene Kopie derTraceProcessor-Binärdatei starten und einen Port für die Verbindung anbieten. (I3a767, I62563, b/381134564)
Fehlerkorrekturen
- Es wird eine deutlichere Fehlermeldung ausgegeben, wenn
MacrobenchmarkScope.startActivityAndWaitden Zielprozess nicht starten kann (möglicherweise aufgrund eines Absturzes im Zielprozess), anstelle der weniger eindeutigen Meldung „Unable to confirm activity launch completion“ (I3539b). - Es wurden mehrere Syntaxfehler in Kotlin-Beispielen und die Syntaxhervorhebung in mehreren Java-/build.gradle-Beispielen behoben. (Ib3808)
- Die Dokumentation für die Parameter
ArtMetricundCaptureInfowurde klarer formuliert. (I96e60)
Version 1.4.0-alpha06
11. Dezember 2024
androidx.benchmark:benchmark-*:1.4.0-alpha06 ist veröffentlicht. Version 1.4.0-alpha06 enthält diese Commits.
API-Änderungen
- Die Verwendung von
@Language("sql")inPerfettoTraceProcessor.Session.query()wurde entfernt, da die Hervorhebung/Analyse in Studio nicht funktioniert. (Idc2fa, b/377733398)
Fehlerkorrekturen
- In dieser Bibliothek werden jetzt JSpecify-Annotationen für Nullsicherheit verwendet, die typbezogen sind. Kotlin-Entwickler sollten das folgende Compiler-Argument verwenden, um die korrekte Verwendung zu erzwingen:
-Xjspecify-annotations=strict(dies ist die Standardeinstellung ab Version 2.1.0 des Kotlin-Compilers). (I46810, b/326456246) - Das
ArtMetric-Element wurde korrigiert, um das Laden der Klasse (nicht die Initialisierung) zu melden. Außerdem wurde die Dokumentation verbessert, um das Laufzeitverhalten zu verdeutlichen. (I9915c) - Führen Sie unter Android Multiuser Befehle als Root nur auf gerooteten Geräten aus. (I88b44)
Version 1.4.0-alpha05
13. November 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05 ist veröffentlicht. Version 1.4.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem auf API 34+ behoben, bei dem die Leistung von
CompilationMode.None()nicht konsistent war und nicht der anfänglichen Leistung im Worst-Case-Szenario entsprach. Damit wird eine Plattformänderung umgangen, die es dem ART-Kompilierungsstatusverifyermöglicht, Apps kurz nach dem ersten Start teilweise zu kompilieren (betrifft nur das Laden von Klassen). (Ie48d0) - Ein Problem wurde behoben, bei dem (insbesondere kurze) Traces erfasst werden konnten, die keine Messungen von integrierten Macrobenchmark-Messwerten enthielten, da der Prozessname im Perfetto-Trace abgeschnitten wurde. Bei Macrobenchmark wird dieses Problem nun umgangen, indem in allen integrierten Abfragen zusätzlich zum erwarteten Paketnamen auch nach dem gekürzten Paketnamen gesucht wird. Benutzerdefinierte
TraceMetric-Implementierungen oder andere direkte Aufrufer vonPerfettoSession.querykönnen dieses Verhalten implementieren, indem sieprocess.name LIKE "$packageName"in einer Perfetto-Abfrage in(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")ändern. (I5bf01, b/377565760)
Version 1.4.0-alpha04
30. Oktober 2024
androidx.benchmark:benchmark-*:1.4.0-alpha04 ist veröffentlicht. Version 1.4.0-alpha04 enthält diese Commits.
Neue Funktionen
- (Experimentell) Aktivieren Sie die Generierung von Baseline-Profilen und Benchmarking für Apps, die für einen sekundären Nutzer installiert wurden, z. B. für alle Apps auf Headless-Android Auto-Geräten. Diese Unterstützung wurde in einigen Szenarien getestet. Wenn sie bei Ihnen nicht funktioniert, melden Sie uns das bitte über einen Fehlerbericht. (I9fcbe, b/356684617, b/373641155)
Fehlerkorrekturen
isProfileablewird jetzt immer in Benchmark-Builds überschrieben undisDebuggablewird jetzt immer sowohl in Benchmark- als auch innonMinified-Builds (Erfassung des Baseline-Profils) überschrieben. (I487fa, b/369213505)- Die Kompilierungserkennung auf einigen physischen Geräten vor API 28 wurde korrigiert. Dies betrifft JSON
context.compilationModesowie das Verhalten vonandroidx.benchmark.requireAot=true(das nicht mehr fälschlicherweise ausgelöst wird) (Ic3e08, b/374362482). - In
CpuEventCounter-Messwerten wird ein Fehler ausgegeben, wenn ungültige Messungen beobachtet werden (z. B. instructions/cpucycles==0) (I8c503).
Version 1.4.0-alpha03
16. Oktober 2024
androidx.benchmark:benchmark-*:1.4.0-alpha03 ist veröffentlicht. Version 1.4.0-alpha03 enthält diese Commits.
API-Änderungen
- Macrobenchmark: Fügt
ArtMetrichinzu, mit dem die Profilabdeckung oder die allgemeine Android-Laufzeitleistung untersucht werden kann. Erfasst die Anzahl und Gesamtdauer von JIT, Klasseninitialisierung (sofern verfügbar) und Klassenüberprüfung. Außerdem werden Änderungen anCaptureInfovorgenommen, um die optionale ART-Mainline-Version mit Standard einzuschließen. (I930f7) - Fügen Sie der JSON-Ausgabe für Benchmarks
coefficientOfVariationhinzu, um die Stabilität innerhalb eines bestimmten Benchmark-Laufs zu sehen. (Ib14ea)
Fehlerkorrekturen
- Der Fehler
CollectBaselineProfileTaskwurde behoben, wenn das AVD-Gerät Leerzeichen enthält. (Ia0225, b/371642809) - Spekulative Korrektur für Fehler aus
StartupMode.COLD-Ausnahmen:Package <packagename> must not be running prior to cold start!. Jetzt wartetMacrobenchmarkScope.killProcess()(einschließlich des vor jeder Iteration ausgeführten, mit dem dasStartupMode.COLD-Verhalten implementiert wird), bis alle Prozesse der App beendet wurden. (I60aa6, b/351582215) - Es wurde ein Problem behoben, bei dem auf einigen gerooteten Emulatoren der Fehler UNLOCKED_ angezeigt wurde. (Ic5117)
- In dieser Bibliothek werden jetzt JSpecify-Annotationen für Nullsicherheit verwendet, die typbezogen sind. Kotlin-Entwickler sollten das folgende Compiler-Argument verwenden, um die korrekte Verwendung zu erzwingen:
-Xjspecify-annotations=strict(dies ist die Standardeinstellung ab Version 2.1.0 des Kotlin-Compilers). (I7104f, b/326456246)
Version 1.4.0-alpha02
2. Oktober 2024
androidx.benchmark:benchmark-*:1.4.0-alpha02 ist veröffentlicht. Version 1.4.0-alpha02 enthält diese Commits.
API-Änderungen
- Die Gradle-Aufgaben
lockClocksundunlockClockswurden in Benchmark-Projekte verschoben und sind nicht mehr auf der obersten Ebene verfügbar. Diese Änderung war erforderlich, da es leider keine Möglichkeit gibt, diese als Aktionen der obersten Ebene zu registrieren, ohne die Projektisolation zu beeinträchtigen. (I02b8f, b/363325823)
Fehlerkorrekturen
BaselineProfileRuleerfasst jetzt Profile für Apps mit mehreren Prozessen, indem am Ende des Blocks ein Signal an jeden laufenden Prozess gesendet wird, um Profile zu erstellen. Wenn bei einer profilbasierten Kompilierung nie ein Prozess gefunden wird, an den gesendet werden kann, schlägt die Kompilierung fehl, da Profildaten darin nicht erwartet werden. Außerdem wurde ein Instrumentierungsargument hinzugefügt, um die Wartezeit für den Dump zu steuern:androidx.benchmark.saveProfileWaitMillis(I0f519, b/366231469)- Benchmark
1.3.2: Das Problem, dass Baseline Profile- oder Macrobenchmark-Ergebnisdateien nicht aus dem Baseline Profile Gradle-Plug-in abgerufen werden konnten, wurde behoben. (I2f678, b/285187547)
Wenn Sie FTL verwenden möchten, wenden Sie das Plug-in auf das Baseline-Profilmodul im Plug-in-Block an:
plugins {
...
id("com.google.firebase.testlab")
}
Konfigurieren Sie dann Firebase Test Lab mit:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Außerdem muss das erstellte FTL-Gerät der Baseline-Profil-Erweiterung hinzugefügt werden:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Version 1.4.0-alpha01
18. September 2024
androidx.benchmark:benchmark-*:1.4.0-alpha01 ist veröffentlicht. Version 1.4.0-alpha01 enthält diese Commits.
Neue Funktion: Statistiken zur App-Startzeit
- Die erste Version von App-Start-Insights kann in Macrobenchmark aktiviert werden. (09fae38)
So aktivieren Sie die Funktion in einem Startup-Benchmark:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
Wenn Sie dann den Startup-Benchmark ausführen, wird der Trace analysiert, um nach häufigen Problemen zu suchen. Diese werden nach den Messwerten in der Studio-Testausgabe auf dem Benchmark-Tab ausgegeben, z. B.:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
Diese Funktion befindet sich noch in der Entwicklung. Wir arbeiten an Verbesserungen der Dokumentation und Erweiterbarkeit. Feedback ist willkommen.
Neue Funktionen
- Die Gradle-Property
androidx.baselineprofile.suppressWarningswurde hinzugefügt, um alle Warnungen zum Baseline-Profil zu unterdrücken. (314153a) - Microbench-Messwerte werden jetzt in Perfetto-Traces als Zähler angezeigt. (3214854)
- Es wurden experimentelle Skripts zum Deaktivieren von JIT (erfordert Root-/Laufzeitneustart) und zum Zurücksetzen des Geräteleistungs-/Teststatus hinzugefügt. Diese werden derzeit nicht als Gradle-Aufgaben veröffentlicht. (7c3732b)
- Es wurde ein Benchmark-Argument hinzugefügt, um Tests beim Ausführen auf einem Emulator zu überspringen. Wenn der
automaticGenerationDuring-Build aktiviert ist, wird durch Benchmarks auch die Generierung von Baseline-Profilen ausgelöst. Dies schlägt fehl, wenn Emulatoren verwendet werden. Mit dem neuen ArgumentskipBenchmarksOnEmulatorkönnen wir den Test stattdessen überspringen. (0c2ddcd) - Logik zum Aktivieren von Leistungsereignissen so ändern, dass sie auf API 23+ ausgeführt wird (2550048)
API-Änderungen
- Das vorhandene experimentelle
PerfettoConfig-Argument fürMacrobenchmarkRule.measureRepeated()wurde in das neueExperimentalConfig-Objekt verschoben.
Fehlerkorrekturen
- Anzahl der Wiederholungsversuche für
lockClocks.sherhöhen (99e9dac) - Erstellen Sie keine
nonMinified- und Benchmark-Build-Typen, wenn sie bereits vorhanden sind. Aufgrund eines Fehlers wurdennonMinified- und Benchmark-Build-Typen neu erstellt, auch wenn sie bereits vorhanden waren. (e75f0a5) - Ignoriere nicht endende Slices aus den
TraceSectionMetric-Ergebnissen. (a927d20) - Die Emulatorprüfung wurde verbessert, um das Präfix
sdk_zu berücksichtigen. (1587de8) - Nicht ausgeführte Pakete in
FrameTimingGfxInfoMetricals bereinigt behandeln. (35cc79c) - Das Problem, dass
androidx.benchmark.cpuEventCounterbeschädigte Werte für Ereignisse erzeugt, die keine Anweisungen sind, wurde behoben. (06edd59) - Der Fehler
resumeTiming/runWithTimingDisabledwurde behoben, um die Prioritätsreihenfolge der Messwerte zu berücksichtigen und die Auswirkungen des Pausierens/Fortsetzens von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität deutlich zu reduzieren. Wenn Sie beispielsweise CPU-Leistungszähler über das InstrumentierungsargumentcpuEventCounter.enableverwenden, wird „timeNs“ bei Pausen/Fortsetzungen nicht mehr wesentlich reduziert. (5de0968)
Version 1.3
Version 1.3.4
26. März 2025
androidx.benchmark:benchmark-*:1.3.4 ist veröffentlicht. Version 1.3.4 enthält diese Commits.
Fehlerkorrekturen
- Es wurden Inkompatibilitäten mit der Gradle-Projektisolierung im Benchmark Baseline Gradle-Plug-in behoben. (b/404523257)
Version 1.3.3
16. Oktober 2024
androidx.benchmark:benchmark-*:1.3.3 ist veröffentlicht. Version 1.3.3 enthält diese Commits.
Fehlerkorrekturen
- Fehler behoben:
CollectBaselineProfileTask, wenn das AVD-Gerät Leerzeichen enthält (Ia0225, b/371642809)
Version 1.3.2
2. Oktober 2024
androidx.benchmark:benchmark-*:1.3.2 ist veröffentlicht. Version 1.3.2 enthält diese Commits.
Fehlerkorrekturen
- Das Problem wurde behoben, dass Baseline Profile- oder Macrobenchmark-Ergebnisdateien nicht aus dem Baseline Profile Gradle-Plug-in abgerufen werden konnten. (I2f678, b/285187547)
Wenn Sie FTL verwenden möchten, wenden Sie das Plug-in auf das Baseline-Profilmodul im Plug-in-Block an:
plugins {
...
id("com.google.firebase.testlab")
}
Konfigurieren Sie dann Firebase Test Lab mit:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Außerdem muss das erstellte FTL-Gerät der Baseline-Profil-Erweiterung hinzugefügt werden:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Version 1.3.1
18. September 2024
androidx.benchmark:benchmark-*:1.3.1 ist veröffentlicht. Version 1.3.1 enthält diese Commits.
Fehlerkorrekturen
- Die Gradle-Eigenschaft
androidx.baselineprofile.suppressWarningswurde hinzugefügt, um alle Warnungen zum Baseline-Profil zu unterdrücken (I7c36e, b/349646646). - Das Baseline Profile Gradle-Plug-in wurde so korrigiert, dass es vorhandene
nonMinified…- undbenchmark…-Dateien verwendet, wenn sie von der App erstellt wurden, anstatt Wrapper zu erstellen. (Ia8934, b/361370179) - Der Fehler
java.lang.AssertionError: ERRORS (not suppressed): EMULATORwurde behoben, wennautomaticGenerationDuringBuildauf Emulatoren aktiviert ist. Mit dem neuen Argument wird der Test stattdessen übersprungen. (If3f51, b/355515798) - Microbenchmark-Minifizierung – Unterklassen von
org.junit.runner.notification.RunListenerin der Benchmark-Bibliothek ProGuard beibehalten (Ic8ed5, b/354264743) - Korrigieren Sie
TraceSectionMetric, um nicht endende Segmente zu ignorieren. Bisher wurde für diese ein Wert von -1 für die Dauer angenommen, z.B. bei der Summenbildung oder beim Ermitteln der Mindestdauer. (If74b7) - Es wurde ein Problem in
FrameTimingGfxInfoMetricbehoben, durch das das Starten der Messung zum Absturz führte, wenn der Prozess noch nicht ausgeführt wurde. (I6e412)
Version 1.3.0
21. August 2024
androidx.benchmark:benchmark-*:1.3.0 ist veröffentlicht. Version 1.3.0 enthält diese Commits.
Änderungen an Microbenchmarks seit Version 1.2.0
- Methodentracing ist in Microbenchmarks standardmäßig aktiviert, wenn sie auf den meisten Geräten ausgeführt werden.
- Die Methode wird nach den Messungen als separate Phase ausgeführt. So können sowohl genaue Messungen als auch Methodentraces aus einem einzelnen Benchmarklauf ausgegeben werden.
- Methodentracing in einigen Android-Betriebssystem- und ART-Versionen wirkt sich auf spätere Messphasen aus. In diesen Versionen ist Methodentracing standardmäßig deaktiviert und in der Studio-Ausgabe wird eine Warnung angezeigt.
- Benchmarks für den Hauptthread und ANR-Fehler
- Für Benchmarks für den UI-Thread (z.B. solche, die mit Compose-/View-UIs interagieren) wurde
measureRepeatedOnMainThreadhinzugefügt, um ANRs zu vermeiden, wenn sie viele Sekunden lang ausgeführt werden. - Methodentraces werden übersprungen, wenn erwartet wird, dass die ANR-Vermeidungsfrist überschritten wird. Setzen Sie
androidx.benchmark.profiling.skipWhenDurationRisksAnrauf „false“, um dieses Verhalten zu deaktivieren. Das wird für CI-Ausführungen nicht empfohlen, da ANR-Fehler bei langen CI-Ausführungen Probleme verursachen können.
- Für Benchmarks für den UI-Thread (z.B. solche, die mit Compose-/View-UIs interagieren) wurde
- Reduzierung
- Eingebettete ProGuard-Regeln zur Verbesserung von Microbenchmarking bei aktivierter Minimierung
- Für die Minimierung/R8 in einem Bibliotheksmodul ist AGP 8.3 erforderlich. Sie kann über
android.buildTypes.release.androidTest.enableMinificationin Ihrerbuild.gradleaktiviert werden. - Experimentelle
BlackHole.consume()API hinzugefügt, um das Entfernen von nicht verwendetem Code zu verhindern (If6812, b/286091643)
- Messwerte
- Experimentelle Funktion für CPU-Ereigniszähler (Messwerte aus
perf_event_open, für die auf den meisten Versionen der Plattform Root erforderlich ist), Zugriff überInstrumentationArgumentandroidx.benchmark.cpuEventCounter.enable(kann auftruefestgelegt werden) undandroidx.benchmark.cpuEventCounter.eventskann z. B. auf (Instructions,CpuCycles) festgelegt werden. Dies sollte auf einigen Userdebug-Emulatoren unterstützt werden, die Unterstützung wurde jedoch nicht auf allen verfügbaren Emulatoren getestet.
- Experimentelle Funktion für CPU-Ereigniszähler (Messwerte aus
Änderungen an MACRObenchmarks seit Version 1.2.0
- Überarbeitung des Methodentracing für Makrobenchmarks.
- Methodentraces sind jetzt auf die Dauer von
measureBlockbeschränkt und können mehrere Sitzungen erfassen, wenn der Prozess mehrmals gestartet wird. - Bisher funktionierte die Methodenverfolgung nur für
StartupMode.COLD-Benchmarks und erfasste nichts fürmeasureBlocks, bei denen der Zielprozess nicht neu gestartet wurde. - Methodentraces werden in Macrobenchmarks jetzt korrekt geleert, sodass Methodentraces auch auf langsameren Geräten vollständig erfasst und gültig sein sollten. (I6349a, b/329904950)
- Methodentraces sind jetzt auf die Dauer von
- ART-Profil während einzelner
warmUp-Wiederholungen korrekt sichern, wenn der Prozess beendet wird, damit dieCompilationMode.Partial(warmup=N)-Messungen genauer sind. (I17923) - Fehlermeldung bei der Übertragung von Drop-Shadern
- Der Fehlermeldung bei einem Shader-Broadcast-Fehler wurden Vorschläge zur Fehlerbehebung hinzugefügt.
- Fügen Sie zwei Instrumentierungsargumente hinzu, um das Verhalten beim Entfernen von Shadern zu überschreiben und so Abstürze beim Benchmarking von Apps ohne
ProfileInstaller1.3 zu umgehen:androidx.benchmark.dropShaders.enable=true/false: Kann verwendet werden, um das Entfernen von Shadern zu überspringen (auch das inStartupMode.Cold-Launches), insbesondere beim Benchmarking von Apps, die noch nicht ProfileInstaller 1.3 verwenden.androidx.benchmark.dropShaders.throwOnFailure=true/false: Kann verwendet werden, um Fehler beim Löschen von Shadern zu tolerieren, z. B. beim Benchmarking von Apps ohne ProfileInstaller 1.3 (I4f573)
- Es wurde eine experimentelle
MacrobenchmarkRule#measureRepeated-Variante hinzugefügt, die ein benutzerdefiniertesPerfettoConfigfür die vollständig angepasste Perfetto-Trace-Aufzeichnung verwendet. Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messwertklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384) - Brechen Sie Hintergrund-Dexopt-Jobs ab, bevor Sie einen Macrobenchmark ausführen, um Störungen zu reduzieren. (I989ed)
- Macrobenchmark wartet jetzt 1 Sekunde, bis die Zielanwendung ein ART-Profil leert (zuvor waren es 500 ms). (I85a50, b/316082056)
- Überarbeitung von TraceSectionMetric
- Hinweis: Die unten aufgeführten Änderungen an
TraceSectionMetrickönnen sich auf die Ausgaben bei der CI-Nutzung auswirken und zu Diskontinuitäten führen oder das Parsen unterbrechen. - „Summe“ ist jetzt der Standardwert, da dieser Messwert meistens für wiederholte Ereignisse verwendet wird und bei „Erster“ Daten in diesen Fällen verworfen würden.
- Die Funktion wurde so geändert, dass sie besser angepasst werden kann und mehr Modi verfügbar sind.
- Modusnamen sind jetzt in den Namen der Messwertausgabe eingebettet (in Studio und JSON)
- Unterstützt jetzt mit
Trace.{begin|end}AsyncSectionerstellte Segmente.
- Hinweis: Die unten aufgeführten Änderungen an
- Messwerte
- Stromversorgung –
PowerMetric.deviceSupportsHighPrecisionTracking,PowerMetric.deviceBatteryHasMinimumCharge()undPowerMetric.deviceSupportsPowerEnergy()hinzugefügt Metric.getResultwurde ingetMeasurementsumbenannt, um dem Rückgabetyp zu entsprechen.- Allen Fehlern bei der Start-Erkennung wurden die Labels „log.w“ / „exception“ hinzugefügt. Das aktuelle Verhalten ändert sich dadurch nicht. Einige Fehler werden also ausgegeben und bei anderen wird der Start stillschweigend nicht erkannt. Die Änderung soll lediglich für mehr Klarheit sorgen. Im Allgemeinen sind das die, die
Log.w()und keine Startmesswerte melden, bei denen Nicht-Frame-Ereignisse fehlen. Ausnahmen werden ausgelöst, wenn der Start erkannt wird, mit Ausnahme von Informationen zum Frame-Timing (aus UI-/RT-Slices). (Id240f, b/329145809) - Die
frameCount-Messung wurdeFrameTimingMetrichinzugefügt, um die Ermittlung von Szenarien zu erleichtern, in denen sich die Messungen ändern, weil sich die Anzahl der erstellten Frames geändert hat (neue Animationen hinzugefügt, Probleme mit der Ungültigkeit behoben). (I1e5aa) - Es wurde klargestellt, dass
frameOverrunMsder bevorzugte Messwert für das Tracking ist, wenn er in der Dokumentation verfügbar ist, und warum. (I18749, b/329478323) - Es wurde ein Problem behoben, bei dem nicht beendete Frames am Anfang und Ende des Traces zusammengefasst werden konnten, was fälschlicherweise als einzelner extrem langer Frame gemeldet wurde. (I39353, b/322232828)
- Der
FrameTimingMetric-Fehler wurde verbessert, wenn keine Frames erstellt werden. Außerdem wird immer ein Link zum Trace ausgegeben, wenn das Parsen von Messwerten fehlschlägt, um die Diagnose des Problems zu erleichtern. (I956b9) - Es wurde ein Absturz in
FrameTimingMetricbehoben, der beim Parsen der Frame-ID auftrat, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276) - Die Strenge der Prüfungen in
FrameMetricswurde gelockert und den Fehlermeldungen wurden weitere Details hinzugefügt. (Iadede)
- Stromversorgung –
Erfassung von Baseline-Profilen / Änderungen am Gradle-Plug-in seit Version 1.2.0
- Die maximal empfohlene Version von AGP wurde auf 9.0.0-alpha01 erhöht.
- Achten Sie darauf, dass die Aufgaben
mergeArtProfileundmergeStartupProfileimmer auf die Erstellung des Baseline-Profils warten. (I623d6, b/343086054) - Wenn ein Baseline-Profil erfolgreich generiert wird, wird eine Zusammenfassung der Änderungen ausgegeben (I824c8, b/269484510).
- DSL zum Deaktivieren von Warnungen hinzugefügt (Ic4deb, b/331237001)
- Problem behoben, damit Benchmarks generierte Baseline-Profile verwenden, wenn
automaticGenerationDuringBuilddeaktiviert ist (Ic144f, b/333024280) - Es wurden Fehler bei Überschreibungen von
BaselineProfile-Gradle-Plugin-Attributen behoben, um die Generierung von Baseline-Profilen und Benchmarking bei der Anpassung einesnonMinified- oder Benchmark-Build-Typs zu ermöglichen. (Ib8f05, b/324837887) - Korrektur für das Einbeziehen von Baseline-Profilen von Bibliotheken in AAR vor AGP 8.3.0-alpha15. (I1d2af, b/313992099)
- Die Ausgabedatei-URL für das Baseline- und das Startprofil wird am Ende der Generierungsaufgabe korrigiert. (I802e5, b/313976958)
Weitere wichtige Änderungen seit Version 1.2.0
- Trace-Erfassung
- EXITCODE 2-Fehler beim Starten von Perfetto wurde von einem Fehler zu einer protokollierten Warnung reduziert
- AIDL-Tracing standardmäßig in Benchmarks aktivieren(erfordert API 28) (Ia0af2, b/341852305)
- Standardmäßig Porter-Tag-Tracing in Benchmarks aktivieren. So werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
- Das Zeitlimit für den Start der Erfassung von Traces wurde erhöht, um Abstürze beim Starten des Tracings auf langsameren Geräten zu vermeiden (I98841, b/329145808).
- Die öffentlichen APIs
PerfettoTraceProcessor.Session.queryMetricsAPIs wurden mit JSON-, Textproto- und Proto-Binärvarianten (nicht decodiert) erweitert. Damit können Sie Messwerte abfragen, die inTraceProcessorintegriert sind (I54d7f, b/304038382). - Aktivieren Sie das Blockieren des Starts der Perfetto-Trace-Aufzeichnung, um das Risiko fehlender Daten am Anfang des Traces zu verringern. Wird nur auf API 33 und höher unterstützt. (Ie6e41, b/310760059)
- JSON-Ausgabe
- Im Benchmark-Kontext in der JSON-Ausgabe wurden zusätzliche Informationen hinzugefügt:
context.artMainlineVersion: Ganzzahlige Version des Art-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls-1)context.build.id– Entspricht android.os.Build.IDcontext.build.version.codename– Entspricht android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename: entspricht dem ersten Buchstaben des Codenamens der Vorabversion (einschließlich Release-Builds) (Ie5020)
- Der JSON-Ausgabe wurde die Liste
profilerOutputhinzugefügt, um die Verwendung von Profiling-Traces (z. B. Perfetto, Method-Traces) zu vereinfachen (I05ddd, b/332604449). - Es wurde eine Warnung hinzugefügt, wenn Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dies dazu führt, dass die JSON-Ausgabedateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
- Es wird eine Ausnahme ausgelöst, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder Nachbearbeiten von Dateien zu vermeiden. (I4a5ab)
- Im Benchmark-Kontext in der JSON-Ausgabe wurden zusätzliche Informationen hinzugefügt:
Version 1.3.0-rc01
7. August 2024
androidx.benchmark:benchmark-*:1.3.0-rc01 ist veröffentlicht. Version 1.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Fehlerbehebung:
androidx.benchmark.cpuEventCountergibt beschädigte Werte für Ereignisse ohne Anweisung zurück (I7386a, b/286306579) - Der Fehler
resumeTiming/runWithTimingDisabledwurde behoben, um die Prioritätsreihenfolge der Messwerte zu berücksichtigen und die Auswirkungen des Pausierens/Fortsetzens von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität deutlich zu verringern. Wenn Sie beispielsweise CPU-Leistungszähler über das InstrumentierungsargumentcpuEventCounter.enableverwenden, wird „timeNs“ bei Pausen/Fortsetzungen nicht mehr wesentlich reduziert. (I39c2e, b/286306579, b/307445225) - Die Wahrscheinlichkeit, dass die Stapelstichprobenerhebung aufgrund des Hard-Timeouts des Hauptthreads zu
measureRepeatedOnMainThreadführt, wird verringert, indem die Stapelstichprobenerhebung vom Hauptthread entfernt wird. (I487a8, b/342237318) - Die manuelle Beschreibung des Zugriffs auf neue Plattform-APIs wurde entfernt, da dies automatisch über die API-Modellierung erfolgt, wenn R8 mit AGP 7.3 oder höher verwendet wird (z. B. R8-Version 3.3), und für alle Builds, wenn AGP 8.1 oder höher verwendet wird (z. B. D8-Version 8.1). Clients, die AGP nicht verwenden, wird empfohlen, auf D8-Version 8.1 oder höher zu aktualisieren. Weitere Details findest du in diesem Artikel. (I9496c, b/345472586)
- Es wurde eine Prüfung der AGP-Version hinzugefügt, um den Paketnamen als INSTR-Argument zu senden. Vor AGP 8.4.0 konnte der Paketname der Ziel-App nicht über Instrumentierungsargumente an die Instrumentierungs-App gesendet werden. (0c72a3f)
Version 1.3.0-beta02
10. Juli 2024
androidx.benchmark:benchmark-*:1.3.0-beta02 ist veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- EXITCODE
2beim Starten von Perfetto ordnungsgemäß verarbeiten, um eine Warnung zu protokollieren, aber fortzufahren.
Version 1.3.0-beta01
12. Juni 2024
androidx.benchmark:benchmark-*:1.3.0-beta01 ist veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.
API-Änderungen
MethodTracing.affectsMeasurementOnThisDevicewurde zur besseren Einheitlichkeit inAFFECTS_MEASUREMENT_ON_THIS_DEVICEumbenannt. (I1bdfa)- Die experimentelle API
BlackHole.consume()wurde hinzugefügt, um das Entfernen von nicht erreichbarem Code in Microbenchmarks zu verhindern. (If6812, b/286091643) - Microbenchmark löst jetzt korrekt eine Ausnahme aus, damit die Methodenverfolgung die Messungen nicht beeinträchtigt. Das passiert auf bestimmten Geräten, wenn die Methodenverfolgung erzwungen wird (über Instrumentierungsargumente oder
MicrobenchmarkConfig) und wenn nach einer Methodenverfolgung eine Messung versucht wird. Auf betroffenen Geräten wird API 26–30 oder eine bestimmte ART-Mainline-Modulversion ausgeführt, die von dieser Beeinträchtigung betroffen ist. Sie können zur Laufzeit überProfilerConfig.MethodTracing.affectsMeasurementOnThisDeviceerkannt werden. (Iafb92, b/303660864)
Fehlerkorrekturen
- Die empfohlene maximale AGP-Version wurde auf 9.0.0-alpha01 erhöht. (I5bbb0)
- Dem Benchmark-Kontext wurde ein Kompilierungsmodus hinzugefügt (If5612, b/325512900)
- AIDL-Tracing standardmäßig aktivieren (erfordert API 28) (Ia0af2, b/341852305)
- Im Benchmark-Kontext in der JSON-Ausgabe wurden zusätzliche Informationen hinzugefügt:
context.artMainlineVersion– Ganzzahlversion des Art-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls -1)context.build.id– Entsprichtandroid.os.Build.IDcontext.build.version.codename– Entsprichtandroid.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename: entspricht dem ersten Buchstaben des Codenamens der Vorabversion (auch bei Release-Builds) (Ie5020)
- Behebt
StackSampling, umandroidx.benchmark.profiling.sampleDurationSecondszu berücksichtigen (Ib1d53) - Ändern Sie die Makro->gemeinsame Abhängigkeit in
api(), damit z.B.PerfettoTraceundPerfettoConfigeinfacher zu verwenden sind. (Icdae3, b/341851833) - Achten Sie darauf, dass die Aufgaben
mergeArtProfileundmergeStartupProfileimmer auf die Erstellung des Baseline-Profils warten. (I623d6, b/343086054) - Berücksichtigen Sie den Aktivierungsstatus der Variante, wenn Sie entscheiden, ob sie aktiviert werden soll. (I5d19e, b/343249144)
- Das standardmäßige Startzeitlimit für den Perfetto-Trace-Prozessor wurde erhöht. (I87e8c, b/329145808)
Version 1.3.0-alpha05
14. Mai 2024
androidx.benchmark:benchmark-*:1.3.0-alpha05 ist veröffentlicht. Version 1.3.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Deutlichere Ausnahme auslösen, wenn der Macrobenchmark-Messwert für alle Iterationen Nullwerte zurückgibt (Iab58f, b/314931695)
- Den ProGuard-Regeln für Microbenchmarks wurden zusätzliche Workaround-Regeln hinzugefügt, einschließlich Unterstützung für Listener-Regeln und andere beobachtete Warnungen / Fehler. (I14d8f, b/329126308, b/339085669)
- Methodentracing wird als separate Phase während eines Makrobenchmarks ausgeführt und wirkt sich nicht mehr auf die Messungen aus. (If9a50, b/285912360, b/336588271)
- Der Fehlermeldung zum fehlgeschlagenen Broadcast von Shader-Drops wurden zusätzliche Vorschläge zur Fehlerbehebung hinzugefügt. (I5efa6, b/325502725)
Version 1.3.0-alpha04
1. Mai 2024
androidx.benchmark:benchmark-*:1.3.0-alpha04 ist veröffentlicht. Version 1.3.0-alpha04 enthält diese Commits.
API-Änderungen
- Es wurde eine experimentelle
MacrobenchmarkRule#measureRepeated-Variante hinzugefügt, die ein benutzerdefiniertesPerfettoConfigfür die vollständig angepasste Perfetto-Trace-Aufzeichnung verwendet. Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messwertklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384) PowerMetric.deviceSupportsPowerEnergyzur besseren Verständlichkeit inPowerMetric.deviceSupportsHighPrecisionTrackingumbenennen (I5b82f)PowerMetric.deviceBatteryHasMinimumCharge()undPowerMetric.deviceSupportsPowerEnergy()wurden hinzugefügt, um das Ändern oder Überspringen von Benchmarks basierend auf der Fähigkeit des Geräts zur Leistungsmessung zu ermöglichen. (I6a591, b/322121218)
Fehlerkorrekturen
- Vergleich mit dem vorherigen Baseline-Profil hinzugefügt (I824c8, b/269484510)
- DSL zum Deaktivieren von Warnungen hinzugefügt (Ic4deb, b/331237001)
- Ausnahme in Info-Log geändert, wenn Benchmark-Varianten deaktiviert sind (I8a517, b/332772491)
- Es ist einfacher, Methodentraces für einen Macrobenchmark zu erfassen, da der Bereich auf die Dauer des eigentlichen
measureBlock()beschränkt ist. Bisher wurde die Messung beim Start des Zielprozesses gestartet und es wurden nur Kaltstarts unterstützt (Iee85a, b/300651094). - Abstürze vermeiden, wenn der Perfetto-Trace-Prozessor langsam startet (I98841, b/329145808)
Version 1.3.0-alpha03
17. April 2024
androidx.benchmark:benchmark-*:1.3.0-alpha03 ist veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.
Neue Funktionen
- Fügt öffentliche API-
PerfettoTraceProcessor.Session.queryMetrics-APIs mit JSON-, Textproto- und binären Proto-Varianten (nicht decodiert) hinzu. Damit können Sie in TraceProcessor integrierte Messwerte abfragen (I54d7f, b/304038382). profilerOutputwurde der JSON-Ausgabe hinzugefügt, um die Verarbeitung von Profiling-Traces (z.B. Perfetto, Method-Traces) zu vereinfachen. (I05ddd, b/332604449)- Dem Benchmark „Perfetto Config“ wurde ein Power-Tag hinzugefügt. So werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
- Das Argument „inst“
androidx.benchmark.profiling.skipWhenDurationRisksAnrwurde hinzugefügt. Es kann auf „false“ gesetzt werden, um zu verhindern, dass Methodentraces übersprungen werden, wenn die erwartete Dauer einen ANR-Fehler verursachen könnte. Es wird dringend empfohlen, dies in CI-Läufen zu vermeiden. - Das experimentelle „inst“-Argument
androidx.benchmark.profiling.perfCompare.enablewurde hinzugefügt. Wenn Sie es auf „true“ setzen, wird der Vergleichszeitpunkt zwischen Mess- und Profiling-Phasen ausgeführt. Nützlich, um beispielsweise den Overhead der Methodenverfolgung zu bewerten. (I61fb4, b/329146942)
API-Änderungen
TraceSectionMetric.Modewurde in eine versiegelte Klasse geändert, um zukünftige Erweiterungen zu ermöglichen, ohne dass exhaustive when-Anweisungen unterbrochen werden (I71f7b).TraceSectionMetric.Mode.Averageund.Countwurden hinzugefügt und die Argumente wurden neu angeordnet, sodass das häufigere Argument (Modus) weiter oben in der Argumentliste steht. Dadurch muss weniger oft der Parametername angegeben werden. (Ibf0b0, b/315830077, b/322167531)Metric.getResultwurde ingetMeasurementsumbenannt, um dem Rückgabetyp zu entsprechen (I42595)
Fehlerkorrekturen
- Problem behoben, damit Benchmarks generierte Baseline-Profile verwenden, wenn
automaticGenerationDuringBuilddeaktiviert ist (Ic144f, b/333024280) - Es wurden Fehler bei Überschreibungen von
BaselineProfile-Gradle-Plugin-Attributen behoben, um die Generierung von Baseline-Profilen und Benchmarking bei der Anpassung einesnonMinified- oder Benchmark-Build-Typs zu ermöglichen. (Ib8f05, b/324837887) - Methodentraces werden in Macrobenchmarks jetzt korrekt geleert, sodass Methodentraces auch auf langsameren Geräten vollständig erfasst und gültig sein sollten. (I6349a, b/329904950)
- Aktivieren Sie das Blockieren des Starts der Perfetto-Trace-Aufzeichnung, um das Risiko fehlender Daten am Anfang des Traces zu verringern. Wird nur auf API 33 und höher unterstützt. (Ie6e41, b/310760059)
- Es wurde eine Warnung hinzugefügt, wenn Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dies dazu führt, dass die JSON-Ausgabedateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
- Tausender-Trennzeichen „,“ (Komma) für Konsistenz in der Studio-Ausgabe erzwingen, Geräte-Locale ignorieren (I3e921, b/313496656)
TraceSectionMetricunterstützt jetzt mitTrace.{begin|end}AsyncSectionerstellte Segmente. (I91b32, b/300434906)- Allen Fehlern bei der Start-Erkennung wurden die Labels „log.w“ / „exception“ hinzugefügt. Das aktuelle Verhalten ändert sich dadurch nicht. Bei einigen Fehlern wird also eine Ausnahme ausgelöst, bei anderen wird der Start stillschweigend nicht erkannt. Die Änderung soll lediglich die Verständlichkeit verbessern. Im Allgemeinen sind das die, die
Log.w()und keine Startmesswerte melden, bei denen Nicht-Frame-Ereignisse fehlen. Ausnahmen werden ausgelöst, wenn der Start erkannt wird, mit Ausnahme von Informationen zum Frame-Timing (aus UI-/RT-Slices). (Id240f, b/329145809) - Brechen Sie Hintergrund-Dexopt-Jobs ab, bevor Sie einen Macrobenchmark ausführen, um Störungen zu reduzieren. (I989ed)
- Die
frameCount-Messung wurdeFrameTimingMetrichinzugefügt, um die Ermittlung von Szenarien zu erleichtern, in denen sich die Messungen ändern, weil sich die Anzahl der erstellten Frames geändert hat (neue Animationen hinzugefügt, Probleme mit der Ungültigkeit behoben). (I1e5aa) - Es wurde klargestellt, dass
frameOverrunMsder bevorzugte Messwert für das Tracking ist, wenn er in der Dokumentation verfügbar ist, und warum. (I18749, b/329478323)
Version 1.3.0-alpha02
20. März 2024
androidx.benchmark:benchmark-*:1.3.0-alpha02 ist veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.
Neue Funktionen
Experimentelle R8-Unterstützung in Microbenchmarks über eingebettete ProGuard-Regeln. Diese Unterstützung ist experimentell und erfordert AGP 8.3 für die Minimierung von Testmodulen für Bibliotheken. Verwenden Sie Folgendes, um die R8-Minimierung/Optimierung im
build.gradleIhres Benchmark-Moduls zu aktivieren. Dies sollte je nach Arbeitslast zu einer erheblichen Leistungssteigerung führen. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
Fehlerkorrekturen
- Die Warnung zum Methoden-Tracing wird jetzt in einer separaten Zeile von der Microbenchmark-Ausgabe angezeigt. (I0455c, b/328308833)
Version 1.3.0-alpha01
21. Februar 2024
androidx.benchmark:benchmark-*:1.3.0-alpha01 ist veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.
API-Änderungen
- Boolesche Parameter von
MicrobenchmarkConfigwurden umbenannt, um das unnötige Wort „should“ (sollte) zu vermeiden (Ia8f00, b/303387299) BenchmarkRule.measureRepeatedOnMainThreadwurde hinzugefügt, damit Benchmarks für den Hauptthread (z.B. für Views- oder Compose-UIs) keine ANRs auslösen, insbesondere bei großen Suiten in der CI. (I5c86d)FrameTimingGfxInfoMetricwurde hinzugefügt, eine experimentelle alternative Implementierung vonFrameTimingMetricmit Messungen, die direkt von der Plattform stammen und nicht aus dem Perfetto-Trace extrahiert werden. (I457cb, b/322232828)- Es wurde die Möglichkeit hinzugefügt, ein ART-Profil während einzelner
warmUp-Wiederholungen zu erstellen. (I17923) - Mehrere Änderungen an der
TraceSectionMetricAPI:Mode.MinundMode.Maxhinzufügen- Label-Argument hinzugefügt, um den Abschnittsnamen als Messwertlabel zu überschreiben
- Dem Output wurde der Modusname hinzugefügt, um die Bedeutung des Messwerts zu verdeutlichen.
- Der Standardwert wurde in „Summe“ geändert, da dieser Messwert meistens für wiederholte Ereignisse verwendet wird. Beachten Sie diese Änderungen bei der Verwendung von CI, da sie zu Diskontinuitäten führen oder das Parsen unterbrechen können. (Ic1e82, b/301892382, b/301955938)
Fehlerkorrekturen
- Verbesserte Fehlermeldung im Gradle-Plug-in für das Baseline-Profil, wenn das angegebene verwaltete Gerät nicht vorhanden ist (Idea2b, b/313803289)
- Korrektur für das Einbeziehen von Baseline-Profilen von Bibliotheken in AAR vor AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- Die Ausgabes-URL für das Baseline- und das Startup-Profil wird am Ende des Generierungsvorgangs korrigiert. (I802e5, b/313976958)
- Die Zeitüberschreitungen für Datenquellen wurden angepasst, um das Problem
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]zu beheben (I8dc7d, b/323601788). - Fügen Sie zwei Instrumentierungsargumente hinzu, um das Verhalten beim Entfernen von Shadern zu überschreiben und so Abstürze beim Benchmarking von Apps ohne
ProfileInstaller1.3 zu umgehen:androidx.benchmark.dropShaders.enable=true/false: Kann verwendet werden, um das Entfernen von Shadern zu überspringen (auch das inStartupMode.Cold-Launches), insbesondere beim Benchmarking von Apps, die noch nicht ProfileInstaller 1.3 verwenden.androidx.benchmark.dropShaders.throwOnFailure=true/false: Kann verwendet werden, um Fehler beim Löschen von Shadern zu tolerieren, z. B. beim Benchmarking von Apps ohne ProfileInstaller 1.3 (I4f573)
- Überspringen der Methodenverfolgung im UI-Thread, wenn sie voraussichtlich länger als einige Sekunden dauert, und Bereinigen der Methodenverfolgungen beim Auslösen von Ausnahmen. (I6e768)
- Es wird eine Ausnahme ausgelöst, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder Nachbearbeiten von Dateien zu vermeiden. (I4a5ab)
- Es wurde ein Problem behoben, bei dem nicht beendete Frames am Anfang und Ende des Traces zusammengefasst werden konnten, was fälschlicherweise als einzelner extrem langer Frame gemeldet wurde. (I39353, b/322232828)
- Verwenden Sie
--skip verificationauf API 30 und höher, wenn Sie ein Paket auf API 30 bis 33 neu installieren, um ART-Profile in Nutzer-Builds zu löschen. So lassen sich Play Protect-Warnungen umgehen, die auf einigen Geräteklassen zu Fehlern führen. (Ic9e36) - Verwenden Sie
am force-stop, um Apps zu beenden, wenn es sich nicht um eine System-App wie „System-UI“ oder „Launcher“ handelt. (I5e028) - Der Makrobenchmark wartet jetzt
1 second, bis die Zielanwendung ein ART-Profil leert (zuvor wurde500 msgewartet). (I85a50, b/316082056) - Der
FrameTimingMetric-Fehler wurde verbessert, wenn keine Frames erstellt werden. Außerdem wird immer ein Link zum Trace ausgegeben, wenn das Parsen von Messwerten fehlschlägt, um die Diagnose des Problems zu erleichtern. (I956b9) - Es wurde ein Absturz in
FrameTimingMetricbehoben, der beim Parsen der Frame-ID auftrat, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276) - Die Strenge der Prüfungen in
FrameMetricswurde gelockert und den Fehlermeldungen wurden weitere Details hinzugefügt. (Iadede)
Version 1.2
Version 1.2.4
17. April 2024
androidx.benchmark:benchmark-*:1.2.4 ist veröffentlicht. Version 1.2.4 enthält diese Commits.
Fehlerkorrekturen
- Behebt das Problem, dass das srcset des Baseline-Profils in Benchmark-Varianten nicht eingerichtet wird. Außerdem wird
automaticGenerationDuringBuildin Bibliotheken behoben, das eine zirkuläre Abhängigkeit verursacht. (I28ab7, b/333024280) - Verwenden Sie
am force-stop, um Apps zu beenden, wenn es sich nicht um eine System-App wie „System-UI“ oder „Launcher“ handelt. Dadurch wird das Problem behoben, dassStartupMode.COLD-Benchmarks aufgrund des Fehlers „Package $package must not be running prior to cold start!“ abstürzen, weil der Prozess nicht vollständig beendet wird. (I5e028)
Version 1.2.3
24. Januar 2024
androidx.benchmark:benchmark-*:1.2.3 ist veröffentlicht. Version 1.2.3 enthält diese Commits.
Fehlerkorrekturen
- Die Ausnahme wurde aus dem Baseline Profile Gradle-Plug-in entfernt, wenn die AGP-Version 8.3.0 oder höher ist.
- Korrektur für das Einbeziehen von Baseline-Profilen von Bibliotheken in AAR vor AGP 8.3.0-alpha15.
Version 1.2.2
1. Dezember 2023
androidx.benchmark:benchmark-*:1.2.2 ist veröffentlicht. Version 1.2.2 enthält diese Commits.
Baseline-Profile
- In den Ausführungsprotokollen wird der Ausgabedateipfad des Baseline-Profils als lokaler Datei-URI angezeigt (aosp/2843918, aosp/2853665, b/313976958).
Version 1.2.1
15. November 2023
androidx.benchmark:benchmark-*:1.2.1 ist veröffentlicht. Version 1.2.1 enthält diese Commits.
Neue Funktionen
- Verbesserte Fehlermeldung, wenn Nutzer Testvarianten deaktivieren (b/307478189)
- Es wurden Properties zur Unterstützung der Integration von AS-Testläufen hinzugefügt (b/309805233, b/309116324).
Version 1.2.0
18. Oktober 2023
androidx.benchmark:benchmark-*:1.2.0 ist veröffentlicht. Version 1.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.1.0
Baseline-Profile
- Das neue Baseline Profile Gradle Plugin automatisiert das Erfassen und Einbinden von Baseline-Profilen in Ihren Test- und Build-Workflow.
BaselineProfileRule.collectist jetzt stabil und eine optimierte und vereinfachte Version der vorherigen experimentellenBaselineProfileRule.collectBaselineProfileAPI.- Geben Sie einfach
packageNamean und steuern Sie Ihre App.
- Geben Sie einfach
- Bei Bibliotheken, die Baseline-Profile generieren, können Sie die generierten Regeln jetzt entweder im Code (
BaselineProfileRule.collect-Argument) oder noch einfacher im Gradle-Plug-in filtern. - Fehlerkorrekturen
- Die Erfassung von Baseline-Profilen unter Android U+ wurde korrigiert (Id1392, b/277645214).
Macrobenchmark
- Compilation
- Bei Macrobenchmark wird der Kompilierungsstatus jetzt für jede Kompilierung vollständig zurückgesetzt. Dazu muss das APK vor Android 14 neu installiert werden. Wenn Sie den Status (z. B. die Nutzeranmeldung) in den gemessenen Daten beibehalten möchten, wird die Verwendung von Android 14 oder höher dringend empfohlen.
- Sie können dies auch umgehen, indem Sie die App-Kompilierung separat steuern und die Kompilierung mit
CompilationMode.Ignore()oder einem Instrumentierungsargument überspringen.
Instrumentierungsargumente
- Unterstützung für das Instrumentierungsargument
androidx.benchmark.dryRunMode.enable(bereits in Microbenchmark verfügbar) für schnellere Validierungsläufe (z.B. beim Erstellen des Benchmarks oder in Presubmit) - Unterstützung für
androidx.benchmark.profiling.mode=StackSamplingundMethodTracing. androidx.benchmark.enabledRuleswurde hinzugefügt, um das Filtern von Baseline-Profilen im Vergleich zu Makrobenchmark-Regeltests zur Laufzeit zu ermöglichen.- Das Argument
androidx.benchmark.perfettoSdkTracing.enablewurde hinzugefügt, um das Tracing mit tracing-perfetto zu ermöglichen, z.B. das Tracing von Compose-Neuzusammenstellungen. Bei Verwendung mitStartupMode.COLDwird das Timing erheblich beeinträchtigt, da die Tracing-Bibliothek beim Start der App geladen und aktiviert wird.
- Unterstützung für das Instrumentierungsargument
Voraussetzungen
- Für Macrobenchmark ist jetzt
ProfileInstaller1.3.0 oder höher in der Ziel-App erforderlich, um das Erfassen / Zurücksetzen von Profilen und das Löschen des Shader-Cache zu ermöglichen.
- Für Macrobenchmark ist jetzt
Neue experimentelle Metric APIs
- Es wurde die experimentelle
TraceSectionMetrichinzugefügt, mit der einfache Zeitangaben austrace("") {}-Blöcken in Ihrer App extrahiert werden können. Alternativ können Sie TraceMetric verwenden, um die vollständigen Abfragefunktionen von PerfettoTraceProcessorzu nutzen. - Experimentelles
PowerMetriczum Erfassen von Informationen zum Stromverbrauch hinzugefügt - Experimentelle
MemoryCountersMetriczum Zählen von Seitenfehlern hinzugefügt - Die experimentelle
PerfettoTraceProcessorAPI wurde hinzugefügt. Sie wird intern verwendet, um Messwerte aus System-Traces (auch Perfetto-Traces genannt) zu extrahieren.
- Es wurde die experimentelle
Fehlerkorrekturen
- Abstürze beim Installieren oder Extrahieren von Profilen aus einer App, die aus mehreren APKs installiert wurde (z.B. aus einem App-Bundle), wurden behoben.
- Problem behoben:
FrameTimingMetricignoriert Frames mit inkonsistenten Frame-IDs (in der Regel Frames während Ripples unter API 31 und höher) (I747d2, b/279088460) - Fehler beim Parsen von Traces mit einer Größe von mehr als 64 MB behoben (Ief831, b/269949822)
- Fehler bei der Konfiguration des Betriebssystem-Images des Geräts (insbesondere des Emulators) für das Tracing oder die Kompilierung wurden genauer beschrieben.
- Akkustandsprüfung für Geräte ohne Akku überspringen (Mikro und Makro)
- Verbesserte Dateiausgabe mit deutlicheren Fehlermeldungen für ungültige Ausgabeverzeichnisse und sichereren Standardeinstellungen
- Verbesserte Stabilität von
StartupMode.COLDdurch konsistentes Löschen des Shader-Cache (auch überMacrobenchmarkScope.dropShaderCacheverfügbar) - Leanback-Fallback für
startActivityAndWaitwurde korrigiert.
Microbenchmark
- Funktionen
- Das Profiling wurde in eine separate Phase nach anderen Messwerten verschoben, sodass in einem Testlauf sowohl genaue Zeitmessungen als auch Profiling-Ergebnisse angezeigt werden können.
- Experimentelle APIs
- Die experimentelle
MicrobenchmarkConfigAPI zum Definieren benutzerdefinierter Messwerte und zum Konfigurieren von Tracing und Profiling wurde hinzugefügt. Kann verwendet werden, um Methoden-Traces oder Tracepoints zu erfassen. Beachten Sie jedoch den Mehraufwand für das Tracing. - Es wurden experimentelle APIs zum separaten Steuern von
BenchmarkStateundBenchmarkRuleohne JUnit hinzugefügt. - Es wurde ein experimenteller
PerfettoTrace-Datensatz hinzugefügt, um das Erfassen von Perfetto-Traces mit benutzerdefinierter Konfiguration getrennt von Benchmark-APIs zu ermöglichen.
- Die experimentelle
- Fehlerkorrekturen
- Problemumgehung für fehlende führende Leerzeichen in der Benchmark-Ausgabe von Android Studio.
- Ein Problem wurde behoben, bei dem Warnungen in der Benchmark-Ausgabe von Android Studio nicht ausgegeben wurden.
- Der
SampledProfiling-Absturz unter Android 13 (API 33) und höher wurde behoben. - Die Leistung von
dryRunModewurde erheblich verbessert, daIsolationActivityund Perfetto-Tracing übersprungen werden. Der Probelaufmodus ist auf älteren Betriebssystemversionen bis zu zehnmal schneller.
Version 1.2.0-rc02
6. Oktober 2023
androidx.benchmark:benchmark-*:1.2.0-rc02 ist veröffentlicht. Version 1.2.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Die Ausgabe der Benchmark-Datei wurde korrigiert, sodass das Kopieren von
BaselineProfile-Plug-in-Dateien nicht mehr fehlschlägt. Dateien wurden generiert und vom Gerät kopiert, aber so umbenannt, dass das Gradle-Plug-in sie nicht sehen konnte. (I8dbcc, b/303034735, b/296453339) - Die Fehlermeldungen beim Laden von
tracing-perfettobeim Einfügen aus dem Makrobenchmark-Modul in die Zielanwendung wurden präzisiert.
Version 1.2.0-rc01
20. September 2023
androidx.benchmark:benchmark-*:1.2.0-rc01 ist veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Wenn die Initialisierung des Perfetto SDK-Tracing in einem Benchmark fehlschlägt, wird jetzt eine Ausnahme mit Anweisungen zur Fehlerbehebung ausgelöst. (I6c878, b/286228781)
- OOM-Absturz beim Konvertieren von ART-Methoden-Traces in das Perfetto-Format behoben. (I106bd, b/296905344)
- (Macrobenchmark) Das Label für das Methoden-Tracing wurde bei der Verlinkung in der Studio-Testausgabe präzisiert und die Dateinamen für das Methoden-Tracing wurden so korrigiert, dass sie auf dem Gerät/Host eindeutig sind. Sie werden also nicht überschrieben, wenn mehrere Benchmarks ausgeführt werden. (I08e65, b/285912360)
- Sorgt dafür, dass das Gerät aktiv ist, wenn ein Baseline-Profil erfasst wird. (I503fc)
Version 1.2.0-beta05
30. August 2023
androidx.benchmark:benchmark-*:1.2.0-beta05 ist veröffentlicht. Version 1.2.0-beta05 enthält diese Commits.
Neue Funktionen
- Das Baseline 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 ist veröffentlicht. Version 1.2.0-beta04 enthält diese Commits.
Neue Funktionen
- Das Baseline Profiles-Gradle-Plug-in unterstützt jetzt das Android-Gradle-Plug-in 8.3. (aosp/2715214)
Fehlerkorrekturen
- Fehler beim Schreiben, Verschieben und Abrufen von Dateien (insbesondere von parametrisierten Tests) werden behoben, indem Ausgabedateinamen weiter bereinigt werden und „=“ und „:“ in Ausgabedateinamen vermieden werden. (I759d8)
Version 1.2.0-beta03
9. August 2023
androidx.benchmark:benchmark-*:1.2.0-beta03 ist veröffentlicht. Version 1.2.0-beta03 enthält diese Commits.
API-Änderungen
- Argument hinzugefügt, um
TraceSectionMetricstandardmäßig nur auf das Zielpaket zu filtern (Ia219b, b/292208786)
Fehlerkorrekturen
- Das Instrumentierungsargument
fullTracing.enablewurde inperfettoSdkTracing.enableumbenannt, um die Konsistenz mit dem Artefaktnamen und anderen Referenzen zu wahren.fullTracing.enablefunktioniert weiterhin als Fallback. (I7cc00) - Interne Benchmark-Bibliothek-Tracepoints (einschließlich Microbenchmark-Schleifen-/Phasen-Tracing) werden jetzt im System-Trace-Viewer von Studio angezeigt und in Perfetto unter dem richtigen Prozess verschachtelt. (I6b2e7, b/293510459)
- Der Fehler „NOT-PROFILEABLE“ für Makrobenchmarks wurde für API 31 und höher entfernt. Die Prüfung auf „profileable“ wird auf gerooteten Geräten mit den Builds „eng“ und „userdebug“ übersprungen. (I2abac, b/291722507)
- Wenn Sie Dex-Layoutoptimierungen verwenden, werden Regeln für Startprofile jetzt auch als Regeln für Baseline-Profile betrachtet. (aosp/2684246, b/293889189)
Version 1.2.0-beta02
26. Juli 2023
androidx.benchmark:benchmark-*:1.2.0-beta02 ist veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.
API-Änderungen
- Es wurden experimentelle APIs für benutzerdefinierte Microbenchmark-Messwerte und -Konfigurationen (z.B. Profiler und Tracing) hinzugefügt. (I86101, b/291820856)
Fehlerkorrekturen
- Fehler im Makrobenchmark melden, wenn das Betriebssystem für das Tracing falsch konfiguriert ist. Dies wurde kürzlich in API 26/28 ARM64-Emulatoren behoben. (I0a328, b/282191686)
- Es wurden Details zum Fehler beim Zurücksetzen der Kompilierung hinzugefügt, um ein Update des Emulators vorzuschlagen, da dieses Problem in einigen Emulatoren kürzlich behoben wurde. (I8c815, b/282191686)
- Machen Sie
androidx.test.uiautomator:uiautomator:2.2.0zu einerapi- anstelle einerimplementation-Abhängigkeit. (I1981e)
Version 1.2.0-beta01
18. Juli 2023
androidx.benchmark:benchmark-*:1.2.0-beta01 ist veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Warnungen werden in der Benchmark-Ausgabe in Studio manchmal unterdrückt. Außerdem werden führende Leerzeichen aus der Benchmark-Ausgabe nicht in Studio angezeigt. (Ia61d0, b/227205461, b/286306579, b/285912360)
- Kommentar für
FrameTimingMetricwurde korrigiert. Der Untermesswert heißtframeDurationCpuMs. (Ib097f, b/288830934).
Version 1.2.0-alpha16
21. Juni 2023
androidx.benchmark:benchmark-*:1.2.0-alpha16 ist veröffentlicht. Version 1.2.0-alpha16 enthält diese Commits.
API-Änderungen
- Die
BaselineProfileRule.collectBaselineProfile()API wurde inBaselineProfileRule.collect()umbenannt. (I4b665)
Fehlerkorrekturen
- Unterstützung von Makrobenchmarks für
androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360) - Die Profilerstellung für Microbenchmarks wurde in eine separate Phase verschoben. Sie erfolgt also nach der Messung und ersetzt sie nicht.
MethodTracing-Trace-Abschnitte sind jetzt auch im erfassten Perfetto-Trace enthalten, sofern vorhanden. (I9f657, b/285014599) - Zählen von Messungen für
TraceSectionMetricmitMode.Sumhinzufügen (Ic121a, b/264398606)
Version 1.2.0-alpha15
7. Juni 2023
androidx.benchmark:benchmark-*:1.2.0-alpha15 ist veröffentlicht. Version 1.2.0-alpha15 enthält diese Commits.
Neue Funktionen
- Es wurde ein experimentelles
MemoryUsageMetriczum Erfassen der Speichernutzung einer Zielanwendung hinzugefügt. (I56453, b/133147125, b/281749311) - Unterstützung für vollständig benutzerdefinierte Perfetto-Konfigurationen mit
PerfettoTrace.recordhinzugefügt (If9d75, b/280460183) - Es wurde eine Property hinzugefügt, mit der die Generierung von Baseline-Profilen übersprungen werden kann. Verwendung:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)
API-Änderungen
- Mit der
collectBaselineProfileAPI werden immer stabile Baseline-Profile generiert. DiecollectStableBaselineProfileAPI wurde entfernt. Verwenden Sie stattdessencollectBaselineProfile. (I17262, b/281078707) - Das
filterPredicate-Argument vonBaselineProfileRulewurde in „nicht null“ geändert. Es hat einen entsprechenden Standardwert, damit das Standardfilterverhalten in der Dokumentation klarer ist. (I3816e)
Fehlerkorrekturen
- Deaktivieren Sie
IsolationActivityund Perfetto-Tracing indryRunMode, um die Leistung deutlich zu verbessern, da diese den Großteil der Laufzeit ausmachten. (Ie4f7d) - Unterstützung für das Sampling von Callstacks in Macrobenchmarks mit den Instrumentierungstestargumenten
androidx.benchmark.profiling.mode=StackSamplingundandroidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489) - Behebt einen Absturz beim Ablegen von Shadern unter Android U (API 34) sowie auf Emulatoren. (I031ca, b/274314544)
Version 1.2.0-alpha14
3. Mai 2023
androidx.benchmark:benchmark-*:1.2.0-alpha14 ist veröffentlicht. Version 1.2.0-alpha14 enthält diese Commits.
Fehlerkorrekturen
- Beheben Sie das Problem, dass
FrameTimingMetricFrames mit inkonsistenten Frame-IDs ignoriert. Dies führte dazu, dass bei einigen Animationen auf aktuellen Plattformversionen (API 31+) viele Frames ignoriert wurden, währendRenderThreadanimiert wurde (z.B. bei einem Rippling-Effekt). (I747d2, b/279088460) - Die Verarbeitung von Traces, die größer als 64 MB sind, wurde korrigiert. (Ief831, b/269949822)
- Die Generierung von Baseline-Profilen auf Android U schlug fehl, weil die Ausgabe des Befehls
pm dump-profilesanders war. (Id1392, b/277645214) - Das Script zum Sperren des GPU-Takts wurde korrigiert, damit Strings korrekt verglichen werden (I53e54, b/213935715).
Version 1.2.0-alpha13
5. April 2023
androidx.benchmark:benchmark-*:1.2.0-alpha13 ist veröffentlicht. Version 1.2.0-alpha13 enthält diese Commits.
API-Änderungen
- Beim Generieren von Baseline-Profilen wurde ein Parameter für den Profiltyp hinzugefügt, um die bevorstehende Funktion für Startprofile zu unterstützen (Ie20d7, b/275093123).
- Es wurde eine neue experimentelle
TraceMetricAPI hinzugefügt, mit der sich vollständig benutzerdefinierte Messwerte auf Grundlage des Inhalts eines Perfetto-Traces definieren lassen. (I4ce31, b/219851406) - Fügen Sie einen experimentellen Messwert hinzu, um die Anzahl der Seitenfehler während eines Benchmarks zu ermitteln. (I48db0)
Version 1.2.0-alpha12
22. März 2023
androidx.benchmark:benchmark-*:1.2.0-alpha12 ist veröffentlicht. Version 1.2.0-alpha12 enthält diese Commits.
Neue Funktionen
- Das neue Gradle-Plug-in für das Baseline-Profil ist in der Alphaversion verfügbar. Damit lässt sich ein Baseline-Profil einfacher erstellen und der Entwickler-Workflow wird vereinfacht.
API-Änderungen
- Der Perfetto-Tracing-Support für API 21 und 22 wurde entfernt. Das betrifft sowohl Microbenchmarks als auch die experimentellen
PerfettoTrace-APIs. Vor dieser Version warenUiAutomation-Verbindungen auf einigen Geräten nicht zuverlässig. (I78e8c) - Es wurde eine öffentliche experimentelle API für
PerfettoTraceProcessorhinzugefügt, mit der sich Trace-Inhalte parsen lassen. Dies ist ein Schritt hin zu vollständig benutzerdefinierten Messwerten, die auf Perfetto-Tracedaten basieren. (I2659e, b/219851406)
Version 1.2.0-alpha11
8. März 2023
androidx.benchmark:benchmark-*:1.2.0-alpha11 ist veröffentlicht. Version 1.2.0-alpha11 enthält diese Commits.
Fehlerkorrekturen
- Abstürze in
MacrobenchmarkRuleundBaselineProfileRulebeim Neuinstallieren oder Extrahieren von Profilen aus einem App-Bundle mit mehreren APKs wurden behoben. (I0d8c8, b/270587281)
Version 1.2.0-alpha10
22. Februar 2023
androidx.benchmark:benchmark-*:1.2.0-alpha10 ist veröffentlicht. Version 1.2.0-alpha10 enthält diese Commits.
Neue Funktionen
- Unter Android 14+ werden Zielanwendungen in Macrobenchmark nicht mehr neu installiert, um den Kompilierungsstatus zurückzusetzen. Das ist dank einer neuen Plattformfunktion möglich. Bisher war es erforderlich, ein gerootetes Gerät zu haben oder damit umzugehen, dass der gesamte Anwendungsstatus (z.B. Nutzeranmeldung) vor jedem Benchmark entfernt wurde. (I9b08c, b/249143766)
Fehlerkorrekturen
- Der Fehler, dass
DryRunModeaufgrund des Überspringens der Kompilierung bei einem leeren Profil abstürzt, wurde behoben. Stattdessen wird eine einzelne Iteration ausgeführt und das Profil extrahiert, um sicherzustellen, dass etwas erfasst wird. (I2f05d, b/266403227) - Der
PowerMetric-Absturz beim Prüfen des Vorhandenseins von Powerstats auf alten API-Ebenen wurde behoben. (5faaf9, b/268253898)
Version 1.2.0-alpha09
11. Januar 2023
androidx.benchmark:benchmark-*:1.2.0-alpha09 ist veröffentlicht. Version 1.2.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Es ist jetzt möglich,
Nonean das Instrumentierungsargumentandroidx.benchmark.enabledRuleszu übergeben, um die Generierung aller Benchmarks / Baseline-Profile zu deaktivieren. (I3d7fd, b/258671856) - Problem mit der
PerfettoTrace-Erfassung in App-Modulen (d.h. Test-APKs ohne Selbstinstrumentierung) behoben (I12cfc) - Die Reihenfolge der ADB-Pull-Argumente für das Baseline-Profil in der Studio-Ausgabe wurde korrigiert (I958d1, b/261781624).
- Der Arm-Emulator mit API 33 wird jetzt korrekt als solcher erkannt, wenn versucht wird, einen Makrobenchmark auszuführen, und die Warnung wird korrekt ausgegeben. (69133b,b/262209591)
- Akkustandsprüfung auf Geräten ohne Akku in Macrobenchmark überspringen (fe4114, b/232448937)
Version 1.2.0-alpha08
7. Dezember 2022
androidx.benchmark:benchmark-*:1.2.0-alpha08 ist veröffentlicht. Version 1.2.0-alpha08 enthält diese Commits.
API-Änderungen
- Die experimentellen neuen APIs
PerfettoTrace.record {}undPerfettoTraceRulewurden hinzugefügt, um Perfetto-Traces (auch als System-Traces bezeichnet) als Teil eines Tests zu erfassen und das Testverhalten und die Leistung zu untersuchen. (I3ba16) BaselineProfileRuleakzeptiert jetzt ein Filterprädikat anstelle einer Liste von Paketpräfixen. So hat der Test die vollständige Kontrolle über die Filterung. (I93240)- Eine experimentelle API
BaselineProfileRule.collectStableBaselineProfilewurde hinzugefügt, die wartet, bis ein Baseline-Profil für N Iterationen stabil ist. (I923f3) - Es wurde die Möglichkeit hinzugefügt, beim Generieren von Baseline-Profilen mit
BaselineProfileRuleein Präfix für den Ausgabedateinamen anzugeben. (I7b59f, b/260318655)
Fehlerkorrekturen
- Die Sicherheit beim Schreiben von Dateiausgaben wurde verbessert. Dadurch sollte verhindert werden, dass Ausgabedateien nicht geschrieben oder angehängt werden, insbesondere bei API 21/22. (If8c44, b/227510293)
- Korrigieren Sie die
simpleperf-Trace-Ausgabe, um die Datei richtig zu erstellen und zu platzieren. Dadurch sollten auch allgemein Probleme behoben werden, bei denen eine Datei nicht von Gradle abgerufen wird. (I12a1c, b/259424099) - Die Fehlermeldung von „profileinstaller“, die ausgegeben wird, wenn „profileinstaller“ zu alt ist, wurde verbessert. Es wird jetzt darauf hingewiesen, dass die Version von profileinstaller (1.2.1) für die Messung von Baseline-Profilen auf API 31 bis 33 aktualisiert werden muss, anstatt dass sie nicht unterstützt wird. (Ia517f, b/253519888)
- Es wurden mehrere Fehler bei Shellbefehlen behoben, die durch die Fehlermeldung „Print needed API <=23“ verursacht wurden, darunter Fehler bei der Einrichtung des binären Perfetto-Capture-Tools und Fehler beim Erfassen von Traces (Ib6b87, b/258863685).
- Generierte Profilregeln werden automatisch sortiert, um die Anzahl der Änderungen zu minimieren, wenn sie sich im Laufe der Zeit ändern (beim Einchecken von Profilregeln in die Quellcodeverwaltung). (Ie2509)
- Absturz auf nicht gerooteten Builds unter Android 13 (API 33) mit der Meldung
Expected no stderr from echo 3 > /proc/sys/vm/drop_cachesbehoben (I6c245, b/259508183)
Bekannte Probleme
- MacrobenchmarkScope.dropShaderCache() stürzt möglicherweise aufgrund einer fehlenden Broadcast-Registrierung im Manifest von ProfileInstaller ab, die noch nicht veröffentlicht wurde. (I5c728, b/258619948) Um das Problem in profileinstaller:1.3.0-alpha02 zu umgehen, fügen Sie der AndroidManifest.xml-Datei Ihrer Anwendung (nicht Ihres Benchmarks) Folgendes hinzu:
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Version 1.2.0-alpha07
9. November 2022
androidx.benchmark:benchmark-*:1.2.0-alpha07 ist veröffentlicht. Version 1.2.0-alpha07 enthält diese Commits.
API-Änderungen
- Fügt die
PowerMetricAPI zum Messen von Energie und Leistung in Macrobenchmarks hinzu. (Ife601, b/220183779) - Es wurde ein Fehler behoben, durch den der Shader-Cache nicht gelöscht wurde, wenn
MacrobenchmarkScope.dropShaderCache()festgelegt war. Dadurch werden etwa 20 ms Rauschen ausStartupMode.COLD-Benchmarks entfernt, da Shader jetzt in jedem Durchlauf konsistent gelöscht werden. Bisher wurden bei derPartial-Kompilierung mit Warm-up-Iterationen fälschlicherweise schnelle Zahlen gemeldet, da das Shader-Caching eher während des Warm-ups erfolgte. Für diesen Fix ist entweder ein gerootetes Gerät oder die Verwendung vonprofileinstaller:1.3.0-alpha02in der Ziel-App erforderlich. Informationen zu den API-Änderungen derProfileInstaller-Bibliothek finden Sie auf der Seite ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) TraceSectionMode("label", Mode.Sum)wurde hinzugefügt, um die Gesamtdauer für mehrere Trace-Abschnitte mit demselben Label zu messen. Beispielsweise wird mitTraceSectionMetric("inflate", Mode.Sum)ein MesswertinflateMsfür die Gesamtzeit in einem Makrobenchmark gemeldet, die für die Inflation aufgewendet wurde. Außerdem wurde die Anforderung für API 29 entfernt, daTraceSectionMetricin Verbindung mitandroidx.tracing.Traceauch bei niedrigeren API-Levels funktioniert, wennforceEnableAppTracingin der Ziel-App verwendet wird. (Id7b68, b/231455742)
Fehlerkorrekturen
- Die Sicherheit aller internen Shell-Befehle wurde verbessert, indem alle Ausgaben/Fehler validiert werden. (I5984d, b/255402908, b/253094958)
- Geben Sie das Gerät im
adb pull-Befehl des Baseline-Profils an, damit der Pull-Befehl einfach kopiert werden kann, wenn mehrere Geräte verbunden sind (bis zu einem Emulator). (I6ac6c, b/223359380) - Füge einen Fehler hinzu, wenn die APK für den Macrobenchmark-Test nicht als selbstinstrumentierend eingerichtet ist. Dieser Fehler verhindert das Macrobenchmarking im Prozess der Ziel-App. Während des Prozesses kann die Macrobenchmark die App nicht kompilieren, beenden oder kalt starten und auch nicht ihre eigenen Berechtigungen steuern (I4279b).
- Ein Problem in
measureRepeated()wurde behoben, bei dem der Zielprozess nachsetupBlocknicht durchStartupMode.COLDbeendet wurde. WennsetupBlockjetzt mit der App interagiert, wird der App-Prozess nicht weiter ausgeführt und es kommt zu einer ungültigen Kaltstartmessung. (I8ebb7)
Version 1.2.0-alpha06
24. Oktober 2022
androidx.benchmark:benchmark-*:1.2.0-alpha06 ist veröffentlicht. Version 1.2.0-alpha06 enthält diese Commits.
API-Änderungen
- Für
BaselineProfileRuleist unter Android 13 (API 33) kein Root mehr erforderlich und die Funktion ist nicht mehr experimentell. (Ie0a7d, b/250083467, b/253094958)- Durch diese Änderung wird auch behoben, wie Profile einer App auf nicht gerooteten Geräten auf die Festplatte geschrieben werden. Dazu muss jedoch die profileinstaller-Abhängigkeit der Ziel-App aktualisiert werden.
- Wenn Sie
BaselineProfileRuleoderCompilationMode.Partial(warmupIterations)auf einem Gerät ohne Root-Zugriff verwenden möchten, müssen Sie auch Ihre Ziel-App aktualisieren, damit sieandroidx.profileinstaller.profileinstaller:1.3.0-alpha01verwendet. Dadurch wird das Profil korrekt auf die Festplatte geschrieben, sodass es kompiliert/extrahiert werden kann.
Fehlerkorrekturen
- Behebt den
SampledProfiling-Absturz unter API 33 und höher. (I40743, b/236109374)
Version 1.2.0-alpha05
5. Oktober 2022
androidx.benchmark:benchmark-*:1.2.0-alpha05 ist veröffentlicht. Version 1.2.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Problem mit der Aufschlüsselung von Frames im Studio-System-Trace-Viewer für Benchmark-Traces behoben (I3f3ae, b/239677443)
FrameTimingMetrickorrigieren, damitFrameOverrunAPI 31 anstelle von API 29 erfordert (I716dd, b/220702554)- Legen Sie die Iteration in
BaselineProfileRulefest und lösen Sie eine Ausnahme aus, wenn das Zielpaket nicht installiert ist (wurde bereits für MacrobenchmarkRule durchgeführt). (Ic09a3, b/227991471)
Version 1.2.0-alpha04
21. September 2022
androidx.benchmark:benchmark-*:1.2.0-alpha04 ist veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.
Neue Funktionen
Unterstützung für das
dryRunMode.enable-Instrumentierungsargument für Makrobenchmarks (bereits in Mikrobenchmarks verfügbar) hinzugefügt, um die lokale Entwicklung zu beschleunigen und die App-Automatisierung zu validieren (z.B. in Presubmit). Dadurch wird die Anzahl der Iterationen auf 1 festgelegt, die Kompilierung übersprungen, alle Konfigurationsfehler unterdrückt und die Ausgabe der Datei „measurement .json“ deaktiviert. (Ib51b4, b/175149857)In der Gradle-Befehlszeile:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=trueIn build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem
StartupTimingMetricnicht mehr erfordert, dass gemessene Aktivitäten überMacrobenchmarkScope.startActivityAndWait()gestartet werden. Das bedeutet, dass der Messwert Starts z.B. über Benachrichtigungen,Context.startActivity(), In-App-Aktivitäten oder Shell-Befehle erfassen kann. (Ia2de6, b/245414235) - Es wurde ein Fehler behoben, bei dem
startActivityAndWaitein Zeitlimit überschritt, weil es auf Emulatoren auf den Abschluss des Starts wartete. Dies wurde behoben, indem die Strenge der Frame-Erkennung verringert wurde. (Ibe2c6, b/244594339, b/228946895)
Version 1.2.0-alpha03
7. September 2022
androidx.benchmark:benchmark-*:1.2.0-alpha03 ist veröffentlicht. Version 1.2.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es wurden experimentelle APIs für die unabhängige Verwendung von
BenchmarkStatehinzugefügt, getrennt vonBenchmarkRule/JUnit4. (Id478f, b/228489614)
Fehlerkorrekturen
- Leanback-Fallback für
startActivityAndWaithinzugefügt. (01ed77, b/242899915)
Version 1.2.0-alpha02
24. August 2022
androidx.benchmark:benchmark-*:1.2.0-alpha02 ist veröffentlicht. Version 1.2.0-alpha02 enthält diese Commits.
API-Änderungen
- Standardmäßig wird
am force stopfürMacrobenchmarkScope.killProcess()verwendet, auch wenn das Gerät gerootet ist, außer bei der Erstellung des Baseline-Profils. Dies kann mit einem optionalen booleschen Argument überschrieben werden. (02cce9, b/241214097)
Fehlerkorrekturen
- Unterstützung der Generierung von Basisprofilen für System-Apps. (I900b8, b/241214097)
- Unterstützung für das Prüfen von ODPM-Leistungsmesswerten auf nicht gerooteten Geräten. (a38c78, b/229623230)
Version 1.2.0-alpha01
27. Juli 2022
androidx.benchmark:benchmark-*:1.2.0-alpha01 ist veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.
Neue Funktionen
- Neue Komponente „tracing-perfetto-common“, mit der Tools die Perfetto SDK-Ablaufverfolgung in einer App aktivieren können, die sie verfügbar macht (I2cc7f)
Das Instrumentierungsargument
androidx.benchmark.enabledRuleswurde hinzugefügt, um Makrobenchmark-Ausführungen nach Benchmarks oder nur nach der Generierung von Baseline-Profilen zu filtern. Übergeben Sie „Macrobenchmark“ oder „BaselineProfile“, um nur einen Testtyp auszuführen, z.B. wenn Sie nurBaselineProfilesauf einem Emulator generieren. Durch Kommas getrennte Liste wird ebenfalls unterstützt. (I756b7, b/230371561)Beispiel: build.gradle-Datei für Makrobenchmarks:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }Oder über die Gradle-Befehlszeile:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
API-Änderungen
- Es wurde ein neues
PowerMetriczum Messen von Energie- und Leistungsaufgaben in Benchmarks hinzugefügt. (I9f39b, b/220183779) - Ein neuer Kompilierungsmodus
CompilationMode.Ignorewurde hinzugefügt, mit dem das Zurücksetzen und Kompilieren von Profilen übersprungen werden kann. (Ibbcf8, b/230453509) BaselineProfileRule#collectBaselineProfilewurde ein neuer Parameter hinzugefügt, um die Ausgabedatei nach Paketnamen zu filtern (If7338, b/220146561)- Ermöglicht es Entwicklern, das Gerät zu entladen, um den Stromverbrauch zu messen. (I6a6cb)
- Es wurde die Möglichkeit hinzugefügt, den Shader-Cache in
MacrobenchmarkScopezu leeren. (I32122) - Ermöglicht es Entwicklern, die Anzeige von Messwerttypen und detaillierten gewünschten Subsystemkategorien zu konfigurieren. (I810c9)
- Bisher wurde im Benchmark eine
UnsupportedOperationExceptionausgegeben, wenn er auf einem nicht unterstützten Gerät ausgeführt wurde. UOE tritt jetzt nur noch auf, wenn der Messwert auf dem nicht unterstützten Gerät verwendet wird (z. B.PowerMetric.configure). (I5cf20, b/227229375) TotalPowerMetricundTotalEnergyMetricwurden hinzugefügt, um die Gesamtleistung und ‑energie in jeder Systemkategorie in Makro-Benchmarks zu messen. (I3b26b, b/224557371)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem kompilierte Methoden zwischen den einzelnen Makrobenchmarks in nicht gerooteten Builds nicht richtig zurückgesetzt wurden. Leider muss die APK-Datei bei jeder Iteration neu installiert werden, wodurch die Anwendungsdaten für jeden Makrobenchmark gelöscht werden. (I31c74, b/230665435)
- Absturz bei der Aufzeichnung von Traces auf API 21/22 behoben (If7fd6, b/227509388, b/227510293, b/227512788)
- Die Erkennung des Abschlusses von Aktivitätsstarts wurde überarbeitet, um die Ausnahme „Unable to read any metrics“ (Messwerte können nicht gelesen werden) in Makrobenchmarks beim Start zu beheben. (Ia517c)
Version 1.1.1
Version 1.1.1
9. November 2022
androidx.benchmark:benchmark-*:1.1.1 ist veröffentlicht. Version 1.1.1 enthält diese Commits.
Fehlerkorrekturen
- Behebung von
android.system.ErrnoException: open failed: EACCES, das auf einigen Geräten mit Android 11 (API 30) oder höher aufgetreten ist. Dies ist ein Cherry-Pick eines Fixes aus1.2.0-alpha01. (aosp/2072249)
Version 1.1.0
Version 1.1.0
15. Juni 2022
androidx.benchmark:benchmark-*:1.1.0 ist veröffentlicht. Version 1.1.0 enthält diese Commits.
- Diese Version ist identisch mit
androidx.benchmark:benchmark-*:1.1.0-rc03.
Wichtige Änderungen seit Version 1.0.0
Unterstützung für Jetpack Macrobenchmarks, mit denen Sie Interaktionen in der gesamten App wie Start und Scrollen messen können. Außerdem haben Sie die Möglichkeit, Traces zu erfassen und Trace-Abschnitte zu messen.
Unterstützung für Baseline-Profile
CompilationMode.Partial, um die Effektivität von Baseline-Profilen zu messen.@BaselineProfileRule, um automatisch Baseline-Profile für eine bestimmte kritische User Journey zu generieren.
Unterstützung von Zuweisungsmesswerten und Profiling während der Ausführung von Microbenchmarks.
Version 1.1.0-rc03
1. Juni 2022
androidx.benchmark:benchmark-*:1.1.0-rc03 ist veröffentlicht. Version 1.1.0-rc03 enthält diese Commits.
Fehlerkorrekturen
Installieren Sie das Zielpaket nicht bei jeder Benchmark-Iteration neu. ( aosp/2093027, b/231976084)
Entfernen Sie die Verzögerung
300msauspressHome(). (aosp/2086030, b/231322975)Die Iterationsgeschwindigkeit von Makrobenchmarks lässt sich verbessern, indem die zugrunde liegenden Shell-Befehle optimiert werden. (aosp/2086023, b/231323582)
Unterstützung für verwaltete Gradle-Geräte beim Generieren von Baseline-Profilen mit Macrobenchmarks. (aosp/2062228, b/228926421)
Version 1.1.0-rc02
11. Mai 2022
androidx.benchmark:benchmark-*:1.1.0-rc02 ist veröffentlicht. Version 1.1.0-rc02 enthält diese Commits.
- Diese Version enthält eine Verhaltensänderung: Apps werden jetzt zwischen den einzelnen Benchmarks vollständig neu installiert, um genaue Messungen zu ermöglichen.
Fehlerkorrekturen/Verhaltensänderungen
Ein Problem wurde behoben, bei dem die App-Kompilierung zwischen Makrobenchmarks nicht richtig zurückgesetzt wurde und bei nicht gerooteten Builds überhaupt nicht zurückgesetzt wurde. Dadurch werden viele Fälle behoben, in denen die Ausführung mehrerer Tests dazu führen würde, dass
CompilationModenur geringe oder gar keine Auswirkungen auf die Analysen hat. Um dieses Problem zu umgehen, wird die Ziel-App jetzt bei jeder Testmethode vollständig neu installiert. Dadurch werden die Anwendungsdaten zwischen den einzelnen Makro-Benchmarks gelöscht. (I31c74, b/230665435)Da dies verhindert, dass Apps vor Tests einen Status einrichten, ist es jetzt möglich, die Kompilierung / Neuinstallation zu überspringen, um dieses Problem zu umgehen. Sie können das Ziel beispielsweise mit dem Shell-Befehl
cmd package compile -f -m speed <package>vollständig kompilieren und dann den Kompilierungsschritt des Makrobenchmarks umgehen.Beispiel: build.gradle-Datei Ihres Makrobenchmarks:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }Oder über die Gradle-Befehlszeile:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=falseEs ist jetzt möglich, ein Modul zwischen Makrobenchmarks und Tests zum Generieren von Baseline-Profilen zu teilen. Dazu wurde das Instrumentationsargument
androidx.benchmark.enabledRuleshinzugefügt. Übergeben Sie „Macrobenchmark“ oder „BaselineProfile“, um nur einen Testtyp auszuführen, z.B. beim Generieren vonBaselineProfilesauf einem Emulator. (I756b7, b/230371561)Beispiel: build.gradle-Datei Ihres Makrobenchmarks:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }Oder über die Gradle-Befehlszeile:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Version 1.1.0-rc01
20. April 2022
androidx.benchmark:benchmark-*:1.1.0-rc01 ist veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Die Ausgabelinks für das Baseline-Profil in Android Studio verwenden jetzt einen eindeutigen Dateinamen. So spiegelt die Ausgabe immer die neuesten Ergebnisse der Verwendung eines
BaselineProfileRulewider. ( aosp/2057008, b/228203086 )
Version 1.1.0-beta06
6. April 2022
androidx.benchmark:benchmark-*:1.1.0-beta06 ist veröffentlicht. Version 1.1.0-beta06 enthält diese Commits.
Fehlerkorrekturen
- Absturz bei der Aufzeichnung von Traces auf API 21/22 behoben (If7fd6, b/227509388)
- Die Erkennung des Abschlusses von Aktivitätsstarts wurde überarbeitet, um die Ausnahme „Unable to read any metrics“ (Messwerte können nicht gelesen werden) in Makrobenchmarks beim Start zu beheben. (Ia517c)
- Die Startmesswerte für Macrobenchmarks wurden korrigiert, wenn
CompilationMode.None()verwendet wird. Vor dieser Änderung schienCompilationMode.Partial()langsamer alsCompilation.None()zu sein. (611ac9).
Version 1.1.0-beta05
23. März 2022
androidx.benchmark:benchmark-*:1.1.0-beta05 ist veröffentlicht. Version 1.1.0-beta05 enthält diese Commits.
Fehlerkorrekturen
- Paket beenden, nachdem die Profilinstallation bei Verwendung von
CompilationMode.Noneübersprungen wurde. (aosp/1991373) - Ein Problem wurde behoben, bei dem Macrobenchmarks keine Startmesswerte erfassen konnte, wenn
StartupMode.COLDverwendet wurde. (aosp/2012227 b/218668335)
Version 1.1.0-beta04
23. Februar 2022
androidx.benchmark:benchmark-*:1.1.0-beta04 ist veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.
Fehlerkorrekturen
Fehlende Messwerte unter Android 10 und
NoSuchElementExceptionbehoben, die dadurch verursacht wurden, dass Prozessnamen in Traces nicht richtig erfasst wurden. (Ib4c17, b/218668335)Verwenden Sie
PowerManagerfür die Erkennung von Thermal Throttling auf Q (API 29) und höher. Dadurch wird die Häufigkeit von Falschmeldungen bei der Erkennung von Thermal Throttling deutlich reduziert (Benchmark-Wiederholung nach 90 Sekunden Abkühlzeit) und Benchmarks werden auf Nutzer-Builds deutlich beschleunigt. Außerdem wird die Drosselung auch dann erkannt, wenn die Taktfrequenzen gesperrt sind (wenn sie für die physische Umgebung des Geräts zu hoch sind). (I9c027, b/217497678, b/131755853)Einfaches Profiling von simpleperf auf den Thread
measureRepeatedfiltern, um die Überprüfung zu vereinfachen (Ic3e12, b/217501939)Unterstützung von Messwerten aus benannten UI-Unterprozessen in Apps mit mehreren Prozessen (Ice6c0, b/215988434)
Regeln für das Baseline-Profil filtern, um auf Android 9 (SDK 28) auszurichten. aosp/1980331 b/216508418
Überspringen Sie die Profilinstallation, wenn Sie
Compilation.None()verwenden. Außerdem werden Warnungen ausgegeben, wenn in der App eine ältere Version vonandroidx.profileinstallerund dem Android-Gradle-Plug-in verwendet wird. aosp/1977029
Version 1.1.0-beta03
9. Februar 2022
androidx.benchmark:benchmark-*:1.1.0-beta03 ist veröffentlicht. Version 1.1.0-beta03 enthält diese Commits.
API-Änderungen
AudioUnderrunMetricwurde unter dem experimentellen Flag in die Macrobenchmark-Bibliothek aufgenommen, um die Erkennung von Audio-Underruns zu ermöglichen (Ib5972).BaselineProfileRuleakzeptiert keinensetup-Block mehr, da dieser dieselbe Funktion wieprofileBlockhatte. (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
- Es wurde ein Problem behoben, bei dem Microbench-Profiler-Traces bei nachfolgenden Ausführungen nicht aktualisiert wurden, wenn sie in der Studio-Ausgabe verknüpft waren (I5ae4d, b/214917025).
- Kompilierung von Shell-Befehlen auf API 23 verhindern (Ice380)
FrameCpuTimewurde inFrameDurationCpuundFrameUiTimeinFrameDurationUiumbenannt, um zu verdeutlichen, dass es sich um Zeiträume und nicht um Zeitstempel handelt, und um die Präfixe anzupassen. (I0eba3, b/216337830)
Version 1.1.0-beta02
26. Januar 2022
androidx.benchmark:benchmark-*:1.1.0-beta02 ist veröffentlicht. Version 1.1.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Die Ergebnisse von Microbenchmark Stack Sampling / Method Tracing Profile sind jetzt in der Studio-Ausgabe verknüpft, ähnlich wie andere Profiling-Ausgaben, und unterdrücken die Zuweisungsmesswerte nicht. (Idcb65, b/214440748, b/214253245)
- BaselineProfileRule gibt jetzt den
adb pull-Befehl in logcat und der Studio-Ausgabe aus, um die generierte BaselineProfile-Textdatei abzurufen. (f08811)
Version 1.1.0-beta01
12. Januar 2022
androidx.benchmark:benchmark-*:1.1.0-beta01 ist veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Behebt das Problem, dass das Profiler-Argument „enable“ ignoriert wird. (I37373, b/210619998)
- Entfernung der eingestellten Funktion
CompliationModes(I98186, b/213467659) - Der Baseline-Profil-Arg von
CompilationMode.Partialwurde zur besseren Verständlichkeit in einen Enum-Wert geändert. (Id67ea)
Version 1.1.0-alpha13
15. Dezember 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13 ist veröffentlicht. Version 1.1.0-alpha13 enthält diese Commits.
API-Änderungen
- System Tracing mit geringem Overhead wird der Microbench-Ausgabe unter Android Q (API 29+) hinzugefügt. Derzeit werden keine benutzerdefinierten Traces (über die Jetpack-APIs
android.os.Traceoderandroidx.tracing) erfasst, um die Ergebnisse nicht zu beeinträchtigen. Diese Ablaufverfolgung kann bei der Diagnose von Instabilität hilfreich sein, insbesondere bei Quellen außerhalb des Benchmarks. (I298be, b/205636583, b/145598917) CompilationModesin drei Klassen unterteilen: „Vollständig“, „Keine“ und „Teilweise“. Bisher wurden sie inkonsistent nach Kompilierungsargumenten (die wir jetzt als Implementierungsdetails betrachten) und Funktionen benannt. So werden die Kompromisse, potenziellen Kombinationen und das Verhalten auf den verschiedenen Plattformversionen 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. Die Iteration kann in bestimmten Aufwärmszenarien jedoch
nullsein. (Id3b68, b/208357448, b/208369635)
Fehlerkorrekturen
- Der Fehler, dass
CompilationMode.Speedfälschlicherweise alsNonebehandelt wurde, wurde behoben. (I01137)
Version 1.1.0-alpha12
17. November 2021
androidx.benchmark:benchmark-*:1.1.0-alpha12 ist veröffentlicht. Version 1.1.0-alpha12 enthält diese Commits.
Neue Funktionen
- Experimentellen TraceSectionMetric für benutzerdefinierte tracebasierte Zeitmessungen hinzugefügt. (I99db1, b/204572664)
Fehlerkorrekturen
- Gerät in jeder Iteration aktivieren, damit die Benutzeroberfläche getestet werden kann – erfordert, dass der Sperrbildschirm deaktiviert ist. (Ibfa28, b/180963442)
- Es wurden mehrere Abstürze im Profiling-Modus „StackSampling“ auf Emulatoren und nicht gerooteten Geräten behoben (Icdbda, b/202719335).
- Am Ende jeder Iteration wurde eine Pause von 0,5 Sekunden entfernt.Wenn Sie aufgrund dieser Änderung fehlende Messwerte sehen, melden Sie bitte einen Fehler. (Iff6aa)
- Die Wahrscheinlichkeit für fehlende Daten wird verringert und der Speicheraufwand für das Tracing wird reduziert (Id2544, b/199324831, b/204448861).
- Die Größe von Traces wird um etwa 40% reduziert, wenn Sie zum kompakten Format für die Speicherung von Zeitplänen wechseln. (Id5fb6, b/199324831)
- Die Implementierungen von Startmesswerten wurden aktualisiert, sodass sie immer am Ende des Renderthreads enden. Das Verhalten ist plattformübergreifend einheitlicher und entspricht besser den In-App-Analysen. (Ic6b55)
Version 1.1.0-alpha11
3. November 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11 ist veröffentlicht. Version 1.1.0-alpha11 enthält diese Commits.
API-Änderungen
- Der Makrobenchmark hat jetzt einen
minSdkVersionvon23. (If2655) - Fügt ein neues experimentelles
BaselineProfileRulehinzu, mit dem Baseline-Profile für den kritischen User Journey einer App erstellt werden können. Eine detaillierte Dokumentation folgt. (Ibbefa, b/203692160) - Entfernt die Schnittstellenvariante „measureRepeated“, die für Java-Aufrufer hinzugefügt wurde, da sie zu Unklarheiten beim Abschließen/Auflösen der Methode führte. Java-Aufrufer müssen wieder Unit.Instance von measureRepeated zurückgeben. Wenn das für Sie ein Problem darstellt, melden Sie bitte einen Fehler. Wir können das 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 ist veröffentlicht. Version 1.1.0-alpha10 enthält diese Commits.
API-Änderungen
- StartupTimingMetric auf API 23 zurückportieren. Diese neue Implementierung verarbeitet auch reportFullyDrawn() besser, um zu warten, bis die entsprechenden Inhalte gerendert wurden. (If3ac9, b/183129298)
- Für Java-Aufrufer wurden JvmOverloads zu mehreren MacrobenchmarkScope-Methoden hinzugefügt. (I644fe, b/184546459)
- Eine alternative MacrobenchmarkRule.measureRepeated-Funktion bereitstellen, die ein
Consumer<MacrobenchmarkScope>für die idiomatische Verwendung in der Java-Sprache verwendet. (If74ab, b/184546459)
Fehlerkorrekturen
- Problem behoben, bei dem Traces nicht früh genug gestartet wurden und Messwertdaten fehlten. Dadurch sollten Ausnahmen vom Typ „Unable to read any metrics during benchmark“ (Während des Benchmarks konnten keine Messwerte gelesen werden) behoben werden, die durch die Bibliothek selbst verursacht wurden. (I6dfcb, b/193827052, b/200302931)
- „FrameNegativeSlack“ wurde in „FrameOverrun“ umbenannt, um die Bedeutung zu verdeutlichen: wie viel das Frame sein Zeitbudget überschritten hat. (I6c2aa, b/203008701)
Version 1.1.0-alpha09
13. Oktober 2021
androidx.benchmark:benchmark-*:1.1.0-alpha09 ist veröffentlicht. Version 1.1.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Unterstützung für das Löschen des Kernel-Seitencaches ohne Root-Zugriff unter API 31/S+, wodurch die Genauigkeit von StartupMode.COLD-Starts erhöht wird. (Iecfdb, b/200160030)
Version 1.1.0-alpha08
29. September 2021
androidx.benchmark:benchmark-*:1.1.0-alpha08 ist veröffentlicht. Version 1.1.0-alpha08 enthält diese Commits.
API-Änderungen
- Scroll-Macrobenchmarks können jetzt bis zur API 23 ausgeführt werden (If39c2, b/183129298)
- Neuen Typ von Stichprobenmesswert für die Benutzeroberfläche und die JSON-Ausgabe hinzufügen, der sich auf Perzentile mehrerer Stichproben pro Iteration konzentriert. (I56247, b/199940612)
- Wechsel zu Gleitkomma-Messwerten in allen Benchmark-Bibliotheken (in der Studio-Benutzeroberfläche gekürzt). (I69249, b/197008210)
Version 1.1.0-alpha07
1. September 2021
androidx.benchmark:benchmark-*:1.1.0-alpha07 ist veröffentlicht. Version 1.1.0-alpha07 enthält diese Commits.
API-Änderungen
- Das Mindest-API-Level wurde auf 21 angehoben, um das niedrigste API-Level widerzuspiegeln, das in Zukunft unterstützt werden soll. Die aktuelle unterstützte Mindest-API wird weiterhin über RequiredApi() angegeben und ist derzeit 29 (I440d6, b/183129298).
Fehlerkorrekturen
- Es wurden Fehler in
ProfileInstallerbehoben, um die Ausführung von MacroBenchmarks mitCompilationMode.BaselineProfilefür Apps mit Baseline-Profilen zu vereinfachen. (I42657, b/196074999) HINWEIS: Erfordert auch ein Update aufandroidx.profileinstaller:profileinstaller:1.1.0-alpha04oder höher. StartupMode.COLD+CompilationMode.NoneBenchmarks sind jetzt stabiler. (I770cd, b/196074999)
Version 1.1.0-alpha06
18. August 2021
androidx.benchmark:benchmark-*:1.1.0-alpha06 ist veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.
API-Änderungen
- Das Instrumentierungsargument
androidx.benchmark.iterationswurde hinzugefügt, um die Anzahl der Iterationen beim lokalen Testen/Profilieren manuell zu überschreiben. (6188be, b/194137879)
Fehlerkorrekturen
- Simpleperf ist jetzt der Standard-Sampling-Profiler für API 29 und höher. (Ic4b34, b/158303822)
Bekannte Probleme
CompilationMode.BaselineProfileist noch in der Entwicklung. Verwenden Sie es vorerst nicht, um zu bestimmen, wie gut ein Profil ist.
Version 1.1.0-alpha05
4. August 2021
androidx.benchmark:benchmark-*:1.1.0-alpha05 ist veröffentlicht. Version 1.1.0-alpha05 enthält diese Commits.
1.1.0-alpha04 wurde vor der Veröffentlichung aufgrund eines sporadischen Absturzes storniert. b/193827052
API-Änderungen
- startActivityAndWait wurde umgestellt, um den Start über
am startaufzurufen. Dadurch wird die Zeit für jede Messwiederholung um etwa 5 Sekunden verkürzt. Allerdings werden Intent-Parcelables nicht mehr unterstützt. (I5a6f5, b/192009149
Fehlerkorrekturen
- Die Aggressivität der Erkennung von thermischer Drosselung wird reduziert und die Baseline wird neu berechnet, wenn häufig Drosselungen erkannt werden. (I7327b)
- Die FrameTimingMetric funktioniert jetzt auch in der Android S-Betaversion (Ib60cc, b/193260119).
- Verwenden Sie ein
EmptyActivity, um die Ziel-App aus dem Status „erzwungen beendet“ zu holen undCompilationMode.BaselineProfilebesser zu unterstützen. (Id7cac, b/192084204) - Die Dateiendung für Traces wurde in
.perfetto-tracegeändert, um dem Plattformstandard zu entsprechen. (I4c236, b/174663039) - Mit StartupTimingMetric wird jetzt der Messwert „fullyDrawnMs“ ausgegeben, um die Zeit zu messen, bis das Rendern Ihrer Anwendung abgeschlossen ist. Um diesen Messwert für Ihre App zu definieren, rufen Sie Activity.reportFullyDrawn auf, wenn Ihre ersten Inhalte bereit sind, z. B. wenn Ihre ersten Listenelemente aus der Datenbank oder dem Netzwerk geladen werden. Die Methode „reportFullyDrawn“ ist ohne Build-Versionsprüfungen für „ComponentActivity“ verfügbar. Der Test muss lange genug laufen, damit der Messwert erfasst werden kann. „startActivityAndWait“ wartet nicht auf „reportFullyDrawn“. (If1141, b/179176560)
- Kosten für das Anhängen von UI-Metadaten an Traces um mindestens 50 ms reduzieren (Ic8390, b/193923003)
- Die Abfragehäufigkeit wurde beim Beenden des Tracings drastisch erhöht, wodurch sich die Laufzeit des Start-Benchmarks um mehr als 30 % verkürzen kann (Idfbc1, b/193723768).
Version 1.1.0-alpha03
16. Juni 2021
androidx.benchmark:benchmark-*:1.1.0-alpha03 ist veröffentlicht. Version 1.1.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es wurde ein neues
CompilationMode.BaselineProfilehinzugefügt, um Profile zu unterstützen, die mit der Jetpack ProfileInstaller-Bibliothek installiert wurden. (aosp/1720930)
Fehlerkorrekturen
Der Beispiel-Gradle-Code zum Unterdrücken von Benchmark-Fehlern wurde aktualisiert. Er verwendet jetzt eine API, die nicht mehr als veraltet gilt, und eine Syntax, die auch von Nutzern von .gradle.kts unterstützt wird.
Z. B.
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Version 1.1.0-alpha02
18. Mai 2021
Mit der Benchmarkversion 1.1.0-alpha02 wird eine wichtige Komponente für Benchmarking eingeführt: Macrobenchmark. Mit Benchmark können Sie CPU-Schleifen messen. Mit Makrobenchmark können Sie außerdem Interaktionen in der gesamten App wie Start und Scrollen messen und Traces erfassen. Weitere Informationen finden Sie in der Dokumentation zur Bibliothek.
androidx.benchmark:benchmark-*:1.1.0-alpha02 ist veröffentlicht. Version 1.1.0-alpha02 enthält diese Commits.
Neue Funktionen
Makrobenchmark-Artefakte hinzugefügt (androidx.benchmark:benchmark-macro-junit4 und androidx.benchmark:benchmark-macro)
- Messwerte zur Leistung beim Starten, Scrollen und bei Animationen in Ihrer App lokal oder in der CI erfassen
- Traces in Android Studio erfassen und untersuchen
Fehlerkorrekturen
- Problem mit Shell-Berechtigungen für das Ausgabeverzeichnis unter Android 12 umgehen (Hinweis: Möglicherweise muss das Android-Gradle-Plug-in auf 7.0.0-Canary und Android Studio auf Arctic Fox (2020.3.1) aktualisiert werden, damit Ausgabedateien auf betroffenen Geräten weiterhin erfasst werden können). (Icb039)
- Caching der Supportkonfiguration in BenchmarkPlugin unterstützen (6be1c1, b/159804788)
- Vereinfachte Dateiausgabe – standardmäßig aktiviert, in einem Verzeichnis, für das keine
requestLegacyExternalStorage=trueerforderlich ist (8b5a4d, b/172376362) - Es wurden Logcat-Warnungen der Bibliothek behoben, die darauf hinwiesen, dass der JIT-Thread auf Plattformversionen, auf denen er nicht vorhanden ist, nicht gefunden wurde. (I9cc63, b/161847393)
- Korrektur für die maximale Frequenz des Lesegeräts. (I55c7a)
Version 1.1.0-alpha01
10. Juni 2020
androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 und androidx.benchmark:benchmark-junit4:1.1.0-alpha01 sind veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.
Neue Funktionen in Version 1.1
- Zuweisungs-Messwert: Bei Benchmarks wird jetzt nach der Aufwärm- und Timing-Phase eine zusätzliche Phase ausgeführt, in der die Zuweisungsanzahl erfasst wird. Zuweisungen können auf älteren Versionen der Plattform Leistungsprobleme verursachen (140 ns in O wurden zu 8 ns in M – gemessen auf Nexus 5X mit gesperrten Taktfrequenzen). Dieser Messwert wird in der Android Studio-Konsolenausgabe sowie in der
- Unterstützung für Profilerstellung: Sie können jetzt Profilerstellungsdaten für einen Benchmarklauf erfassen, um zu untersuchen, warum Ihr Code möglicherweise langsam ausgeführt wird. Benchmark unterstützt entweder das Erfassen von Methodentracing oder das Erfassen von Methoden-Sampling aus ART. Diese Dateien können mit dem Profiler in Android Studio über File > Open untersucht werden.
- Das Benchmark-Gradle-Plug-in bietet jetzt Standardeinstellungen für eine einfachere Einrichtung:
testBuildTypeist standardmäßig auf „release“ festgelegt, um die Verwendung von Abhängigkeiten mit integrierter Codeabdeckung zu vermeiden. Der Release-BuildType ist auch als Standard-BuildType konfiguriert. Dadurch kann Android Studio beim ersten Öffnen eines Projekts automatisch die richtige Build-Variante auswählen. (b/138808399)signingConfig.debugwird als Standardsignaturkonfiguration verwendet (b/153583269).
** Fehlerkorrekturen **
- Der Overhead für den Warm-up-Übergang wurde deutlich reduziert. Die erste Messung für jeden Benchmark war künstlich höher als die anderen. Dieses Problem trat vor allem bei sehr kleinen Benchmarks (1 Mikrosekunde oder weniger) auf. (b/142058671)
- Der
InstrumentationResultParser-Fehler, der für jeden Benchmark ausgegeben wurde, wenn er über die Befehlszeile ausgeführt wurde, wurde behoben. (I64988, b/154248456)
Bekannte Probleme
- Bei Befehlszeilen- und Gradle-Aufrufen von Benchmark werden die Ergebnisse nicht direkt ausgegeben. Sie können dieses Problem umgehen, indem Sie den Prozess in Studio durchlaufen oder die JSON-Ausgabedatei nach Ergebnissen parsen.
- Beim Abrufen von Benchmark-Berichten werden keine Daten von Geräten berücksichtigt, auf denen eine App mit einer applicationId installiert ist, die mit „android“ oder „download“ endet (Groß-/Kleinschreibung wird nicht beachtet). 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 werden ohne Änderungen gegenüber Version 1.0.0-rc01 veröffentlicht. Version 1.0.0 enthält diese Commits.
Wichtige Funktionen von Version 1.0.0
Mit der Benchmark-Bibliothek können Sie Leistungsbenchmarks für App-Code schreiben und schnell Ergebnisse erhalten.
So werden Probleme bei der Build- und Laufzeitkonfiguration vermieden und die Geräteleistung stabilisiert, damit die Messungen genau und konsistent sind. Führen Sie die Benchmarks direkt in Android Studio oder in Continuous Integration aus, um die Codeleistung im Zeitverlauf zu beobachten und Regressionen zu verhindern.
Zu den wichtigsten Funktionen gehören:
- Stabilisierung der Uhr
- Automatische Thread-Priorisierung
- Unterstützung für UI-Leistungstests, z. B. im RecyclerView-Beispiel
- JIT-kompatible Warm-up- und Schleifenfunktionen
- 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 sind veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.
Neue Funktionen
- Systrace-Tracing zu Benchmarks hinzugefügt
Fehlerkorrekturen
- Ein Problem mit der Instabilität von Messwerten wurde behoben, bei dem JIT aufgrund einer niedrigeren Priorität nicht vor dem Warm-up abgeschlossen wurde (b/140773023).
- Einheitliches JSON-Ausgabeverzeichnis für Android-Gradle-Plug-in 3.5 und 3.6
Version 1.0.0-beta01
9. Oktober 2019
androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 und androidx.benchmark:benchmark-junit4:1.0.0-beta01 sind veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.
Neue Funktionen
- Führen Sie vor jedem Warm-up die automatische Speicherbereinigung durch, um den Speicherdruck von einem Benchmark auf den nächsten zu verringern (b/140895105).
Fehlerkorrekturen
- Die
androidx.annotation:android-experimental-lint-Abhängigkeit wurde hinzugefügt, damit Java-Code korrekt Lint-Fehler erzeugt, wenn die experimentelle API nicht verwendet wird. Dies entspricht der experimentellen Kotlin-Annotation für Kotlin-Aufrufer. - Die Verwendung des Instrumentierungsarguments
additionalTestOutputDirfür die Ausgabe im Android-Gradle-Plug-in 3.6 wird jetzt korrekt erkannt, sodass Sie wissen, wann das AGP das Kopieren von Daten übernimmt. - Die nicht erkannte Taktfrequenz in JSON korrigieren, damit
-1korrekt ausgegeben 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 sind veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
Neue Funktionen
- Es wurde eine Prüfung auf die falsche Verwendung des alten Pakets für den Test-Runner hinzugefügt. Dadurch wird jetzt eine hilfreichere Fehlermeldung angezeigt.
API-Änderungen
- Die experimentelle Annotation
ExperimentalAnnotationReportist jetzt korrekt öffentlich. Für die Verwendung der experimentellen API BenchmarkState#report ist jetzt diese Annotation erforderlich.
Version 1.0.0-alpha05
5. September 2019
androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 und androidx.benchmark:benchmark-junit4:1.0.0-alpha05 sind veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
- Die
BenchmarkState.reportDataAPI ist jetzt als experimentell gekennzeichnet.
Fehlerkorrekturen
- Das Problem mit dem Script zum Sperren der Uhr wurde behoben. Es ist auf Geräten fehlgeschlagen, auf denen die Shell-Dienstprogramme
cutoderexprfehlten. - Ein Problem mit der Aufgabe
./gradlew lockClockswurde behoben, bei dem die Aufgabe auf Geräten, die mit einer älteren Version des su-Dienstprogramms gerootet wurden, hängen blieb. Diese Version unterstützte das Flag-cnicht.
Version 1.0.0-alpha04
7. August 2019
androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 und androidx.benchmark:benchmark-junit4:1.0.0-alpha04 sind veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Außerdem wurde 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 der CI. Weitere Informationen finden Sie unter Benchmarks ohne Gradle erstellen und Benchmarks in der kontinuierlichen Integration ausführen.
Neue Funktionen
- Gradle-Plug-in
- Deaktiviert jetzt automatisch die Testabdeckung und legt standardmäßig
AndroidBenchmarkRunnerfest (b/138374050) - Unterstützung für das neue AGP-basierte Kopieren von Daten beim Ausführen von Benchmarks und bei Verwendung von AGP 3.6+ hinzugefügt
- Deaktiviert jetzt automatisch die Testabdeckung und legt standardmäßig
- Ergänzungen des JSON-Formats
- Gesamtlaufzeit des Benchmark-Tests ausgeben (b/133147694)
- Bei
@Parameterized-Benchmarks, die einen Namenstring verwenden (z. B.@Parameters(name = "size={0},depth={1}")), werden jetzt Parameternamen und -werte pro Benchmark in der JSON-Ausgabe ausgegeben (b/132578772).
- Probelaufmodus (b/138785848)
- Es wurde ein „Testlauf“-Modus hinzugefügt, in dem jede Benchmark-Schleife nur einmal ausgeführt wird, um nach Fehlern/Abstürzen zu suchen, ohne Messungen zu erfassen. Das kann z.B. nützlich sein, um schnell Benchmarks in Presubmit auszuführen und zu prüfen, ob sie funktionieren.
API-Änderungen
- Die Modulstruktur wurde geändert und die Bibliothek wurde aufgeteilt (b/138451391)
benchmark:benchmark-junit4enthält Klassen mit JUnit-Abhängigkeit:AndroidBenchmarkRunnerundBenchmarkRule. Beide wurden in das Paketandroidx.benchmark.junit4verschoben.benchmark:benchmark-commonenthält die restliche Logik, einschließlich der BenchmarkState API.- Durch diese Aufteilung kann die Bibliothek in Zukunft Benchmarking ohne JUnit4-APIs unterstützen.
- Konfigurationswarnungen werden jetzt als Fehler behandelt und führen zum Absturz des Tests (b/137653596).
- Dadurch sollen genaue Messungen gefördert werden, insbesondere in CI.
- Diese Fehler können mit einem Instrumentierungsargument wieder zu Warnungen herabgestuft werden. Beispiel:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Fehlerkorrekturen
- Fehler beim Schreiben auf externen Speichergeräten auf Q-Geräten liefern aussagekräftigere Meldungen mit Vorschlägen zur Behebung des Problems.
- Bildschirme werden während Benchmark-Läufen automatisch eingeschaltet, anstatt dass der Test fehlschlägt, wenn der Bildschirm ausgeschaltet ist.
Externe Beiträge
- Vielen Dank an Sergey Zakharov für die Verbesserungen bei der JSON-Ausgabe und die Fehlerbehebung bei Problemen mit dem ausgeschalteten 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 sind veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Schlafdauer aufgrund von thermischer Drosselung pro Benchmark im vollständigen JSON-Bericht verfügbar machen
Fehlerkorrekturen
- Das Gradle-Plug-in muss nicht mehr nach Android-Plug-ins und dem Android-Block angewendet werden.
- Unterstützung für Benchmarkberichte auf Android 10-Geräten mit Scoped Storage hinzugefügt
Version 1.0.0-alpha02
6. Juni 2019
androidx.benchmark:1.0.0-alpha02 und androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 werden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Das JSON-Schema wird als API behandelt. Wir planen, dieselben Stabilitätsbeschränkungen wie bei anderen APIs zu befolgen: stabil (mit sehr seltenen Ausnahmen) in der Betaphase und in der endgültigen Version, mit nur Ergänzungen in Nebenversionen und Änderungen/Entfernungen in Hauptversionen.
API-Änderungen
Überarbeitetes JSON-Schema. Weitere Änderungen am JSON-Schema werden wahrscheinlich auf Ergänzungen beschränkt sein:
- Die Struktur des Ergebnisobjekts wurde neu organisiert, um in Zukunft zusätzliche Messwertgruppen zu unterstützen (b/132713021).
- Dem Objekt der obersten Ebene wurden Kontextinformationen zum Testlauf hinzugefügt, z. B. Geräte- und Build-Informationen sowie Informationen dazu, ob die Taktfrequenz gesperrt ist (b/132711920).
- Zeitmesswerte haben jetzt „ns“ im Namen (b/132714527)
- Zusätzliche Statistiken pro gemeldetem Messwert (Maximum, Median, Minimum) und Entfernung der vereinfachten Zusammenfassungsstatistik „Nanos“ (b/132713851)
XML-Ausgabe entfernt ( b/132714414)
Erkennung von thermischer Drosselung aus der
BenchmarkState.reportDataAPI entfernt (b/132887006)
Fehlerkorrekturen
- Das Problem, dass
./gradlew lockClocksauf einigen Geräten mit neueren Betriebssystemen nicht richtig haftete, wurde behoben. (b/133424037) - Drosselungserkennung für Emulator deaktiviert (b/132880807)
Version 1.0.0-alpha01
7. Mai 2019
androidx.benchmark:benchmark:1.0.0-alpha01 ist veröffentlicht. Die in dieser Version enthaltenen Commits sind hier verfügbar.