Benchmark
Letzte Aktualisierung | Stabile Version | Release Candidate | Beta-Ausgabe | Alphaversion |
---|---|---|---|---|
13. November 2024 | 1.3.3 | - | - | 1.4.0-alpha05 |
Abhängigkeiten deklarieren
Wenn Sie Benchmark als Abhängigkeit hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Makrobenchmark
Wenn Sie Macrobenchmark in Ihrem Projekt verwenden möchten, fügen Sie der Datei build.gradle
für das Macrobenchmark-Modul die folgenden Abhängigkeiten hinzu:
Cool
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.0") }
Mikrobenchmark
Wenn Sie Microbenchmark in Ihrem Projekt verwenden möchten, fügen Sie der Datei build.gradle
für Ihr Microbenchmark-Modul die folgenden Abhängigkeiten hinzu:
Cool
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Die MicroBenchmark-Bibliothek bietet auch ein Gradle-Plug-in für die Verwendung mit Ihrem MicroBenchmark-Modul.
Dieses Plug-in legt Standardeinstellungen für die Build-Konfiguration für das Modul fest, richtet
Benchmark-Ausgabekopie an den Host,
und stellt die
Aufgabe ./gradlew lockClocks
.
Um das Plug-in zu verwenden, fügen Sie die folgende Zeile in den Block „plugins“ der obersten Ebene ein
build.gradle
-Datei:
Cool
plugins { id 'androidx.benchmark' version '1.3.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.0" apply false }
Wenden Sie das Plug-in dann auf die Datei build.gradle
Ihres Benchmark-Moduls an.
Cool
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 1.4
Version 1.4.0-alpha05
13. November 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05
wird veröffentlicht. Version 1.4.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem in API 34 und höher behoben, bei dem
CompilationMode.None()
eine inkonsistente Leistung aufwies, die nicht repräsentativ für die anfängliche Worst-Case-Leistung war. Dadurch wird eine Plattformänderung umgangen, durch die Apps kurz nach der ersten Ausführung teilweise (nur das Laden von Klassen betreffend) im ART-Kompilierungsstatusverify
kompiliert werden. (Ie48d0) - Problem behoben, bei dem (insbesondere kurze) Protokolle erfasst werden konnten, für die keine Messungen aus den integrierten Macrobenchmark-Messwerten erfasst wurden, da der Prozessname im Perfetto-Protokoll abgeschnitten wurde. Jetzt wird dieses Problem in macrobenchmark umgangen, indem in allen vordefinierten Abfragen zusätzlich zum erwarteten Paketnamen auch nach dem abgeschnittenen Paketnamen gesucht wird. Hinweis: Bei benutzerdefinierten
TraceMetric
-Implementierungen oder anderen direkten Aufrufern vonPerfettoSession.query
kann dieses Verhalten ebenfalls implementiert werden, indemprocess.name LIKE "$packageName"
in einer Perfetto-Abfrage durch(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
ersetzt wird. (I5bf01, b/377565760)
Version 1.4.0-alpha04
30. Oktober 2024
androidx.benchmark:benchmark-*:1.4.0-alpha04
wird veröffentlicht. Version 1.4.0-alpha04 enthält diese Commits.
Neue Funktionen
- (Experimentell) Generierung von Baseline-Profilen und Benchmarking für Apps aktivieren, die für einen sekundären Nutzer installiert wurden, z. B. für Apps auf headless Android Auto-Geräten. Diese Unterstützung wurde in einigen Szenarien getestet. Falls sie bei dir nicht funktioniert, melde bitte einen Fehler. (I9fcbe, b/356684617, b/373641155)
Fehlerkorrekturen
isProfileable
wird jetzt immer in Benchmark-Builds überschrieben undisDebuggable
wird jetzt immer sowohl in Benchmark- als auch innonMinified
-Builds (Erfassung des Baseline-Profils) überschrieben. (I487fa, b/369213505)- Behebung eines Fehlers bei der Kompilierungserkennung auf einigen physischen Geräten vor API 28. Betrifft JSON
context.compilationMode
und das Verhalten vonandroidx.benchmark.requireAot=true
(wird nicht mehr fälschlicherweise ausgelöst) (Ic3e08, b/374362482) - Bei
CpuEventCounter
-Messwerten wird eine Ausnahme ausgelöst, wenn ungültige Messungen festgestellt werden (z.B. instructions/cpucycles==0) (I8c503)
Version 1.4.0-alpha03
16. Oktober 2024
androidx.benchmark:benchmark-*:1.4.0-alpha03
wird veröffentlicht. Version 1.4.0-alpha03 enthält diese Commits.
API-Änderungen
- Makrobenchmark: Hier wird
ArtMetric
hinzugefügt, mit dem sich die Abdeckung des Profils oder die allgemeine Leistung der Android-Laufzeit prüfen lässt. Hier werden die Anzahl und die Gesamtdauer der JIT-Ausführung, der Kursinitialisierung (sofern verfügbar) und der Kursüberprüfung erfasst. Außerdem wirdCaptureInfo
so geändert, dass die optionale ART-Mainline-Version in die Standardversion aufgenommen wird. (I930f7) - Fügen Sie der JSON-Ausgabe des Benchmarks
coefficientOfVariation
hinzu, um die Stabilität innerhalb eines bestimmten Benchmarklaufs anzuzeigen. (Ib14ea)
Fehlerkorrekturen
CollectBaselineProfileTask
wurde korrigiert, wenn das AVD-Gerät Leerzeichen enthält. (Ia0225, b/371642809)- Spekulative Fehlerbehebung für
StartupMode.COLD
-Ausnahmen:Package <packagename> must not be running prior to cold start!
. Jetzt wartetMacrobenchmarkScope.killProcess()
(einschließlich der Funktion, die vor jeder Iteration ausgeführt wird, um das Verhalten vonStartupMode.COLD
zu implementieren) darauf, dass alle Prozesse der App beendet wurden. (I60aa6, b/351582215) - Behoben: Bei einigen gerooteten Emulatoren wurde der Fehler UNLOCKED_ angezeigt. (Ic5117)
- Diese Bibliothek verwendet jetzt JSpecify-Null-Anmerkungen, die sich auf den Typ beziehen. Kotlin-Entwickler sollten die folgenden Compilerargumente verwenden, um die korrekte Verwendung zu erzwingen:
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
(I7104f, b/326456246)
Version 1.4.0-alpha02
2. Oktober 2024
androidx.benchmark:benchmark-*:1.4.0-alpha02
wird veröffentlicht. Version 1.4.0-alpha02 enthält diese Commits.
API-Änderungen
- Die Gradle-Aufgaben
lockClocks
undunlockClocks
wurden in Benchmark-Projekte verschoben, anstatt auf oberster Ebene verfügbar zu sein. Diese Änderung war erforderlich, da es leider keine Möglichkeit gibt, diese als Aktionen der obersten Ebene zu registrieren, ohne die Projektisolierung zu brechen. (I02b8f, b/363325823)
Fehlerkorrekturen
BaselineProfileRule
erfasst jetzt Profile für Apps mit mehreren Prozessen, indem am Ende des Blocks jedem laufenden Prozess signalisiert wird, Profile zu erstellen. Wenn bei einer profilbasierten Zusammenstellung nie ein Prozess gefunden wird, an den gesendet werden soll, schlägt die Zusammenstellung fehl, da Profilen keine Daten zugewiesen werden dürfen. Außerdem wurde ein Instrumentierungsargument hinzugefügt, um die Wartezeit für Dumps zu steuern:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469)- Von Benchmark
1.3.2
: Es wurde behoben, dass Firebase Test Lab (FTL) keine Ergebnisdateien für Baseline-Profile oder Makrobenchmarks aus dem Gradle-Plug-in für Baseline-Profile abrufen konnte. (I2f678, b/285187547)
Wenn Sie FTL verwenden möchten, wenden Sie das Plug-in auf das Modul „Baseline-Profil“ im Plug-in-Block an. Verwenden Sie dazu Folgendes:
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-Profilerweiterung hinzugefügt werden:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Version 1.4.0-alpha01
18. September 2024
androidx.benchmark:benchmark-*:1.4.0-alpha01
wird veröffentlicht. Version 1.4.0-alpha01 enthält diese Commits.
Neue Funktion: Statistiken zum App-Start
- Die erste Version der Statistiken zum App-Start kann in Macrobenchmark aktiviert werden. (09fae38)
So aktivieren Sie die Funktion in einem Start-Benchmark:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
Wenn Sie dann den Start-Benchmark ausführen, wird der Trace auf häufige Probleme geprüft und die Ergebnisse werden nach den Messwerten in der Studio-Testausgabe auf dem Tab „Benchmark“ 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 Entwicklungsphase. Verbesserungen an der Dokumentation und der Erweiterbarkeit sind geplant. Wir freuen uns aber über Feedback.
Neue Funktionen
- Die Gradle-Property
androidx.baselineprofile.suppressWarnings
wurde hinzugefügt, um alle Warnungen zu Referenzprofilen zu unterdrücken. (314153a) - Microbench-Messwerte werden jetzt in Perfetto-Traces als Zähler angezeigt. (3214854)
- Fügen Sie experimentelle Scripts zum Deaktivieren von JIT hinzu (erfordert Root-Zugriff / Neustart der Laufzeit) und zum Zurücksetzen des Geräteleistungs-/Teststatus. Diese werden derzeit nicht als Gradle-Aufgaben veröffentlicht. (7c3732b)
- Es wurde ein Benchmark-Argument hinzugefügt, um Tests beim Ausführen im Emulator zu überspringen. Wenn die
automaticGenerationDuring
-Build-Funktion aktiviert ist, wird durch Benchmarks auch die Generierung eines Baseline-Profils ausgelöst. Dies funktioniert nicht, wenn Emulatoren verwendet werden. Mit dem neuen ArgumentskipBenchmarksOnEmulator
können wir den Test stattdessen überspringen. (0c2ddcd) - Logik zum Aktivieren von Leistungsereignissen für API 23 und höher ändern (2550048)
API-Änderungen
- Das vorhandene experimentelle
PerfettoConfig
-Argument fürMacrobenchmarkRule.measureRepeated()
wurde in das neueExperimentalConfig
-Objekt verschoben.
Fehlerkorrekturen
- Anzahl der Wiederholungsversuche für
lockClocks.sh
erhöhen (99e9dac) - Erstellen Sie keine
nonMinified
- und Benchmark-Buildtypen, falls bereits vorhanden. Aufgrund eines Fehlers wurdennonMinified
- und Benchmark-Buildtypen auch dann neu erstellt, wenn sie bereits vorhanden waren. (e75f0a5) - Ignorieren Sie nicht endende Segmente aus den
TraceSectionMetric
-Ergebnissen. (a927d20) - Die Emulatorprüfung wurde verbessert, um das Präfix
sdk_
zu berücksichtigen. (1587de8) - Nicht laufende Pakete in
FrameTimingGfxInfoMetric
als gelöscht behandeln (35cc79c) - Korrektur von
androidx.benchmark.cpuEventCounter
, durch die fehlerhafte Werte für andere Ereignisse als Anweisungsereignisse verursacht wurden (06edd59) resumeTiming/runWithTimingDisabled
wurde so korrigiert, dass die Prioritätsreihenfolge der Messwerte berücksichtigt wird. Außerdem wurde die Auswirkung der Pausierung/Fortsetzung von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität deutlich reduziert. Wenn Sie beispielsweise CPU-Leistungszähler über das InstrumentierungsargumentcpuEventCounter.enable
verwenden, wird „timeNs“ bei Pausieren/Fortsetzen nicht mehr deutlich reduziert. (5de0968)
Version 1.3
Version 1.3.3
16. Oktober 2024
androidx.benchmark:benchmark-*:1.3.3
wird veröffentlicht. Version 1.3.3 enthält diese Commits.
Fehlerkorrekturen
- Problem mit
CollectBaselineProfileTask
behoben, wenn das AVD-Gerät Leerzeichen enthält (Ia0225, b/371642809)
Version 1.3.2
2. Oktober 2024
androidx.benchmark:benchmark-*:1.3.2
wird veröffentlicht. Version 1.3.2 enthält diese Commits.
Fehlerkorrekturen
- Behoben wurde ein Problem, bei dem in Firebase Test Lab (FTL) keine Ergebnisdateien für Baseline-Profile oder Makrobenchmarks aus dem Gradle-Plug-in für Baseline-Profile abgerufen werden konnten. (I2f678, b/285187547)
Wenn Sie FTL verwenden möchten, wenden Sie das Plug-in auf das Modul „Baseline-Profil“ im Plug-in-Block an. Verwenden Sie dazu Folgendes:
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-Profilerweiterung hinzugefügt werden:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Version 1.3.1
18. September 2024
androidx.benchmark:benchmark-*:1.3.1
wird veröffentlicht. Version 1.3.1 enthält diese Commits.
Fehlerkorrekturen
- Die Gradle-Eigenschaft
androidx.baselineprofile.suppressWarnings
wurde hinzugefügt, um alle Warnungen für das Baseline-Profil zu unterdrücken (I7c36e, b/349646646) - Das Gradle-Plug-in für das Baseline-Profil wurde so geändert, dass vorhandene
nonMinified…
undbenchmark…
verwendet werden, wenn sie von der App erstellt wurden, anstatt Wrapper zu erstellen. (Ia8934, b/361370179) - Fehlerbehebung bei
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
, wennautomaticGenerationDuringBuild
in Emulatoren aktiviert ist. Mit dem neuen Argument wird der Test stattdessen übersprungen. (If3f51, b/355515798) - Minimierung von Mikrobenchmarks – Unterklassen von
org.junit.runner.notification.RunListener
in der Benchmark-Bibliothek Proguard beibehalten (Ic8ed5, b/354264743) - Korrigieren Sie
TraceSectionMetric
in „Nicht endende Segmente ignorieren“. Bisher wurde für diese Elemente eine Dauer von -1 angenommen, z.B. bei der Addition oder beim Berechnen der Mindestdauer. (If74b7) - Ein Problem in
FrameTimingGfxInfoMetric
wurde behoben, bei dem der Messwert beim Starten abstürzte, wenn der Prozess noch nicht ausgeführt wurde. (I6e412)
Version 1.3.0
21. August 2024
androidx.benchmark:benchmark-*:1.3.0
wird veröffentlicht. Version 1.3.0 enthält diese Commits.
Änderungen an den Mikrobenchmarks seit Version 1.2.0
- Das Methoden-Tracing ist in Mikrobenchmarks standardmäßig aktiviert, wenn sie auf den meisten Geräten ausgeführt werden.
- Die Methode wird nach den Messungen in einer separaten Phase gefolgt. So können aus einem einzigen Benchmarklauf sowohl genaue Messungen als auch Methodenaufzeichnungen ausgegeben werden.
- Die Methode „Method Tracing“ bei einigen Android-Betriebssystemen und ART-Versionen wirkt sich auf spätere Analysephasen aus. Bei diesen Versionen ist die Methode standardmäßig deaktiviert und eine Warnung wird in der Studio-Ausgabe ausgegeben.
- Benchmarks für den Hauptthread und ANRs
measureRepeatedOnMainThread
wurde für UI-Thread-Benchmarks hinzugefügt (z.B. für solche, die mit Compose-/View-UIs interagieren), um ANRs bei einer Ausführung über mehrere Sekunden zu vermeiden.- Methoden-Traces werden übersprungen, wenn sie voraussichtlich die Frist für die Vermeidung von ANRs überschreiten. Legen Sie
androidx.benchmark.profiling.skipWhenDurationRisksAnr
auf „false“ fest, um dieses Verhalten zu deaktivieren. Dies wird für CI-Ausführungen nicht empfohlen, da ANRs bei langen CI-Ausführungen zu Problemen führen können.
- Minimierung
- Eingebettete ProGuard-Regeln zur Verbesserung des Mikrobenchmarkings bei aktivierter Minimierung
- Für die Minimierung/R8 in einem Bibliotheksmodul ist AGP 8.3 erforderlich. Sie kann über
android.buildTypes.release.androidTest.enableMinification
inbuild.gradle
aktiviert werden. - Es wurde eine experimentelle
BlackHole.consume()
API hinzugefügt, um die Beseitigung von Totcode zu verhindern (If6812, b/286091643)
- Messwerte
- Experimentelle CPU-Ereigniszählerfunktion (Messwerte von
perf_event_open
, für die auf den meisten Versionen der Plattform Root-Zugriff erforderlich ist), Zugriff überInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(kann auftrue
festgelegt werden) undandroidx.benchmark.cpuEventCounter.events
kann z. B. auf (Instructions,CpuCycles
) festgelegt werden. Diese Funktion sollte auf einigen Userdebug-Emulatoren unterstützt werden, der Support wurde jedoch nicht auf allen verfügbaren Emulatoren getestet.
- Experimentelle CPU-Ereigniszählerfunktion (Messwerte von
Änderungen am MACRObenchmark seit Version 1.2.0
- Überarbeitung des Methoden-Tracings für Makrobenchmarks.
- Jetzt sind Methodenaufzeichnungen auf die Dauer der
measureBlock
beschränkt und können mehrere Sitzungen erfassen, wenn der Prozess mehrmals gestartet wird. - Bisher funktionierte die Methodenaufzeichnung nur für
StartupMode.COLD
-Benchmarks und es wurde nichts fürmeasureBlocks
erfasst, bei dem der Zielprozess nicht neu gestartet wurde. - Feste Methoden-Traces werden im Makro-Benchmark gelöscht, sodass Methoden-Traces auch auf langsameren Geräten vollständig erfasst und gültig sein sollten. (I6349a, b/329904950)
- Jetzt sind Methodenaufzeichnungen auf die Dauer der
- Das ART-Profil muss während der einzelnen
warmUp
-Iterationen korrekt gedumpt werden, wenn der Prozess beendet wird, damit dieCompilationMode.Partial(warmup=N)
-Messungen genauer sind. (I17923) - Nachricht zum Fehler beim Senden von Drop-Shadern
- Vorschläge zur Fehlerbehebung bei der Fehlermeldung „Shader-Übertragung fehlgeschlagen“ hinzugefügt
- Fügen Sie zwei Instrumentierungsargumente hinzu, um das Verhalten beim Auslagern von Shadern zu überschreiben und Abstürze beim Benchmarking von Apps ohne
ProfileInstaller
1.3 zu vermeiden:androidx.benchmark.dropShaders.enable=true/false
: Kann verwendet werden, um alle Shader-Drops zu überspringen (einschließlich derjenigen, die beiStartupMode.Cold
-Starts erfolgen), insbesondere beim Benchmarking von Apps, die noch nicht ProfileInstaller 1.3 verwenden.androidx.benchmark.dropShaders.throwOnFailure=true/false
: Kann verwendet werden, um Fehler beim Ablegen 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 eine benutzerdefiniertePerfettoConfig
für die vollständige benutzerdefinierte Perfetto-Sitzungsaufzeichnung verwendet. Hinweis: Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messwertklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384) - Brechen Sie DeXopt-Jobs im Hintergrund ab, bevor Sie einen Makro-Benchmark ausführen, um Störungen zu vermeiden. (I989ed)
- Der Makrobenchmark wartet jetzt 1 Sekunde, bis die Zielanwendung ein ART-Profil leerte (früher 500 ms). (I85a50, b/316082056)
- Überarbeitung von TraceSectionMetric
- Hinweis: Die folgenden
TraceSectionMetric
-Änderungen können sich auf die Ausgabe bei der CI-Nutzung auswirken und zu Unterbrechungen oder einem Abbruch des Parsings führen. - „Summe“ ist jetzt der Standardwert, da dieser Messwert am häufigsten für wiederholte Ereignisse verwendet wird und in diesen Fällen zuerst Daten verworfen würden.
- Die Funktion wurde angepasst, um sie besser anpassbar zu machen. Es sind jetzt mehr Modi verfügbar.
- Modusnamen sind jetzt in den Messwertausgabenamen eingebettet (in Studio und JSON)
- Es werden jetzt mit
Trace.{begin|end}AsyncSection
erstellte Scheiben unterstützt.
- Hinweis: Die folgenden
- Messwerte
- Energiesparmodus:
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
undPowerMetric.deviceSupportsPowerEnergy()
wurden hinzugefügt Metric.getResult
wurde ingetMeasurements
umbenannt, um dem Rückgabetyp zu entsprechen- Allen Starterkennungsfehlern wurden log.w-/Ausnahmelabels hinzugefügt. Das ändert nichts am aktuellen Verhalten (einige Fehler werden also geworfen, andere werden bei der Starterkennung stummgeschaltet), sondern macht es nur verständlicher. In der Regel sind das diejenigen, bei denen
Log.w()
und keine Startmesswerte erfasst werden. Es werden Ausnahmen geworfen, wenn der Start erkannt wird, mit Ausnahme von Informationen zur Frame-Zeit (aus UI-/RT-Scheiben). (Id240f, b/329145809) - Der Messwert
frameCount
wurde zuFrameTimingMetric
hinzugefügt, um Szenarien zu erkennen, in denen sich Messwerte ändern, weil sich die Anzahl der generierten Frames geändert hat (neue Animationen hinzugefügt, Fehler bei der Ungültigkeit behoben). (I1e5aa) - Es wurde erläutert, warum
frameOverrunMs
der bevorzugte Messwert für das Tracking ist, wenn er in Dokumenten verfügbar ist. (I18749, b/329478323) - Behoben wurde ein Problem, bei dem nicht abgeschlossene Frames am Anfang und Ende des Tracings miteinander gekoppelt werden konnten, was zu einer falschen Meldung als einzelner extrem langer Frame führte. (I39353, b/322232828)
- Der
FrameTimingMetric
-Fehler wurde verbessert, wenn keine Frames erstellt werden. Außerdem wird bei fehlgeschlagenem Parsen von Messwerten immer ein Link zur Fehlerbehebung ausgegeben. (I956b9) - Behebung eines Absturzes in
FrameTimingMetric
, wenn die Frame-ID nicht geparst werden konnte, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276) - Die Strenge der Prüfungen in
FrameMetrics
wurde gelockert und Fehlermeldungen wurden detaillierter. (Iadede)
- Energiesparmodus:
Änderungen bei der Erfassung des Basisprofils und dem Gradle-Plug-in seit Version 1.2.0
- Die maximale empfohlene AGP-Version wurde auf 9.0.0-alpha01 erhöht.
- Achten Sie darauf, dass
mergeArtProfile
- undmergeStartupProfile
-Aufgaben immer auf die Erstellung des Baseline-Profils warten. (I623d6, b/343086054) - Wenn ein Baseline-Profil erfolgreich generiert wurde, wird eine Zusammenfassung der Änderungen ausgegeben (I824c8, b/269484510).
- DSL hinzugefügt, um Warnungen zu deaktivieren (Ic4deb, b/331237001)
- Behebung eines Problems, durch das bei deaktiviertem
automaticGenerationDuringBuild
keine generierten Baseline-Profile für Benchmarks verwendet wurden (Ic144f, b/333024280) - Korrektur von
BaselineProfile
-Überschreibungen von Gradle-Plug-in-Eigenschaften, um die Generierung von Baseline-Profilen und Benchmarking zu ermöglichen, wenn einnonMinified
- oder Benchmark-Buildtyp angepasst wird. (Ib8f05, b/324837887) - Behebung eines Problems beim Einfügen von Bibliotheks-Baseline-Profilen in AAR vor AGP 8.3.0-alpha15. (I1d2af, b/313992099)
- Die Ausgabe-URL für Baseline und Startprofil am Ende der Generierungsaufgabe wurde korrigiert. (I802e5, b/313976958)
Weitere wichtige Änderungen seit Version 1.2.0
- TraceCapture
- Der Fehler „EXITCODE 2“ beim Starten von perfetto nach einem Fehler wurde zu einer protokollierten Warnung geändert.
- AIDL-Tracing standardmäßig in Benchmarks aktivieren(erfordert API 28) (Ia0af2, b/341852305)
- Porter-Tag-Analyse standardmäßig in Benchmarks aktivieren So werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
- Das Zeitlimit für den Beginn der Ablaufverfolgung wurde erhöht, um Abstürze beim Starten der Ablaufverfolgung auf langsameren Geräten zu vermeiden (I98841, b/329145808)
- Es wurden öffentliche APIs für
PerfettoTraceProcessor.Session.queryMetrics
mit JSON-, Textproto- und Proto-Binärvarianten (nicht decodiert) hinzugefügt. Damit können Sie inTraceProcessor
integrierte Messwerte abfragen (I54d7f, b/304038382). - Aktivieren Sie den Blockierungsstart im Perfetto-Trace-Eintrag, um das Risiko von fehlenden Daten zu Beginn des Tracings zu verringern. Nur mit API 33 und höher unterstützt. (Ie6e41, b/310760059)
- JSON-Ausgabe
- In der JSON-Ausgabe wurden im Benchmark-Kontext zusätzliche Informationen hinzugefügt:
context.artMainlineVersion
– Ganzzahlversion des Art-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls-1
)context.build.id
– entspricht android.os.Build.IDcontext.build.version.codename
– entspricht android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
– entspricht dem ersten Buchstaben des Pre-Release-Codenamens (auch bei Release-Builds) (Ie5020)
- Der JSON-Ausgabe wurde eine
profilerOutput
-Liste hinzugefügt, um die Verwendung von Tools für Profiling-Traces (z.B. Perfetto, Methoden-Traces) zu vereinfachen (I05ddd, b/332604449) - Es wurde eine Warnung hinzugefügt, wenn der Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dadurch JSON-Ausgabedateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
- Wird ausgelöst, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder bei der Nachbearbeitung von Dateien zu vermeiden. (I4a5ab)
- In der JSON-Ausgabe wurden im Benchmark-Kontext zusätzliche Informationen hinzugefügt:
Version 1.3.0-rc01
7. August 2024
androidx.benchmark:benchmark-*:1.3.0-rc01
wird veröffentlicht. Version 1.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Behebung des Problems, dass
androidx.benchmark.cpuEventCounter
fehlerhafte Werte für Ereignisse ohne Anleitung generierte (I7386a, b/286306579) resumeTiming
/runWithTimingDisabled
wurde so angepasst, dass die Prioritätsreihenfolge der Messwerte berücksichtigt wird. Außerdem wurde die Auswirkung der Pausierung/Fortsetzung von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität deutlich reduziert. Wenn Sie beispielsweise CPU-Leistungszähler über das InstrumentierungsargumentcpuEventCounter.enable
verwenden, wird „timeNs“ bei Pausieren/Fortsetzen nicht mehr deutlich reduziert. (I39c2e, b/286306579, b/307445225)- Durch die Verlagerung der Umwandlung der Stack-Stichprobenerhebung aus dem Haupt-Thread wurde die Wahrscheinlichkeit verringert, dass
measureRepeatedOnMainThread
die harte Zeitüberschreitung des Haupt-Threads erreicht. (I487a8, b/342237318) - Die manuelle Kennzeichnung des Zugriffs auf neue Plattform-APIs wurde entfernt, da dies bei Verwendung von R8 mit AGP 7.3 oder höher (z.B. R8 Version 3.3) und für alle Builds bei Verwendung von AGP 8.1 oder höher (z.B. D8 Version 8.1) automatisch über die API-Modellierung erfolgt. Kunden, die AGP nicht verwenden, wird empfohlen, auf D8 Version 8.1 oder höher zu aktualisieren. Weitere Details findest du in diesem Artikel. (I9496c, b/345472586)
- AGP-Versionsprüfung hinzugefügt, um den Paketnamen als Instruktivitätsargument zu senden. Vor AGP 8.4.0 konnte der Name des Ziel-App-Pakets 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
wird veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Beim Starten von Perfetto muss EXITCODE
2
ordnungsgemäß verarbeitet werden, um eine Warnung zu protokollieren, aber fortzufahren.
Version 1.3.0-beta01
12. Juni 2024
androidx.benchmark:benchmark-*:1.3.0-beta01
wird veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.
API-Änderungen
MethodTracing.affectsMeasurementOnThisDevice
wurde aus Gründen der Einheitlichkeit inAFFECTS_MEASUREMENT_ON_THIS_DEVICE
umbenannt. (I1bdfa)- Es wurde eine experimentelle
BlackHole.consume()
API hinzugefügt, um die Beseitigung von Totcode in Mikrobenchmarks zu verhindern. (If6812, b/286091643) - Der Microbenchmark wird jetzt korrekt ausgelöst, um zu verhindern, dass das Methoden-Tracing die Messungen beeinträchtigt. Das tritt auf bestimmten Geräten auf, wenn das Methoden-Tracing erzwungen wird (über Instrumentierungsargumente oder
MicrobenchmarkConfig
) und wenn nach einem Methoden-Trace eine Messung versucht wird. Auf den betroffenen Geräten wird API 26–30 oder eine bestimmte ART-Mainline-Modulversion ausgeführt, die von dieser Störung betroffen ist. Sie können während der Laufzeit überProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
erkannt werden. (Iafb92, b/303660864)
Fehlerkorrekturen
- Die empfohlene maximale AGP-Version wurde auf 9.0.0-alpha01 erhöht. (I5bbb0)
- Dem Benchmark-Kontext wurde der Kompilierungsmodus hinzugefügt (If5612, b/325512900)
- AIDL-Tracing standardmäßig aktivieren (erfordert API 28) (Ia0af2, b/341852305)
- In der JSON-Ausgabe wurden im Benchmark-Kontext zusätzliche Informationen hinzugefügt:
context.artMainlineVersion
– Ganzzahlversion des Art-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls -1)context.build.id
=android.os.Build.ID
context.build.version.codename
=android.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
– entspricht dem ersten Buchstaben des Pre-Release-Codenamens (auch bei Release-Builds) (Ie5020)
StackSampling
berücksichtigt jetztandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53)- Ändern Sie „macro->common dependency“ in „
api()
“, damit Sie z.B.PerfettoTrace
undPerfettoConfig
leichter verwenden können. (Icdae3, b/341851833) - Achten Sie darauf, dass
mergeArtProfile
- undmergeStartupProfile
-Aufgaben immer 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 Standard-Zeitlimit für den Start des perfetto-Trace-Prozessors wurde erhöht. (I87e8c, b/329145808)
Version 1.3.0-alpha05
14. Mai 2024
androidx.benchmark:benchmark-*:1.3.0-alpha05
wird veröffentlicht. Version 1.3.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Deutlichere Ausnahme, wenn der Macrobench-Messwert für alle Iterationen Nullwerte zurückgibt (Iab58f, b/314931695)
- Den ProGuard-Regeln von MicroBench wurden zusätzliche Problemumgehungsregeln hinzugefügt, einschließlich Unterstützung für Listener-Regeln und andere beobachtete Warnungen / Fehler. (I14d8f, b/329126308, b/339085669)
- Die Methodenaufzeichnung wird während eines Makro-Benchmarks als separate Phase ausgeführt und hat keinen Einfluss mehr auf die Messungen. (If9a50, b/285912360, b/336588271)
- Zusätzliche Vorschläge zur Fehlerbehebung für die Meldung „Shader-Übertragung fehlgeschlagen“ hinzugefügt. (I5efa6, b/325502725)
Version 1.3.0-alpha04
1. Mai 2024
androidx.benchmark:benchmark-*:1.3.0-alpha04
wird veröffentlicht. Version 1.3.0-alpha04 enthält diese Commits.
API-Änderungen
- Es wurde eine experimentelle
MacrobenchmarkRule#measureRepeated
-Variante hinzugefügt, die eine benutzerdefiniertePerfettoConfig
für die vollständige benutzerdefinierte Perfetto-Sitzungsaufzeichnung verwendet. Hinweis: Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messwertklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384) - Benennen Sie
PowerMetric.deviceSupportsPowerEnergy
inPowerMetric.deviceSupportsHighPrecisionTracking
um (I5b82f). - Die Optionen
PowerMetric.deviceBatteryHasMinimumCharge()
undPowerMetric.deviceSupportsPowerEnergy()
wurden hinzugefügt, um Benchmarks je nach Geräteleistung zu ändern oder zu überspringen. (I6a591, b/322121218)
Fehlerkorrekturen
- Vergleich mit dem vorherigen Baseline-Profil hinzugefügt (I824c8, b/269484510)
- DSL hinzugefügt, um Warnungen zu deaktivieren (Ic4deb, b/331237001)
- Ausnahme für Info-Log geändert, wenn Benchmarkvarianten deaktiviert sind (I8a517, b/332772491)
- Die Erfassung von Methoden-Traces für einen Makro-Benchmark wird auf die Dauer der tatsächlichen
measureBlock()
beschränkt. Bisher wurde der Dienst beim Start des Zielprozesses gestartet und unterstützte nur Kaltstarts (Iee85a, b/300651094) - Abstürze vermeiden, wenn der Perfetto-Trace-Prozessor langsam startet (I98841, b/329145808)
Version 1.3.0-alpha03
17. April 2024
androidx.benchmark:benchmark-*:1.3.0-alpha03
wird veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es werden öffentliche API-
PerfettoTraceProcessor.Session.queryMetrics
-APIs mit JSON-, Textproto- und Proto-Binärvarianten (nicht decodiert) hinzugefügt. Damit können Sie in TraceProcessor integrierte Messwerte abfragen (I54d7f, b/304038382). - Der JSON-Ausgabe wurde
profilerOutput
hinzugefügt, um die Verwendung von Tools für Profiling-Traces (z.B. perfetto, Methoden-Traces) zu vereinfachen. (I05ddd, b/332604449) - Der Perfetto-Konfiguration für den Benchmark wurde das Tag „power“ hinzugefügt. So werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
- Das Inst-Argument
androidx.benchmark.profiling.skipWhenDurationRisksAnr
wurde hinzugefügt. Es kann auf „false“ gesetzt werden, um zu verhindern, dass Methodenaufrufe übersprungen werden, wenn die voraussichtliche Dauer zu einem ANR führen kann. Dies wird bei CI-Ausführungen dringend empfohlen. - Das experimentelle Inst-Argument
androidx.benchmark.profiling.perfCompare.enable
wurde hinzugefügt. Legen Sie es auf „wahr“ fest, um die Zeit zwischen Mess- und Profilierungsphase zu vergleichen. Nützlich z.B. zur Bewertung des Overheads des Methoden-Tracings. (I61fb4, b/329146942)
API-Änderungen
TraceSectionMetric.Mode
in eine versiegelte Klasse geändert, um zukünftige Erweiterungen zu ermöglichen, ohne vollständige Wenn-Beschreibungen zu brechen (I71f7b)TraceSectionMetric.Mode.Average
und.Count
wurden hinzugefügt und die Argumente wurden neu angeordnet, sodass das häufigste Argument (Modus) in der Argumentliste an erster Stelle steht. Dadurch müssen weniger Parameternamen angegeben werden. (Ibf0b0, b/315830077, b/322167531)Metric.getResult
ingetMeasurements
umbenannt, damit sie dem Rückgabetyp entspricht (I42595)
Fehlerkorrekturen
- Behebung eines Problems, durch das bei deaktiviertem
automaticGenerationDuringBuild
keine generierten Baseline-Profile für Benchmarks verwendet wurden (Ic144f, b/333024280) - Korrektur von
BaselineProfile
-Überschreibungen von Gradle-Plug-in-Eigenschaften, um die Generierung von Baseline-Profilen und Benchmarking zu ermöglichen, wenn einnonMinified
- oder Benchmark-Buildtyp angepasst wird. (Ib8f05, b/324837887) - Feste Methoden-Traces werden im Makro-Benchmark gelöscht, sodass Methoden-Traces auch auf langsameren Geräten vollständig erfasst und gültig sein sollten. (I6349a, b/329904950)
- Aktivieren Sie den Blockierungsstart im Perfetto-Trace-Eintrag, um das Risiko von fehlenden Daten zu Beginn des Tracings zu verringern. Nur mit API 33 und höher unterstützt. (Ie6e41, b/310760059)
- Es wurde eine Warnung hinzugefügt, wenn der Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dadurch JSON-Ausgabedateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
- Tausendertrennzeichen „,“ (Komma) für Einheitlichkeit in der Studio-Ausgabe erzwingen, wobei die Gerätesprache ignoriert wird (I3e921, b/313496656)
TraceSectionMetric
unterstützt jetzt mitTrace.{begin|end}AsyncSection
erstellte Segmente. (I91b32, b/300434906)- Allen Starterkennungsfehlern wurden log.w-/Ausnahmelabels hinzugefügt. Das ändert nichts am aktuellen Verhalten (einige Fehler werden also geworfen, andere werden bei der Starterkennung stummgeschaltet), sondern macht es nur verständlicher. In der Regel sind das diejenigen, bei denen
Log.w()
und keine Startmesswerte erfasst werden. Es werden Ausnahmen geworfen, wenn der Start erkannt wird, mit Ausnahme von Informationen zur Frame-Zeit (aus UI-/RT-Scheiben). (Id240f, b/329145809) - Brechen Sie DeXopt-Jobs im Hintergrund ab, bevor Sie einen Makro-Benchmark ausführen, um Störungen zu vermeiden. (I989ed)
- Der Messwert
frameCount
wurde zuFrameTimingMetric
hinzugefügt, um Szenarien zu erkennen, in denen sich Messwerte ändern, weil sich die Anzahl der generierten Frames geändert hat (neue Animationen hinzugefügt, Fehler bei der Ungültigkeit behoben). (I1e5aa) - Es wurde erläutert, warum
frameOverrunMs
der bevorzugte Messwert für das Tracking ist, wenn er in Dokumenten verfügbar ist. (I18749, b/329478323)
Version 1.3.0-alpha02
20. März 2024
androidx.benchmark:benchmark-*:1.3.0-alpha02
wird veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.
Neue Funktionen
Experimentelle R8-Unterstützung in Microbench über eingebettete ProGuard-Regeln. Diese Unterstützung befindet sich in der experimentellen Phase und erfordert AGP 8.3 für die Minimierung von Bibliotheksmodultests. Mit den folgenden Anweisungen können Sie die R8-Minimierung/-Optimierung in der
build.gradle
Ihres Benchmark-Moduls aktivieren. Dies sollte je nach Arbeitslast zu einer deutlichen Leistungssteigerung führen. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
Fehlerkorrekturen
- Die Warnung zur Methodenverfolgung wird jetzt in einer separaten Zeile von der Microbench-Ausgabe angezeigt. (I0455c, b/328308833)
Version 1.3.0-alpha01
21. Februar 2024
androidx.benchmark:benchmark-*:1.3.0-alpha01
wird veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.
API-Änderungen
- Die booleschen
MicrobenchmarkConfig
-Parameter wurden umbenannt, um das unnötige Wort „sollte“ zu vermeiden (Ia8f00, b/303387299) BenchmarkRule.measureRepeatedOnMainThread
wurde hinzugefügt, damit Benchmarks für den Hauptthread (z.B. solche, die sich auf Ansichten oder Compose-UIs beziehen) ANRs vermeiden können, insbesondere bei großen Suiten in der CI. (I5c86d)FrameTimingGfxInfoMetric
wurde hinzugefügt, eine experimentelle alternative Implementierung vonFrameTimingMetric
mit Messungen, die direkt von der Plattform stammen, anstatt aus dem Perfetto-Trace extrahiert zu werden. (I457cb, b/322232828)- Es wurde die Möglichkeit hinzugefügt, während einzelner
warmUp
-Iterationen ein ART-Profil zu erstellen. (I17923) - Mehrere Änderungen an der
TraceSectionMetric
API:Mode.Min
,Mode.Max
hinzufügen- Labelargument hinzufügen, um den Abschnittsnamen als Messwertlabel zu überschreiben
- Der Ausgabe wurde der Modusname hinzugefügt, um die Bedeutung des Messwerts zu verdeutlichen.
- Der Standardwert wurde in „Summe“ geändert, da dieser Messwert hauptsächlich für wiederholte Ereignisse verwendet wird. Beachten Sie diese Änderungen bei der Verwendung von Conversion-Interaktionen, da sie zu Unterbrechungen führen oder das Parsen beeinträchtigen 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)
- Fehlerbehebung beim Einfügen von Bibliotheks-Baseline-Profilen in AAR vor AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- Ausgabe-URL für Baseline- und Startprofil am Ende der Generierungsaufgabe korrigiert (I802e5, b/313976958)
- Die Zeitüberschreitungen für Datenquellen wurden angepasst, um das Problem mit
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 Auslagern von Shadern zu überschreiben und Abstürze beim Benchmarking von Apps ohne
ProfileInstaller
1.3 zu vermeiden:androidx.benchmark.dropShaders.enable=true/false
: Kann verwendet werden, um alle Shader-Drops zu überspringen (einschließlich derjenigen, die beiStartupMode.Cold
-Starts erfolgen), insbesondere beim Benchmarking von Apps, die noch nicht ProfileInstaller 1.3 verwenden.androidx.benchmark.dropShaders.throwOnFailure=true/false
: Kann verwendet werden, um Fehler beim Ablegen von Shadern zu tolerieren, z. B. beim Benchmarking von Apps ohne Profileinstaller 1.3 (I4f573)
- Überspringen Sie die Methodeneinblendung im UI-Thread, wenn sie voraussichtlich länger als einige Sekunden dauert, und bereinigen Sie die Methodeneinblendungen, wenn ein Fehler auftritt. (I6e768)
- Wird ausgelöst, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder bei der Nachbearbeitung von Dateien zu vermeiden. (I4a5ab)
- Behoben wurde ein Problem, bei dem nicht abgeschlossene Frames am Anfang und Ende des Tracings miteinander gekoppelt werden konnten, was zu einer falschen Meldung als einzelner extrem langer Frame führte. (I39353, b/322232828)
- Verwenden Sie
--skip verification
unter API 30 und höher, wenn Sie ein Paket unter API 30–33 neu installieren, um ART-Profile in Nutzerbuilds zu löschen. So lassen sich Play Protect-Warnungen umgehen, die bei einigen Geräteklassen zu Fehlern führen. (Ic9e36) - Verwenden Sie
am force-stop
, um Apps zu beenden, die keine System-Apps wie die System-UI oder der Launcher sind. (I5e028) - Macrobenchmark wartet jetzt auf
1 second
, bis die Zielanwendung ein ART-Profil leerte (früher wurde auf500 ms
gewartet). (I85a50, b/316082056) - Der
FrameTimingMetric
-Fehler wurde verbessert, wenn keine Frames erstellt werden. Außerdem wird bei fehlgeschlagenem Parsen von Messwerten immer ein Link zur Fehlerbehebung ausgegeben. (I956b9) - Behebung eines Absturzes in
FrameTimingMetric
, wenn die Frame-ID nicht geparst werden konnte, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276) - Die Strenge der Prüfungen in
FrameMetrics
wurde gelockert und Fehlermeldungen wurden detaillierter. (Iadede)
Version 1.2
Version 1.2.4
17. April 2024
androidx.benchmark:benchmark-*:1.2.4
wird veröffentlicht. Version 1.2.4 enthält diese Commits.
Fehlerkorrekturen
- Das Problem wurde behoben, dass das Srcset des Referenzprofils in Benchmarkvarianten nicht eingerichtet wurde. Außerdem wird
automaticGenerationDuringBuild
in Bibliotheken korrigiert, die eine zyklische Abhängigkeit verursachen. (I28ab7, b/333024280) - Verwenden Sie
am force-stop
, um Apps zu beenden, die keine System-Apps wie die System-UI oder der Launcher sind. Dadurch werden Abstürze vonStartupMode.COLD
-Benchmarks behoben, die durch die Meldung „Paket $package darf vor dem Kaltstart nicht ausgeführt werden!“ verursacht wurden, da das Beenden des Prozesses nicht vollständig erfolgreich war. (I5e028)
Version 1.2.3
24. Januar 2024
androidx.benchmark:benchmark-*:1.2.3
wird veröffentlicht. Version 1.2.3 enthält diese Commits.
Fehlerkorrekturen
- Ausnahme aus dem Baseline-Profil-Gradle-Plug-in entfernt, wenn die AGP-Version 8.3.0 oder höher ist
- Behebung eines Problems beim Einfügen von Bibliotheks-Baseline-Profilen in AAR vor AGP 8.3.0-alpha15.
Version 1.2.2
1. Dezember 2023
androidx.benchmark:benchmark-*:1.2.2
wird veröffentlicht. Version 1.2.2 enthält diese Commits.
Baseline-Profile
- In den Ausführungsprotokollen wird der Pfad der Ausgabedatei des Baseline-Profils als URI der lokalen Datei angezeigt (aosp/2843918, aosp/2853665, b/313976958).
Version 1.2.1
15. November 2023
androidx.benchmark:benchmark-*:1.2.1
wird veröffentlicht. Version 1.2.1 enthält diese Commits.
Neue Funktionen
- Verbesserte Fehlermeldung, wenn Nutzer Testvarianten deaktivieren (b/307478189)
- Es wurden Properties hinzugefügt, um die Einbindung von AS-Tests zu unterstützen (b/309805233, b/309116324).
Version 1.2.0
18. Oktober 2023
androidx.benchmark:benchmark-*:1.2.0
wird 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 die Erfassung und Einbindung von Baseline-Profilen in Ihren Test- und Build-Workflow.
BaselineProfileRule.collect
ist jetzt stabil. Es handelt sich um eine optimierte und vereinfachte Version der vorherigen experimentellenBaselineProfileRule.collectBaselineProfile
API.- Geben Sie einfach
packageName
an und steigern Sie die Zugriffe auf 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
- Korrigierte Erhebung des Baseline-Profils unter Android U und höher (Id1392, b/277645214)
Macrobenchmark
- Kompilierung
- Der Kompilierungsstatus wird bei Macrobenchmark jetzt bei jeder Kompilierung korrekt zurückgesetzt. Unter Android 14 muss das APK neu installiert werden. Daher wird der Benchmark unter Android 14 oder höher dringend empfohlen, wenn Sie den Status (z. B. die Nutzeranmeldung) in den gemessenen Daten beibehalten möchten.
- Sie können das Problem auch umgehen, indem Sie die App-Kompilierung separat steuern und die Kompilierung mit
CompilationMode.Ignore()
oder dem Instrumentierungsargument überspringen.
Argumente für die Instrumentierung
- Unterstützung für das Instrumentierungsargument
androidx.benchmark.dryRunMode.enable
(bereits im Mikrobenchmark verfügbar) für schnellere Validierungsläufe (z.B. beim Erstellen des Benchmarks oder vor dem Einreichen) - Unterstützung für
androidx.benchmark.profiling.mode=StackSampling
undMethodTracing
. androidx.benchmark.enabledRules
wurde hinzugefügt, um die Laufzeitfilterung von Baseline-Profilen und Makrobenchmark-Regeln zu ermöglichen- Das Argument
androidx.benchmark.perfettoSdkTracing.enable
wurde hinzugefügt, um das Tracing mit tracing-perfetto zu aktivieren, z.B. das Compose-Recomposition-Tracing. Hinweis: Bei Verwendung mitStartupMode.COLD
wird das Timing erheblich beeinträchtigt, da die Tracing-Bibliothek beim Starten der App geladen und aktiviert wird.
- Unterstützung für das Instrumentierungsargument
Voraussetzungen
- Für Macrobenchmark ist jetzt
ProfileInstaller
1.3.0 oder höher in der Ziel-App erforderlich, um die Profilerfassung/-rücksetzung und das Löschen des Shader-Caches zu aktivieren.
- Für Macrobenchmark ist jetzt
Neue experimentelle Metrics APIs
- Die experimentelle Funktion
TraceSectionMetric
wurde hinzugefügt, mit der sich einfache Zeitangaben austrace("") {}
-Blöcken in Ihrer App extrahieren lassen. Mit TraceMetric können Sie die vollständigen Abfragefunktionen von PerfettoTraceProcessor
nutzen. - Die experimentelle Schaltfläche
PowerMetric
zum Erfassen von Informationen zur Stromnutzung wurde hinzugefügt. - Das experimentelle Feld
MemoryCountersMetric
zum Zählen von Seitenfehlern wurde hinzugefügt. - Die experimentelle
PerfettoTraceProcessor
API wurde hinzugefügt. Sie wird intern verwendet, um Messwerte aus System-Traces (Perfetto-Traces) zu extrahieren.
- Die experimentelle Funktion
Fehlerkorrekturen
- Abstürze beim Installieren oder Extrahieren von Profilen aus einer App, die aus mehreren APKs installiert wurde (z.B. aus einem App-Bundle), wurden behoben.
- Behoben:
FrameTimingMetric
Frames mit inkonsistenten Frame-IDs wurden ignoriert (in der Regel Frames während von Wellen bei API 31 und höher) (I747d2, b/279088460) - Fehler beim Parsen von Protokollen mit mehr als 64 MB behoben (Ief831, b/269949822)
- Fehler behoben, die auftraten, wenn das Betriebssystem-Image des Geräts (insbesondere des Emulators) nicht richtig für die Ablaufverfolgung oder Kompilierung konfiguriert war
- Akkustandprüfung für Geräte ohne Akku (Mikro- und Makrogeräte) überspringen
- Verbesserte Dateiausgabe mit klareren Fehlermeldungen bei ungültigen Ausgabeverzeichnissen und sichereren Standardeinstellungen
- Verbesserte Stabilität von
StartupMode.COLD
durch konsequentes Löschen des Shader-Cache (auch überMacrobenchmarkScope.dropShaderCache
verfügbar) - Leanback-Fallback für
startActivityAndWait
korrigiert
Mikrobenchmark
- Funktionen
- Das Profiling wurde in eine separate Phase verschoben, die nach anderen Messwerten ausgeführt wird. So können in einem Testlauf sowohl genaue Zeitangaben als auch Profiling-Ergebnisse angezeigt werden.
- Experimentelle APIs
- Die experimentelle
MicrobenchmarkConfig
API zum Definieren benutzerdefinierter Messwerte und Konfigurieren von Tracing und Profiling wurde hinzugefügt. Kann verwendet werden, um Methoden-Traces oder Tracepoints zu erfassen (beachten Sie jedoch den Overhead beim Tracing). - Es wurden experimentelle APIs zur Steuerung von
BenchmarkState
getrennt vonBenchmarkRule
ohne JUnit hinzugefügt. - Es wurde ein experimenteller
PerfettoTrace
-Eintrag hinzugefügt, um Perfetto-Traces mit benutzerdefinierter Konfiguration getrennt von Benchmark-APIs zu erfassen.
- Die experimentelle
- Fehlerkorrekturen
- Problembehebung für fehlende Anfangs-Leerzeichen in der Android Studio-Benchmark-Ausgabe.
- Problem behoben, durch das Warnungen in der Android Studio-Benchmark-Ausgabe möglicherweise nicht ausgegeben wurden.
- Der Absturz von
SampledProfiling
unter Android 13 (API 33) und höher wurde behoben. - Die Leistung von
dryRunMode
wurde durch das Überspringen vonIsolationActivity
und Perfetto-Tracing massiv verbessert (bis zu 10-mal schnellerer Modus für den Trockenlauf bei älteren Betriebssystemversionen).
Version 1.2.0-rc02
6. Oktober 2023
androidx.benchmark:benchmark-*:1.2.0-rc02
wird veröffentlicht. Version 1.2.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Die Benchmarkdateiausgabe wurde korrigiert, damit das Kopieren von
BaselineProfile
-Plug-in-Dateien nicht mehr unterbrochen wird. Die Dateien wurden generiert und vom Gerät kopiert, aber so umbenannt, dass sie vom Gradle-Plug-in nicht erkannt wurden. (I8dbcc, b/303034735, b/296453339) - Die
tracing-perfetto
-Fehlermeldungen beim Laden wurden klarer formuliert, wenn Code aus dem Macrobenchmark-Modul in die Zielanwendung eingefügt wird.
Version 1.2.0-rc01
20. September 2023
androidx.benchmark:benchmark-*:1.2.0-rc01
wird veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Wenn die Perfetto SDK-Analyse in einem Benchmark nicht initialisiert werden kann, wird jetzt eine Ausnahme mit einer Anleitung zur Behebung des Problems geworfen. (I6c878, b/286228781)
- Behebung des OOM-Absturzes beim Konvertieren von ART-Methoden-Traces in das perfetto-Format. (I106bd, b/296905344)
- (Makrobenchmark) Das Label für die Methodenaufzeichnung wurde bei der Verknüpfung in der Studio-Testausgabe verdeutlicht. Außerdem wurden die Dateinamen für die Methodenaufzeichnung so festgelegt, dass sie auf dem Gerät/Host eindeutig sind, damit sie nicht überschrieben werden, wenn mehrere Benchmarks ausgeführt werden. (I08e65, b/285912360)
- Sorgt dafür, dass das Gerät beim Erfassen eines Baseline-Profils aktiv ist. (I503fc)
Version 1.2.0-beta05
30. August 2023
androidx.benchmark:benchmark-*:1.2.0-beta05
wird veröffentlicht. Version 1.2.0-beta05 enthält diese Commits.
Neue Funktionen
- Das Baseline Profile Gradle Plugin unterstützt jetzt das Android Gradle Plugin 8.3. (aosp/2715214)
Version 1.2.0-beta04
23. August 2023
androidx.benchmark:benchmark-*:1.2.0-beta04
wird veröffentlicht. Version 1.2.0-beta04 enthält diese Commits.
Neue Funktionen
- Das Gradle-Plug-in für Baseline-Profile unterstützt jetzt das Android Gradle-Plug-in 8.3. (aosp/2715214)
Fehlerkorrekturen
- Beheben Sie Fehler beim Schreiben, Verschieben und Abrufen von Dateien (insbesondere von parametrisierten Tests), indem Sie die Ausgabedateinamen weiter bereinigen und „=“ und „:“ in den Ausgabedateinamen vermeiden. (I759d8)
Version 1.2.0-beta03
9. August 2023
androidx.benchmark:benchmark-*:1.2.0-beta03
wird veröffentlicht. Version 1.2.0-beta03 enthält diese Commits.
API-Änderungen
- Es wurde ein Argument hinzugefügt, um
TraceSectionMetric
nur auf das Zielpaket zu filtern. Diese Option ist standardmäßig aktiviert (Ia219b, b/292208786)
Fehlerkorrekturen
- Das Instrumentierungsargument
fullTracing.enable
wurde inperfettoSdkTracing.enable
umbenannt, um für Konsistenz mit dem Artefaktnamen und anderen Referenzen zu sorgen.fullTracing.enable
funktioniert weiterhin als Fallback. (I7cc00) - Interne Tracepoints der Benchmark-Bibliothek (einschließlich Microbenchmark-Schleifen-/Phasen-Tracing) werden jetzt im Studio-System-Trace-Viewer angezeigt und in Perfetto unter dem richtigen Prozess verschachtelt. (I6b2e7, b/293510459)
- Der Fehler „NOT-PROFILEABLE“ bei Macrobenchmark wurde in API 31 und höher entfernt. Außerdem wird die Prüfung, ob ein Gerät für die Profilierung geeignet ist, auf gerooteten Geräten mit eng/userdebug übersprungen. (I2abac, b/291722507)
- Wenn Sie Dex-Layoutoptimierungen verwenden, werden Startprofilregeln jetzt auch als Baseline-Profilregeln betrachtet. (aosp/2684246, b/293889189)
Version 1.2.0-beta02
26. Juli 2023
androidx.benchmark:benchmark-*:1.2.0-beta02
wird veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.
API-Änderungen
- Es wurden experimentelle APIs für benutzerdefinierte Messwerte und Konfigurationen von MicroBench hinzugefügt (z.B. Profiler und Tracing). (I86101, b/291820856)
Fehlerkorrekturen
- Fehler in macrobench melden, wenn das Betriebssystem für die Ablaufverfolgung falsch konfiguriert ist. Dieser Fehler wurde kürzlich in den ARM64-Emulatoren der API 26/28 behoben. (I0a328, b/282191686)
- Es wurde ein Detail zum Fehler beim Zurücksetzen der Kompilierung hinzugefügt, um das Aktualisieren des Emulators vorzuschlagen, da dieses Problem bei einigen Emulatoren vor Kurzem behoben wurde. (I8c815, b/282191686)
- Machen Sie
androidx.test.uiautomator:uiautomator:2.2.0
zu einerapi
- statt einerimplementation
-Abhängigkeit. (I1981e)
Version 1.2.0-beta01
18. Juli 2023
androidx.benchmark:benchmark-*:1.2.0-beta01
wird veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Warnungen, die in der Benchmark-Ausgabe in Studio manchmal unterdrückt wurden, wurden behoben. Außerdem wurde ein Problem behoben, bei dem führende Leerzeichen in der Benchmark-Ausgabe in Studio nicht angezeigt wurden (Ia61d0, b/227205461, b/286306579, b/285912360)
- Kommentar für
FrameTimingMetric
korrigiert. Der untergeordnete Messwert heißtframeDurationCpuMs
. (Ib097f, b/288830934).
Version 1.2.0-alpha16
21. Juni 2023
androidx.benchmark:benchmark-*:1.2.0-alpha16
wird 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 für Makro-Benchmarks für
androidx.benchmark.profiling.mode = MethodTracing
(I7ad37, b/285912360) - Das Mikrobenchmark-Profiling wurde in eine separate Phase verschoben. Es erfolgt also nach der Messung, anstatt sie zu ersetzen.
MethodTracing
-Trace-Abschnitte sind jetzt auch im erfassten Perfetto-Trace enthalten, sofern vorhanden. (I9f657, b/285014599) - Fügen Sie
TraceSectionMetric
mitMode.Sum
einen Zählwert hinzu. (Ic121a, b/264398606)
Version 1.2.0-alpha15
7. Juni 2023
androidx.benchmark:benchmark-*:1.2.0-alpha15
wird veröffentlicht. Version 1.2.0-alpha15 enthält diese Commits.
Neue Funktionen
- Es wurde eine experimentelle
MemoryUsageMetric
zum Überwachen der Speichernutzung einer Zielanwendung hinzugefügt. (I56453, b/133147125, b/281749311) - Unterstützung für vollständig benutzerdefinierte Perfetto-Konfigurationen mit
PerfettoTrace.record
hinzugefügt (If9d75, b/280460183) - Property zum Überspringen der Generierung des Baseline-Profils hinzugefügt. Verwendung:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
API-Änderungen
- Die
collectBaselineProfile
API generiert immer stabile Baseline-Profile. DiecollectStableBaselineProfile
API wurde entfernt und sollte stattdessen durchcollectBaselineProfile
ersetzt werden. (I17262, b/281078707) - Das Argument
filterPredicate
vonBaselineProfileRule
wurde in einen nicht-null-Wert mit einem entsprechenden Standardwert geändert, damit das Standardfilterverhalten in den Dokumenten klarer ist. (I3816e)
Fehlerkorrekturen
- Deaktivieren Sie
IsolationActivity
und Perfetto-Tracing indryRunMode
, um die Leistung erheblich zu verbessern, da diese Funktionen den Großteil der Laufzeit in Anspruch genommen haben. (Ie4f7d) - Unterstützung für Stichprobenerhebungen des Aufrufstacks in Makrobenchmarks mit den Instrumentierungstestargumenten
androidx.benchmark.profiling.mode=StackSampling
undandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Behebung eines Absturzes beim Setzen von Shadern unter Android U (API 34) und in Emulatoren. (I031ca, b/274314544)
Version 1.2.0-alpha14
3. Mai 2023
androidx.benchmark:benchmark-*:1.2.0-alpha14
wird veröffentlicht. Version 1.2.0-alpha14 enthält diese Commits.
Fehlerkorrekturen
- Behebung eines Problems, bei dem
FrameTimingMetric
Frames mit inkonsistenten Frame-IDs ignorierte Dies würde dazu führen, dass bei einigen Animationen auf neueren Plattformversionen (API 31 und höher) viele Frames ignoriert werden, währendRenderThread
animiert wird (z.B. bei einer Wellenbewegung). (I747d2, b/279088460) - Das Parsen von Trace-Prozessoren für Traces, die größer als 64 MB sind, wurde korrigiert. (Ief831, b/269949822)
- Behoben wurde ein Fehler, bei dem die Erstellung des Baseline-Profils auf Android U aufgrund der unterschiedlichen Ausgabe des Befehls
pm dump-profiles
fehlgeschlagen ist. (Id1392, b/277645214) - Script zum Sperren der GPU-Taktfrequenz korrigiert, damit Strings richtig verglichen werden (I53e54, b/213935715)
Version 1.2.0-alpha13
5. April 2023
androidx.benchmark:benchmark-*:1.2.0-alpha13
wird veröffentlicht. Version 1.2.0-alpha13 enthält diese Commits.
API-Änderungen
- Beim Generieren von Baseline-Profilen wurde der Parameter „Profiltyp“ hinzugefügt, um die kommende Funktion für Startprofile zu unterstützen (Ie20d7, b/275093123)
- Es wurde eine neue experimentelle
TraceMetric
API zum Definieren vollständig benutzerdefinierter Messwerte basierend auf dem Inhalt einer Perfetto-Spur hinzugefügt. (I4ce31, b/219851406) - Fügen Sie einen experimentellen Messwert hinzu, um die Anzahl der Seitenfehler während eines Benchmarks zu ermitteln. (I48db0)
Version 1.2.0-alpha12
22. März 2023
androidx.benchmark:benchmark-*:1.2.0-alpha12
wird veröffentlicht. Version 1.2.0-alpha12 enthält diese Commits.
Neue Funktionen
- Das neue gradle-Plug-in für Baseline-Profile wird in der Alphaversion veröffentlicht. Damit lässt sich ein Baseline-Profil einfacher generieren und der Entwickler-Workflow wird vereinfacht.
API-Änderungen
- Die Unterstützung für Perfetto-Tracing in API 21 und 22 wurde entfernt. Dazu gehören sowohl Mikrobenchmarks 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
PerfettoTraceProcessor
hinzugefügt, um das Parsen von Trace-Inhalten zu ermöglichen. Dies ist ein Schritt in Richtung vollständig benutzerdefinierter Messwerte, die auf Perfetto-Trace-Daten basieren. (I2659e, b/219851406)
Version 1.2.0-alpha11
8. März 2023
androidx.benchmark:benchmark-*:1.2.0-alpha11
wird veröffentlicht. Version 1.2.0-alpha11 enthält diese Commits.
Fehlerkorrekturen
- Abstürze in
MacrobenchmarkRule
undBaselineProfileRule
beim Neuinstallieren oder Extrahieren von Profilen aus einem App-Bundle mit mehreren APKs wurden behoben. (I0d8c8, b/270587281)
Version 1.2.0-alpha10
22. Februar 2023
androidx.benchmark:benchmark-*:1.2.0-alpha10
wird veröffentlicht. Version 1.2.0-alpha10 enthält diese Commits.
Neue Funktionen
- Unter Android 14 und höher werden Zielanwendungen von 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 vor jedem Benchmark-Lauf den gesamten Anwendungsstatus (z.B. Nutzeranmeldung) zu entfernen. (I9b08c, b/249143766)
Fehlerkorrekturen
DryRunMode
stürzt nicht mehr ab, wenn das Profil leer ist, weil die Kompilierung übersprungen wird. Stattdessen wird eine einzelne Iteration ausgeführt und das Profil extrahiert, damit etwas erfasst wird. (I2f05d, b/266403227)- Behebung des Absturzes von
PowerMetric
beim Prüfen der Verfügbarkeit von Leistungsstatistiken auf alten API-Ebenen. (5faaf9, b/268253898)
Version 1.2.0-alpha09
11. Januar 2023
androidx.benchmark:benchmark-*:1.2.0-alpha09
wird veröffentlicht. Version 1.2.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Es ist jetzt möglich,
None
an das Instrumentierungsargumentandroidx.benchmark.enabledRules
zu übergeben, um die Generierung aller Benchmarks / Referenzprofile zu deaktivieren. (I3d7fd, b/258671856) - Behebung eines Problems beim Erfassen von
PerfettoTrace
in App-Modulen (d.h. nicht selbst instrumentierte Test-APKs) (I12cfc) - Die Reihenfolge der ADB-Pull-Argumente für das Baseline-Profil in der Studio-Ausgabe wurde korrigiert (I958d1, b/261781624)
- Die Arm-Emulator-API 33 wird jetzt beim Ausführen eines Makrobenchmarks korrekt erkannt und die Warnung wird korrekt ausgegeben. (69133b,b/262209591)
- Akkustandprüfung bei Geräten ohne Akku im Makrobenchmark überspringen (fe4114, b/232448937)
Version 1.2.0-alpha08
7. Dezember 2022
androidx.benchmark:benchmark-*:1.2.0-alpha08
wird veröffentlicht. Version 1.2.0-alpha08 enthält diese Commits.
API-Änderungen
- Die experimentellen APIs
PerfettoTrace.record {}
undPerfettoTraceRule
wurden hinzugefügt, um Perfetto-Traces (auch als System-Traces bezeichnet) im Rahmen eines Tests zu erfassen und das Testverhalten und die Leistung zu prüfen. (I3ba16) BaselineProfileRule
akzeptiert jetzt ein Filterprädikat anstelle einer Liste von Paketpräfixen. So haben Sie beim Test die volle Kontrolle über das Filtern. (I93240)- Fügen Sie eine experimentelle API
BaselineProfileRule.collectStableBaselineProfile
hinzu, die wartet, bis ein Baseline-Profil für N Iterationen stabil ist. (I923f3) - Es ist jetzt möglich, beim Generieren von Baseline-Profilen mit
BaselineProfileRule
ein Präfix für den Ausgabedateinamen anzugeben. (I7b59f, b/260318655)
Fehlerkorrekturen
- Die Sicherheit beim Schreiben von Dateiausgaben wurde verbessert, um zu verhindern, dass Ausgabedateien stillschweigend nicht geschrieben oder angehängt werden, insbesondere bei API 21/22. (If8c44, b/227510293)
- Korrigieren Sie die
simpleperf
-Trace-Ausgabe, damit die Datei richtig erstellt und platziert wird. Außerdem sollten damit allgemeiner Probleme behoben werden, bei denen eine Datei von gradle nicht erfolgreich abgerufen wird. (I12a1c, b/259424099) - Verbesserte Fehlermeldung, die ausgegeben wird, wenn der Profileinstaller zu alt ist. Sie werden jetzt aufgefordert, die Version von „profileinstaller“ (1.2.1) zu aktualisieren, um Baseline-Profile für API 31 bis 33 zu messen, anstatt dass Sie darüber informiert werden, dass dies nicht unterstützt wird. (Ia517f, b/253519888)
- Fehler bei mehreren Shell-Befehlen behoben: Fehlermeldung „Print needed API <=23“ bei fehlgeschlagener Einrichtung der perfetto-Capture-Binärdatei und fehlgeschlagener Trace-Aufzeichnung (Ib6b87, b/258863685)
- Generierte Profilregeln automatisch sortieren, um die Anzahl der Änderungen zu minimieren, die im Laufe der Zeit auftreten (beim Check-in von Profilregeln in die Versionskontrolle). (Ie2509)
- Behobener Absturz bei nicht gerooteten Builds unter Android 13 (API 33) mit der Meldung
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
(I6c245, b/259508183)
Bekannte Probleme
– MacrobenchmarkScope.dropShaderCache()
kann aufgrund einer fehlenden Registrierung für die Übertragung im Manifest des Profileinstallers abstürzen, das noch nicht veröffentlicht wurde. (I5c728, b/258619948) Um das Problem in profileinstaller:1.3.0-alpha02
zu umgehen, fügen Sie der AndroidManifest.xml Ihrer Anwendung (nicht der des 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
wird veröffentlicht. Version 1.2.0-alpha07 enthält diese Commits.
API-Änderungen
- Die
PowerMetric
API zum Messen von Energie und Leistung in Makrobenchmarks wurde hinzugefügt. (Ife601, b/220183779) MacrobenchmarkScope.dropShaderCache()
wurde korrigiert, damit der Shader-Cache tatsächlich gelöscht wird. Dadurch werden etwa 20 ms Rauschen ausStartupMode.COLD
-Benchmarks entfernt, da Shader jetzt bei jeder Iteration konsequent gelöscht werden. Bisher wurden bei derPartial
-Kompilierung mit Aufwärmiterationen fälschlicherweise zu hohe Werte gemeldet, da das Shader-Caching während des Aufwärmens häufiger vorkam. Für diese Fehlerbehebung ist entweder ein gerootetes Gerät oder die Verwendung vonprofileinstaller:1.3.0-alpha02
in der Ziel-App erforderlich. Informationen zu den API-Änderungen derProfileInstaller
-Bibliothek finden Sie auf der Seite ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)TraceSectionMode("label", Mode.Sum)
wurde hinzugefügt, um die Gesamtzeit zu messen, die in mehreren Trace-Abschnitten mit demselben Label verbracht wurde. Beispielsweise wird inTraceSectionMetric("inflate", Mode.Sum)
der MesswertinflateMs
für die Gesamtzeit in einem Makrobenchmark erfasst, die für die Inflation aufgewendet wurde. Außerdem wurde die Anforderung an API 29 entfernt, daTraceSectionMetric
mitandroidx.tracing.Trace
bis hinunter zu niedrigeren API-Levels zusammenarbeitet, wennforceEnableAppTracing
in der Ziel-App verwendet wird. (Id7b68, b/231455742)
Fehlerkorrekturen
- Die Sicherheit aller internen Shell-Befehle wurde durch Validierung aller Ausgaben/Fehler verbessert. (I5984d, b/255402908, b/253094958)
- Gerät im
adb pull
-Befehl des Baseline-Profils angeben, damit der Pull-Befehl einfach kopiert werden kann, wenn mehrere Geräte verbunden sind (bis zu einem Emulator) (I6ac6c, b/223359380) - Fehler hinzufügen, wenn die Macrobenchmark-Test-APK nicht als selbst instrumentiert eingerichtet ist Dieser Fehler verhindert das Makro-Benchmarking innerhalb des Prozesses der Ziel-App. Während des Prozesses konnte macrobench die App nicht kompilieren/beenden/kalt starten oder seine eigenen Berechtigungen steuern (I4279b)
- Ein Problem in
measureRepeated()
wurde behoben, durch dasStartupMode.COLD
den Zielprozess nachsetupBlock
nicht beendet hat. WennsetupBlock
jetzt mit der App interagiert, wird der App-Prozess nicht mehr ausgeführt und es wird keine gültige Kaltstartmessung durchgeführt. (I8ebb7)
Version 1.2.0-alpha06
24. Oktober 2022
androidx.benchmark:benchmark-*:1.2.0-alpha06
wird veröffentlicht. Version 1.2.0-alpha06 enthält diese Commits.
API-Änderungen
- Für
BaselineProfileRule
ist unter Android 13 (API 33) keine Root-Berechtigung mehr erforderlich und die API ist nicht mehr experimentell. (Ie0a7d, b/250083467, b/253094958)- Durch diese Änderung wird auch behoben, wie Profile von einer App auf nicht gerooteten Geräten auf die Festplatte geschrieben werden. Es ist jedoch erforderlich, die Abhängigkeit des Profileinstallers der Ziel-App zu aktualisieren.
- Wenn Sie
BaselineProfileRule
oderCompilationMode.Partial(warmupIterations)
auf einem nicht gerooteten Gerät verwenden möchten, müssen Sie auch Ihre Ziel-App aufandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
aktualisieren. Dadurch kann das Profil korrekt auf die Festplatte geschrieben werden, damit es kompiliert oder extrahiert werden kann.
Fehlerkorrekturen
- Behebung des Absturzes von
SampledProfiling
bei API 33 und höher (I40743, b/236109374)
Version 1.2.0-alpha05
5. Oktober 2022
androidx.benchmark:benchmark-*:1.2.0-alpha05
wird veröffentlicht. Version 1.2.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Behebung eines Fehlers bei der Frame-Aufschlüsselung in der Studio-System-Trace-Ansicht für Benchmark-Aufzeichnungen (I3f3ae, b/239677443)
- Korrigieren Sie
FrameTimingMetric
, sodass fürFrameOverrun
API 31 anstelle von 29 erforderlich ist (I716dd, b/220702554) - Iteration in
BaselineProfileRule
festlegen und eine klare Fehlermeldung ausgeben, wenn das Zielpaket nicht installiert ist (wurde bereits für MacrobenchmarkRule gemacht). (Ic09a3, b/227991471)
Version 1.2.0-alpha04
21. September 2022
androidx.benchmark:benchmark-*:1.2.0-alpha04
wird veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.
Neue Funktionen
Unterstützung für das Instrumentierungsargument
dryRunMode.enable
für Macrobenchmark hinzufügen (bereits in Micro verfügbar), um die lokale Entwicklung zu beschleunigen und die App-Automatisierung zu validieren (z.B. in presubmit). Dadurch wird die Iteration auf „1“ überschrieben, die Kompilierung übersprungen, alle Konfigurationsfehler unterdrückt und die Ausgabe der JSON-Datei für die Messung deaktiviert. (Ib51b4, b/175149857)In der Gradle-Befehlszeile:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
In build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Fehlerkorrekturen
- Bei
StartupTimingMetric
ist es nicht mehr erforderlich, dass gemessene Aktivitäten überMacrobenchmarkScope.startActivityAndWait()
gestartet werden. Das bedeutet, dass der Messwert beispielsweise Startvorgänge über Benachrichtigungen,Context.startActivity()
, In-App-Aktivitäten oder Shell-Befehle erfassen kann. (Ia2de6, b/245414235) - Fehler behoben, bei dem
startActivityAndWait
bei Emulatoren beim Warten auf den Abschluss des Starts ein Zeitlimit überschreitet, indem die Strenge der Frameerkennung verringert wurde. (Ibe2c6, b/244594339, b/228946895)
Version 1.2.0-alpha03
7. September 2022
androidx.benchmark:benchmark-*:1.2.0-alpha03
wird veröffentlicht. Version 1.2.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es wurden experimentelle APIs hinzugefügt, mit denen
BenchmarkState
unabhängig vonBenchmarkRule
/JUnit4
verwendet werden kann. (Id478f, b/228489614)
Fehlerkorrekturen
- Leanback-Fallback für
startActivityAndWait
hinzugefügt (01ed77, b/242899915)
Version 1.2.0-alpha02
24. August 2022
androidx.benchmark:benchmark-*:1.2.0-alpha02
wird veröffentlicht. Version 1.2.0-alpha02 enthält diese Commits.
API-Änderungen
- Standardmäßig ist
am force stop
fürMacrobenchmarkScope.killProcess()
festgelegt, auch wenn das Gerät gerootet ist, mit Ausnahme 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 der Prüfung von ODPM-Energiemesswerten auf nicht gerooteten Geräten (a38c78, b/229623230)
Version 1.2.0-alpha01
27. Juli 2022
androidx.benchmark:benchmark-*:1.2.0-alpha01
wird veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.
Neue Funktionen
- Neue Komponente „tracing-perfetto-common“, mit der Tools das Perfetto SDK-Tracing in einer App aktivieren können, die es freigibt (I2cc7f)
Das Instrumentierungsargument
androidx.benchmark.enabledRules
wurde hinzugefügt, um Makrobenchmark-Ausführungen auf Benchmarks oder nur auf die Generierung von Baseline-Profilen zu filtern. Geben Sie „Macrobenchmark“ oder „BaselineProfile“ an, um nur einen Testtyp auszuführen, z.B. wenn Sie nurBaselineProfiles
in einem Emulator generieren möchten. Durch Kommas getrennte Liste wird ebenfalls unterstützt. (I756b7, b/230371561)Beispiel in der 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
API-Änderungen
- Neue
PowerMetric
zum Messen von Energie- und Leistungsaufgaben in Benchmarks hinzugefügt. (I9f39b, b/220183779) - Neuer Kompilierungsmodus
CompilationMode.Ignore
hinzugefügt, um das Zurücksetzen des Profils und die Kompilierung zu überspringen. (Ibbcf8, b/230453509) BaselineProfileRule#collectBaselineProfile
wurde ein neuer Parameter hinzugefügt, um die Ausgabedatei nach Paketnamen zu filtern (If7338, b/220146561)- Ermöglicht es Entwicklern, das Gerät zu entladen, um den Stromverbrauch zu messen. (I6a6cb)
- Es wurde die Möglichkeit hinzugefügt, den Shader-Cache in
MacrobenchmarkScope
zu löschen. (I32122) - Hiermit können Entwickler die Anzeige des Messwerttyps und die gewünschten Untersystemkategorien konfigurieren. (I810c9)
- Bisher wurde im Benchmark ein
UnsupportedOperationException
ausgegeben, wenn der Benchmark auf einem nicht unterstützten Gerät ausgeführt wurde. Jetzt tritt der Fehler nur noch auf, wenn der Messwert auf dem nicht unterstützten Gerät verwendet wird (z. B.PowerMetric.configure
). (I5cf20, b/227229375) TotalPowerMetric
undTotalEnergyMetric
wurden hinzugefügt, um die Gesamtleistung und ‑energie in jeder Systemkategorie in Makrobenchmarks zu messen. (I3b26b, b/224557371)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem kompilierte Methoden bei nicht gerooteten Builds zwischen den einzelnen Makro-Benchmarks nicht richtig zurückgesetzt wurden. Leider muss die APK bei jeder Iteration neu installiert werden, wodurch die Anwendungsdaten für jeden Makrobenchmark gelöscht werden. (I31c74, b/230665435)
- Crash bei der Trace-Aufzeichnung in API 21/22 behoben (If7fd6, b/227509388, b/227510293, b/227512788)
- Die Erkennung des Abschlusses des Aktivitätsstarts wurde überarbeitet, um den Fehler „Keine Messwerte konnten 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
wird veröffentlicht. Version 1.1.1 enthält diese Commits.
Fehlerkorrekturen
- Behebung von
android.system.ErrnoException: open failed: EACCES
, die auf einigen Geräten mit Android 11 (API 30) oder höher auftreten. Dies ist eine Auswahl von Fehlerkorrekturen aus1.2.0-alpha01
. (aosp/2072249)
Version 1.1.0
Version 1.1.0
15. Juni 2022
androidx.benchmark:benchmark-*:1.1.0
wird veröffentlicht. Version 1.1.0 enthält diese Commits.
- Diese Version ist mit
androidx.benchmark:benchmark-*:1.1.0-rc03
identisch.
Wichtige Änderungen seit Version 1.0.0
Mit der Unterstützung für Jetpack-Makrobenchmarks können Sie App-Interaktionen wie Start und Scrollen messen. Außerdem haben Sie die Möglichkeit, Traces aufzuzeichnen und Trace-Abschnitte zu messen.
Unterstützung für Baseline-Profile
CompilationMode.Partial
, um die Effektivität von Referenzprofilen zu messen.@BaselineProfileRule
, um automatisch Baseline-Profile für eine bestimmte kritische User Journey zu generieren.
Unterstützung für Zuweisungsmesswerte und Profiling während Microbenchmark-Ausführungen.
Version 1.1.0-rc03
1. Juni 2022
androidx.benchmark:benchmark-*:1.1.0-rc03
wird 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
300ms
-Verzögerung auspressHome()
. (aosp/2086030, b/231322975)Verbessern Sie die Iterationsgeschwindigkeit des Makrobenchmarks, indem Sie die Shell-Befehle optimieren, die im Hintergrund verwendet werden. (aosp/2086023, b/231323582)
Unterstützung für verwaltete Gradle-Geräte beim Generieren von Baseline-Profilen mit Makrobenchmarks (aosp/2062228, b/228926421)
Version 1.1.0-rc02
11. Mai 2022
androidx.benchmark:benchmark-*:1.1.0-rc02
wird veröffentlicht. Version 1.1.0-rc02 enthält diese Commits.
- Hinweis: Diese Version enthält eine Verhaltensänderung, da Apps jetzt zwischen den einzelnen Benchmarks vollständig neu installiert werden, um genaue Messungen zu ermöglichen.
Fehlerkorrekturen/Verhaltensänderungen
Ein Problem wurde behoben, durch das 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 mehrere Tests dazu geführt haben, dass
CompilationMode
nur wenig oder gar keinen Einfluss auf die Messungen hatte. Um dieses Problem zu umgehen, wird in der Ziel-App jetzt jede Testmethode vollständig neu installiert. Dadurch werden die Anwendungsdaten zwischen den einzelnen Makro-Benchmarks gelöscht. (I31c74, b/230665435)Da dies verhindert, dass Apps den Status vor Tests einrichten können, 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 von macrobenchmark überspringen.Beispiel in der 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=false
Es ist jetzt möglich, ein Modul für Makrobenchmarks und Tests zur Generierung von Baseline-Profilen zu verwenden. Dazu muss das Instrumentierungsargument
androidx.benchmark.enabledRules
hinzugefügt werden. Geben Sie „Macrobenchmark“ oder „BaselineProfile“ an, um nur einen Testtyp auszuführen, z.B. wenn SieBaselineProfiles
in einem Emulator generieren. (I756b7, b/230371561)Beispiel in der 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
wird veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Für Links zur Ausgabe von Baseline-Profilen in Android Studio wird jetzt ein eindeutiger Dateiname verwendet. So spiegelt die Ausgabe immer die neuesten Ergebnisse der Verwendung eines
BaselineProfileRule
wider. ( aosp/2057008, b/228203086 )
Version 1.1.0-beta06
6. April 2022
androidx.benchmark:benchmark-*:1.1.0-beta06
wird veröffentlicht. Version 1.1.0-beta06 enthält diese Commits.
Fehlerkorrekturen
- Absturz bei der Aufzeichnung von Protokollen in API 21/22 behoben (If7fd6, b/227509388)
- Die Erkennung des Abschlusses des Aktivitätsstarts wurde überarbeitet, um den Fehler „Keine Messwerte konnten gelesen werden“ in Makrobenchmarks beim Start zu beheben. (Ia517c)
- Startmesswerte für Makrobenchmarks bei Verwendung von
CompilationMode.None()
korrigiert Vor dieser Änderung erschienCompilationMode.Partial()
langsamer alsCompilation.None()
. (611ac9).
Version 1.1.0-beta05
23. März 2022
androidx.benchmark:benchmark-*:1.1.0-beta05
wird veröffentlicht. Version 1.1.0-beta05 enthält diese Commits.
Fehlerkorrekturen
- Paket beenden, nachdem die Profilinstallation übersprungen wurde, wenn
CompilationMode.None
verwendet wird (aosp/1991373) - Ein Problem wurde behoben, bei dem Macrobenchmarks bei Verwendung von
StartupMode.COLD
keine Startmesswerte erfassen konnte. (aosp/2012227 b/218668335)
Version 1.1.0-beta04
23. Februar 2022
androidx.benchmark:benchmark-*:1.1.0-beta04
wird veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.
Fehlerkorrekturen
Behebung von fehlenden Messwerten unter Android 10 und
NoSuchElementException
, die durch nicht korrekt in den Protokollen erfasste Prozessnamen verursacht wurden. (Ib4c17, b/218668335)Verwenden Sie
PowerManager
für die Erkennung von thermischer Drosselung unter Q (API 29) und höher. Dadurch wird die Häufigkeit von Falschpositiven bei der Erkennung von thermischer Drosselung deutlich reduziert (Benchmark wird nach 90 Sekunden Wartezeit wiederholt) und Benchmarks werden bei Nutzerbuilds deutlich beschleunigt. Außerdem wird die Drosselung auch dann erkannt, wenn Taktfrequenzen gesperrt sind (wenn sie für die Umgebung des Geräts zu hoch eingestellt sind). (I9c027, b/217497678, b/131755853)Filtern Sie das gesamplete Profiling von simpleperf auf den
measureRepeated
-Thread, um die Prüfung zu vereinfachen (Ic3e12, b/217501939)Unterstützung von Messwerten aus benannten UI-Unterprozessen in mehrstufigen Apps (Ice6c0, b/215988434)
Filtern Sie die Regeln für das Baseline-Profil auf Android 9 (SDK 28). aosp/1980331 b/216508418
Profilinstallation bei Verwendung von
Compilation.None()
überspringen Melden Sie außerdem Warnungen, wenn die App eine ältere Version vonandroidx.profileinstaller
und des Android Gradle-Plug-ins verwendet. aosp/1977029
Version 1.1.0-beta03
9. Februar 2022
androidx.benchmark:benchmark-*:1.1.0-beta03
wird veröffentlicht. Version 1.1.0-beta03 enthält diese Commits.
API-Änderungen
AudioUnderrunMetric
wurde der Macrobenchmark-Bibliothek mit dem experimentellen Flag hinzugefügt, um Unterbrechungen bei der Audiowiedergabe zu erkennen (Ib5972)Für
BaselineProfileRule
wird keinsetup
-Block mehr akzeptiert, da dieser genauso funktioniert wie derprofileBlock
-Block. (Ic7dfe, b/215536447)Beispiel:
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
Fehlerkorrekturen
- Das Problem wurde behoben, dass MicroBench-Profiler-Traces bei nachfolgenden Ausführungen nicht aktualisiert wurden, wenn sie in der Studio-Ausgabe verknüpft waren (I5ae4d, b/214917025)
- Kompilierungs-Shell-Befehle unter API 23 (Ice380) verhindern
FrameCpuTime
inFrameDurationCpu
undFrameUiTime
inFrameDurationUi
umbenannt, um zu verdeutlichen, dass es sich um Zeiträume und nicht um Zeitstempel handelt, und um die Übereinstimmung mit den Präfixen zu verbessern. (I0eba3, b/216337830)
Version 1.1.0-beta02
26. Januar 2022
androidx.benchmark:benchmark-*:1.1.0-beta02
wird veröffentlicht. Version 1.1.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Die Ergebnisse von Microbenchmark-Stack-Sampling-/Method-Tracing-Profilen sind jetzt in der Studio-Ausgabe verknüpft, ähnlich wie andere Profiling-Ausgaben, und der Allokationsmesswert wird nicht unterdrückt. (Idcb65, b/214440748, b/214253245)
- BaselineProfileRule gibt jetzt den Befehl
adb pull
in Logcat und Studio-Ausgabe aus, um die generierte BaselineProfile-Textdatei abzurufen. (f08811)
Version 1.1.0-beta01
12. Januar 2022
androidx.benchmark:benchmark-*:1.1.0-beta01
wird veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Behebung des Problems, dass das Profiler-Argument „enable“ ignoriert wurde. (I37373, b/210619998)
- Die eingestellte
CompliationModes
(I98186, b/213467659) wurde entfernt. - Das Argument für das Baseline-Profil von
CompilationMode.Partial
wurde aus Gründen der Übersichtlichkeit in „enum“ geändert. (Id67ea)
Version 1.1.0-alpha13
15. Dezember 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13
wird veröffentlicht. Version 1.1.0-alpha13 enthält diese Commits.
API-Änderungen
- Der Microbench-Ausgabe unter Android Q (API 29 und höher) wird jetzt ein System-Tracing mit geringem Overhead hinzugefügt. Derzeit werden damit keine benutzerdefinierten Tracings (über die
android.os.Trace
- oderandroidx.tracing
-Jetpack APIs) erfasst, um die Ergebnisse nicht zu beeinflussen. Diese Informationen sollten Ihnen helfen, Instabilitäten zu diagnostizieren, insbesondere solche, die von Quellen außerhalb des Benchmarks stammen. (I298be, b/205636583, b/145598917) - Unterteilen Sie
CompilationModes
in drei Klassen: „Voll“, „Kein“ und „Teilweise“. Bisher wurden sie uneinheitlich nach Kompilierungsargumenten (die wir jetzt als Implementierungsdetails behandeln) und Funktionen benannt. So werden die Vor- und Nachteile, möglichen Kombinationen und das Verhalten auf verschiedenen Plattformversionen klarer. (I3d7bf, b/207132597) - Einrichtung und Analyse werden jetzt immer paarweise und in der richtigen Reihenfolge angezeigt. Sie können jetzt den Paketnamen und die Iteration abfragen. In bestimmten Warm-up-Szenarien ist die Iteration jedoch möglicherweise
null
. (Id3b68, b/208357448, b/208369635)
Fehlerkorrekturen
- Behoben:
CompilationMode.Speed
wurde fälschlicherweise alsNone
behandelt (I01137)
Version 1.1.0-alpha12
17. November 2021
androidx.benchmark:benchmark-*:1.1.0-alpha12
wird veröffentlicht. Version 1.1.0-alpha12 enthält diese Commits.
Neue Funktionen
- Fügen Sie den experimentellen Messwert „TraceSectionMetric“ für benutzerdefinierte sitzungsbasierte Zeitmessungen hinzu. (I99db1, b/204572664)
Fehlerkorrekturen
- Gerät bei jeder Iteration aufwecken, damit die Benutzeroberfläche getestet werden kann. Dazu muss der Sperrbildschirm deaktiviert sein. (Ibfa28, b/180963442)
- Mehrere Abstürze im StackSampling-Profilierungsmodus auf Emulatoren und nicht gerooteten Geräten wurden behoben (Icdbda, b/202719335)
- Die 0,5-Sekunden-Pause am Ende jeder Iteration wurde entfernt.Wenn Sie nach dieser Änderung fehlende Messwerte sehen, senden Sie bitte einen Fehlerbericht. (Iff6aa)
- Die Wahrscheinlichkeit von Datenverlusten wird reduziert und der Speicheraufwand durch das Tracing wird gesenkt (Id2544, b/199324831, b/204448861)
- Durch den Wechsel zum kompakten Speicherformat für den Zeitplan lässt sich die Größe der Protokolle um etwa 40% reduzieren. (Id5fb6, b/199324831)
- Die Implementierungen der Startmesswerte wurden aktualisiert, sodass sie immer am Ende des Renderthreads enden. So sind die Daten plattformübergreifend konsistenter und stimmen besser mit In-App-Messwerten überein. (Ic6b55)
Version 1.1.0-alpha11
3. November 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11
wird veröffentlicht. Version 1.1.0-alpha11 enthält diese Commits.
API-Änderungen
- Der Makro-Benchmark hat jetzt eine
minSdkVersion
von23
. (If2655) - Es wird eine neue experimentelle
BaselineProfileRule
hinzugefügt, mit der Baseline-Profile für die kritische User Journey der App generiert werden können. Eine detaillierte Dokumentation folgt. (Ibbefa, b/203692160) - Die Schnittstellenvariante „measureRepeated“ wurde entfernt, die für Java-Caller hinzugefügt wurde, da sie zu Unklarheiten beim Ausführen/Auflösen der Methode führte. Java-Aufrufer müssen wieder Unit.Instance von measureRepeated zurückgeben. Wenn Sie das als störend empfinden, können Sie einen Fehler melden. Wir werden das in einer zukünftigen Version prüfen. (Ifb23e, b/204331495)
Version 1.1.0-alpha10
27. Oktober 2021
androidx.benchmark:benchmark-*:1.1.0-alpha10
wird veröffentlicht. Version 1.1.0-alpha10 enthält diese Commits.
API-Änderungen
- StartupTimingMetric für API 23 zurückportieren Bei dieser neuen Implementierung wird „reportFullyDrawn()“ auch besser verarbeitet, um zu warten, bis die entsprechenden Inhalte gerendert wurden. (If3ac9, b/183129298)
- JvmOverloads wurde mehreren MacrobenchmarkScope-Methoden für Java-Caller hinzugefügt. (I644fe, b/184546459)
- Alternative MacrobenchmarkRule.measureRepeated-Funktion bereitstellen, die für die idiomatische Verwendung in der Java-Sprache ein
Consumer<MacrobenchmarkScope>
verwendet (If74ab, b/184546459)
Fehlerkorrekturen
- Fehlerbehebung für nicht früh genug gestartete Traces und fehlende Messwertdaten. Dadurch werden voraussichtlich Ausnahmen vom Typ „Keine Messwerte während des Benchmarks gelesen“ behoben, die von der Bibliothek selbst verursacht wurden. (I6dfcb, b/193827052, b/200302931)
- „FrameNegativeSlack“ wurde in „FrameOverrun“ umbenannt, um seine Bedeutung zu verdeutlichen: um wie viel der Frame sein Zeitbudget überschritten hat. (I6c2aa, b/203008701)
Version 1.1.0-alpha09
13. Oktober 2021
androidx.benchmark:benchmark-*:1.1.0-alpha09
wird veröffentlicht. Version 1.1.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Unterstützung für das Löschen des Kernel-Seitencaches ohne Root unter API 31/S und höher, was die Genauigkeit von StartupMode.COLD-Starts erhöht. (Iecfdb, b/200160030)
Version 1.1.0-alpha08
29. September 2021
androidx.benchmark:benchmark-*:1.1.0-alpha08
wird veröffentlicht. Version 1.1.0-alpha08 enthält diese Commits.
API-Änderungen
- Scroll-Makrobenchmarks für API 23 aktivieren (If39c2, b/183129298)
- Benutzeroberfläche und JSON-Ausgabe um einen neuen Typ von Stichprobenmesswert ergänzt, der sich auf die Perzentile mehrerer Stichproben pro Iteration konzentriert. (I56247, b/199940612)
- In den Benchmark-Bibliotheken zu Gleitkommamesswerten wechseln (in der Studio-Benutzeroberfläche werden sie abgeschnitten). (I69249, b/197008210)
Version 1.1.0-alpha07
1. September 2021
androidx.benchmark:benchmark-*:1.1.0-alpha07
wird veröffentlicht. Version 1.1.0-alpha07 enthält diese Commits.
API-Änderungen
- Das Mindest-API-Level wurde auf 21 erhöht, um die niedrigste API-Ebene widerzuspiegeln, die in Zukunft unterstützt werden soll. Die aktuell unterstützte Mindest-API-Version wird weiterhin über RequiredApi() übermittelt und beträgt derzeit 29 (I440d6, b/183129298).
Fehlerkorrekturen
ProfileInstaller
wurde optimiert, damit Apps mit Baseline-Profilen Makro-Benchmarks mitCompilationMode.BaselineProfile
einfacher ausführen können. (I42657, b/196074999) HINWEIS: Es ist auch eine Aktualisierung aufandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
oder höher erforderlich.- Die Benchmarks für
StartupMode.COLD
undCompilationMode.None
sind jetzt stabiler. (I770cd, b/196074999)
Version 1.1.0-alpha06
18. August 2021
androidx.benchmark:benchmark-*:1.1.0-alpha06
wird veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.
API-Änderungen
- Das Instrumentierungsargument
androidx.benchmark.iterations
wurde hinzugefügt, um die Iterationszahl beim lokalen Testen/Profilieren manuell zu überschreiben. (6188be, b/194137879)
Fehlerkorrekturen
- Simpleperf ist ab API 29 der Standard-Stichproben-Profiler. (Ic4b34, b/158303822)
Bekannte Probleme
CompilationMode.BaselineProfile
ist noch in der Entwicklung. Verwenden Sie sie 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
wird veröffentlicht. Version 1.1.0-alpha05 enthält diese Commits.
1.1.0-alpha04
wurde vor der Veröffentlichung aufgrund eines sporadisch auftretenden Absturzes abgebrochen. b/193827052
API-Änderungen
- startActivityAndWait wurde durch das Aufrufen des Starts über
am start
ersetzt. Dadurch wird die Zeit für jede Messiteration 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 verringern und den Baseline-Wert neu berechnen, wenn häufig Drosselungen erkannt werden. (I7327b)
- FrameTimingMetric funktioniert jetzt auch unter Android S Beta (Ib60cc, b/193260119)
- Verwenden Sie ein
EmptyActivity
, um die Ziel-App aus dem Zustand zu holen, in dem sie zwangsweise angehalten wurde, umCompilationMode.BaselineProfile
besser zu unterstützen. (Id7cac, b/192084204) - Die Erweiterung der Ablaufverfolgungsdatei wurde in
.perfetto-trace
geändert, um dem Plattformstandard zu entsprechen. (I4c236, b/174663039) - Der Messwert „StartupTimingMetric“ gibt jetzt den Messwert „fullyDrawnMs“ aus, um die Zeit bis zum vollständigen Rendern der Anwendung zu messen. Wenn Sie diesen Messwert für Ihre App definieren möchten, rufen Sie Activity.reportFullyDrawn auf, wenn die ursprünglichen Inhalte bereit sind, z. B. wenn die ursprünglichen Listenelemente aus der Datenbank oder dem Netzwerk geladen werden. (Methode „reportFullyDrawn“ ohne Buildversionsprüfungen bei „ComponentActivity“ verfügbar) Hinweis: Der Test muss lang genug laufen, damit der Messwert erfasst werden kann. Bei startActivityAndWait wird nicht auf reportFullyDrawn gewartet. (If1141, b/179176560)
- Die Kosten für das Anhängen von UI-Metadaten an Traces wurden um mehr als 50 ms reduziert (Ic8390, b/193923003)
- Die Abfragehäufigkeit beim Beenden des Tracings wurde drastisch erhöht, wodurch sich z.B. die Benchmarklaufzeit beim Starten um mehr als 30 % reduzieren lässt (Idfbc1, b/193723768)
Version 1.1.0-alpha03
16. Juni 2021
androidx.benchmark:benchmark-*:1.1.0-alpha03
wird veröffentlicht. Version 1.1.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue
CompilationMode.BaselineProfile
hinzugefü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, um eine nicht eingestellte API mit einer Syntax zu verwenden, die auch .gradle.kts-Nutzer unterstützt.
Z. B.
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Version 1.1.0-alpha02
18. Mai 2021
Die Benchmark-Version 1.1.0-alpha02 enthält eine wichtige Komponente für Benchmarks: den Makro-Benchmark. Mit Benchmark können Sie nicht nur CPU-Schleifen messen, sondern mit Macrobenchmark auch App-Interaktionen wie Start und Scrollen und Traces erfassen. Weitere Informationen finden Sie in der Dokumentation zur Bibliothek.
androidx.benchmark:benchmark-*:1.1.0-alpha02
wird veröffentlicht. Version 1.1.0-alpha02 enthält diese Commits.
Neue Funktionen
Makrobenchmark-Artefakte hinzugefügt (androidx.benchmark:benchmark-macro-junit4
und androidx.benchmark:benchmark-macro
)
- Leistungsmesswerte für Start, Scrollen und Animationen Ihrer App lokal oder in der CI erfassen
- Traces in Android Studio erfassen und prüfen
Fehlerkorrekturen
- Problembehebung für Shell-Berechtigungen mit Ausgabeverzeichnis unter Android 12 (Hinweis: Es kann erforderlich sein, das Android Gradle-Plug-in auf Version 7.0.0 Canary und Android Studio auf Arctic Fox (2020.3.1) zu aktualisieren, um weiterhin Ausgabedateien auf betroffenen Geräten zu erfassen). (Icb039)
- Unterstützung für das Caching von Konfigurationen im BenchmarkPlugin (6be1c1, b/159804788)
- Vereinfachte Dateiausgabe – standardmäßig aktiviert, in einem Verzeichnis, für das keine
requestLegacyExternalStorage=true
erforderlich ist (8b5a4d, b/172376362) - Behebung eines Problems, bei dem die Bibliothek Logcat-Warnungen zum Nichtfinden des JIT-Threads auf Plattformversionen druckte, auf denen er nicht vorhanden ist. (I9cc63, b/161847393)
- Fehler beim Lesen der maximalen Gerätehäufigkeit behoben (I55c7a)
Version 1.1.0-alpha01
10. Juni 2020
androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
und androidx.benchmark:benchmark-junit4:1.1.0-alpha01
werden losgelassen. Version 1.1.0-alpha01 enthält diese Commits.
Neue Funktionen in Version 1.1
- Zuweisungsmesswert: Bei Benchmarks wird jetzt nach der Aufwärmphase und der Zeitmessung eine zusätzliche Phase ausgeführt, in der die Zuweisungszahlen erfasst werden. Zuweisungen können bei älteren Versionen der Plattform zu Leistungsproblemen führen (140 ns in O wurden zu 8 ns in M – gemessen auf Nexus 5X mit gesperrten Taktgebern). Dieser Messwert wird in der Android Studio-Konsolenausgabe sowie in der
- Profilierungsunterstützung: Sie können jetzt Profildaten für einen Benchmarklauf erfassen, um zu prüfen, warum Ihr Code möglicherweise langsam ausgeführt wird. Benchmark unterstützt entweder das Erfassen von Methoden-Tracing oder das Erfassen von Methodenstichproben aus ART. Diese Dateien können mit dem Profiler in Android Studio über Datei > Öffnen geprüft werden.
- Das Benchmark-Gradle-Plug-in bietet jetzt Standardeinstellungen für eine einfachere Einrichtung:
testBuildType
ist standardmäßig auf „Release“ gesetzt, um die Verwendung von Abhängigkeiten mit integrierter Codeabdeckung zu vermeiden. Der Release-BuildType wird auch als Standard-BuildType konfiguriert. So kann Android Studio beim ersten Öffnen eines Projekts automatisch die richtige Buildvariante auswählen. (b/138808399)signingConfig.debug
wird als Standardsignaturkonfiguration verwendet (b/153583269).
** Fehlerkorrekturen **
- Der Overhead bei der Aufwärmphase wurde deutlich reduziert, bei der die erste Messung für jeden Benchmark künstlich höher war als die anderen. Dieses Problem war bei sehr kurzen Benchmarks (1 Mikrosekunde oder weniger) stärker ausgeprägt. (b/142058671)
- Der
InstrumentationResultParser
-Fehler, der bei der Ausführung über die Befehlszeile für jeden Benchmark ausgegeben 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 die Daten entweder in Studio ausführen oder die JSON-Ausgabedatei nach Ergebnissen parsen.
- Bei Benchmarkberichten wird der Bericht nicht von Geräten abgerufen, auf denen eine App mit einer Anwendung-ID installiert ist, die auf „android“ oder „download“ endet (Groß- und Kleinschreibung wird dabei nicht berücksichtigt). Nutzer, die dieses Problem haben, 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 unverändert von 1.0.0-rc01 veröffentlicht. Version 1.0.0 enthält diese Commits.
Wichtige Funktionen von 1.0.0
Mit der Benchmark-Bibliothek können Sie Leistungsbenchmarks für App-Code schreiben und schnell Ergebnisse erhalten.
So werden Build- und Laufzeitkonfigurationsprobleme verhindert 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 Rückschritte zu vermeiden.
Zu den wichtigsten Funktionen gehören:
- Taktgeberstabilisierung
- Automatische Threadpriorisierung
- Unterstützung für UI-Leistungstests, z. B. im RecyclerView-Beispiel
- JIT-fähiges Aufwärmen und Looping
- JSON-Benchmarkausgabe für die Nachbearbeitung
Version 1.0.0-rc01
23. Oktober 2019
androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
und androidx.benchmark:benchmark-junit4:1.0.0-rc01
werden losgelassen. Version 1.0.0-rc01 enthält diese Commits.
Neue Funktionen
- Systrace-Tracing zu Benchmarks hinzugefügt
Fehlerkorrekturen
- Behoben wurde ein Problem mit instabilen Messwerten, bei dem die JIT-Optimierung aufgrund einer Herabstufung der Priorität nicht vor dem Warm-up abgeschlossen wurde (b/140773023).
- Einheitliches JSON-Ausgabeverzeichnis für Android Gradle Plugin 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
werden losgelassen. Version 1.0.0-beta01 enthält diese Commits.
Neue Funktionen
- Führen Sie vor jedem Warm-up eine Garbage Collection aus, um den Speicherdruck von einem Benchmark zum nächsten zu verringern (b/140895105)
Fehlerkorrekturen
- Es wurde eine
androidx.annotation:android-experimental-lint
-Abhängigkeit hinzugefügt, damit Java-Code korrekt Lint-Fehler generiert, wenn die experimentelle API nicht verwendet wird. Das entspricht der Kotlin-Anmerkung „experimental“ für Kotlin-Aufrufer. - Im Android Gradle-Plug-in 3.6 wird jetzt die Verwendung des
additionalTestOutputDir
-Instrumentierungsarguments für die Ausgabe korrekt erkannt, um zu ermitteln, wann AGP die Datenkopie verarbeitet. - Fehler bei der nicht erkannten Taktfrequenz in JSON beheben, damit
-1
korrekt 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
werden losgelassen. Version 1.0.0-alpha06 enthält diese Commits.
Neue Funktionen
- Es wurde eine Prüfung für die fehlerhafte Verwendung des alten Pakets für den Test-Runner hinzugefügt, wodurch jetzt eine hilfreichere Fehlermeldung angezeigt wird.
API-Änderungen
- Die experimentelle Anmerkung
ExperimentalAnnotationReport
ist jetzt korrekt öffentlich. Für die Verwendung der experimentellen BenchmarkState#report API ist jetzt diese Anmerkung 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
werden losgelassen. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
- Die
BenchmarkState.reportData
API ist jetzt als experimentell gekennzeichnet
Fehlerkorrekturen
- Fehlerbehebung beim Skript zum Sperren der Uhr, das auf Geräten fehlgeschlagen ist, auf denen entweder die
cut
- oder dieexpr
-Shell-Dienstprogramme fehlten. - Ein Problem mit der
./gradlew lockClocks
-Aufgabe wurde behoben, das auf Geräten auftrat, die mit einer älteren Version des su-Dienstprogramms gerootet wurden, das das-c
-Flag nicht unterstützte.
Version 1.0.0-alpha04
7. August 2019
androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
und androidx.benchmark:benchmark-junit4:1.0.0-alpha04
werden losgelassen. 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
- Die Testabdeckung wird jetzt automatisch deaktiviert und die
AndroidBenchmarkRunner
wird standardmäßig festgelegt (b/138374050) - Unterstützung für die neue AGP-basierte Datenkopie beim Ausführen von Benchmarks und bei Verwendung von AGP 3.6 und höher hinzugefügt
- Die Testabdeckung wird jetzt automatisch deaktiviert und die
- Ergänzungen zum JSON-Format
- Gesamtlaufzeit des Benchmark-Tests ausgeben (b/133147694)
- Bei
@Parameterized
-Benchmarks, die einen Namensstring verwenden (z. B.@Parameters(name = "size={0},depth={1}")
), werden jetzt Parameternamen und ‑werte pro Benchmark in der JSON-Ausgabe ausgegeben (b/132578772)
- Probelaufmodus (b/138785848)
- Es wurde ein Modus „Trockenlauf“ hinzugefügt, mit dem jeder Benchmark-Loop nur einmal ausgeführt wird, um auf Fehler/Abstürze zu prüfen, ohne Messungen zu erfassen. Das kann beispielsweise nützlich sein, um Benchmarks vor dem Einreichen schnell auszuführen und zu prüfen, ob sie funktionieren.
API-Änderungen
- Die Modulstruktur hat sich geändert, wodurch die Bibliothek aufgeteilt wurde (b/138451391)
benchmark:benchmark-junit4
enthält Klassen mit JUnit-Abhängigkeit:AndroidBenchmarkRunner
undBenchmarkRule
, die beide in das Paketandroidx.benchmark.junit4
verschoben wurden.benchmark:benchmark-common
enthält den Rest der Logik, einschließlich der BenchmarkState API.- Durch diese Aufteilung kann die Bibliothek in Zukunft Benchmarking ohne JUnit4-APIs unterstützen.
- Konfigurationswarnungen werden jetzt als Fehler behandelt und führen zum Absturz des Tests (b/137653596).
- Dies soll zu genaueren Messungen beitragen, insbesondere bei CI.
- Diese Fehler können mit einem Instrumentierungsargument wieder zu Warnungen herabgestuft werden. Beispiel:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Fehlerkorrekturen
- Bei Fehlern beim Schreiben auf externen Speicher auf Q-Geräten werden jetzt aussagekräftigere Meldungen mit Vorschlägen zur Behebung des Problems angezeigt.
- Bildschirme werden während Benchmark-Tests automatisch eingeschaltet, anstatt zu versagen, wenn das Display ausgeschaltet ist
Externe Beiträge
- Vielen Dank an Sergey Zakharov für die Verbesserungen bei der JSON-Ausgabe und die Behebung von Problemen bei deaktiviertem 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
werden freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Im vollständigen JSON-Bericht die Ruhezeit aufgrund von thermischer Drosselung pro Benchmark angeben
Fehlerkorrekturen
- Das Gradle-Plug-in muss nach dem Anwenden von Android-Plug-ins und dem Android-Block nicht mehr angewendet werden.
- Unterstützung für Benchmarkberichte auf Android 10-Geräten mit befristetem Speicher
Version 1.0.0-alpha02
6. Juni 2019
androidx.benchmark:1.0.0-alpha02
und androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
werden veröffentlicht. Die Commits, die in dieser Version enthalten sind, finden Sie hier.
Hinweis: Wir behandeln das JSON-Schema als API. Wir planen, dieselben Stabilitätsanforderungen wie bei anderen APIs einzuhalten: Die API ist einmal in der Betaversion (mit sehr seltenen Ausnahmen) stabil und in der finalen Version fehlerfrei. In Nebenversionen werden nur Ergänzungen und in Hauptversionen Änderungen/Entfernungen vorgenommen.
API-Änderungen
Überarbeitetes JSON-Schema. Weitere Änderungen am JSON-Schema beschränken sich wahrscheinlich auf Ergänzungen:
- Die Struktur des Ergebnisobjekts wurde neu organisiert, um in Zukunft zusätzliche Messwertgruppen zu unterstützen (b/132713021).
- Dem Objekt der obersten Ebene wurden Kontextinformationen für den Testlauf hinzugefügt, z. B. Geräte- und Build-Informationen sowie Informationen dazu, ob die Uhren gesperrt sind (b/132711920)
- Die Namen von Zeitmesswerten enthalten jetzt „ns“ (b/132714527)
- Es wurden zusätzliche Statistiken pro gemeldetem Messwert hinzugefügt (Maximum, Median, Minimum) und die vereinfachte Zusammenfassungsstatistik „Nanos“ entfernt (b/132713851).
XML-Ausgabe entfernt (b/132714414)
Die Erkennung von thermischer Drosselung wurde aus der
BenchmarkState.reportData
API entfernt (b/132887006)
Fehlerkorrekturen
- Behoben, dass
./gradlew lockClocks
auf einigen Geräten mit neueren Betriebssystemen nicht angezeigt wurde (b/133424037) - Erkennung von Drosselungen für Emulator deaktiviert (b/132880807)
Version 1.0.0-alpha01
7. Mai 2019
androidx.benchmark:benchmark:1.0.0-alpha01
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.