Mit der Jetpack MicroBenchmark-Bibliothek können Sie Benchmarks für Ihre Android-nativen Kotlin- oder Java-Code direkt in Android Studio. Die Bibliothek übernimmt das Aufwärmen, misst die Codeleistung und die Anzahl der Zuweisungs und gibt Benchmarking aus. Android Studio-Konsole und eine JSON-Datei mit weiteren Details.
Wir empfehlen Ihnen, vor dem Schreiben einer Benchmark ein Profil für den Code zu erstellen. Das hilft, finden Sie teure Vorgänge, die sich optimieren lassen. Es kann auch zeigen, warum die Vorgänge sind langsam, da sie zeigen, was während der Ausführung geschieht, z. B. in einem Thread mit niedriger Priorität ausgeführt wird, aufgrund von Laufwerkzugriff in den Ruhemodus oder unerwartet eine teure Funktion wie Bitmap-Decodierung.
MicroBenchmarks eignen sich am
besten für CPU-Arbeiten, die oft in Ihrer App ausgeführt werden,
auch als Hot-Code-Pfade bezeichnet. Gute Beispiele sind RecyclerView
-Scrollen mit
angezeigt werden, Datenkonvertierungen oder -verarbeitung und andere
Code, der wiederholt verwendet wird.
Andere Codetypen sind mit dem MicroBenchmark schwieriger zu messen Bibliothek. Da Benchmarks in einer Schleife ausgeführt werden, wird Code, der nicht häufig oder unterschiedlich funktioniert, wenn sie mehrfach aufgerufen wird. Das ist nicht so gut für und Benchmarking durchführen.
Informationen zur Verwendung der Bibliothek in einer Continuous Integration-Umgebung (CI) Siehe Benchmarks in Continuous Integration ausführen
Cache-Messung vermeiden
Vermeiden Sie es, nur den Cache zu messen. Das Layout einer benutzerdefinierten Ansicht kann nur die Leistung des Layout-Cache gemessen werden. Um dies zu vermeiden, können Sie in jeder Schleife verschiedene Layoutparameter übergeben. In anderen Fällen, z. B. beim Messen der Dateisystemleistung möglicherweise schwierig, weil das Betriebssystem speichert das Dateisystem in einer Schleife im Cache.
Einheitliche Benchmarks erhalten
Die Uhren von Mobilgeräten wechseln dynamisch von hoher Leistung, um die Leistung zu verbessern, niedrig ist, um Strom zu sparen oder wenn das Gerät heiß wird. Diese unterschiedlichen Uhren können die Benchmarkwerte stark variieren. Deshalb bietet die Bibliothek Möglichkeiten, mit diesem Problem.
Uhr sperren (gerootetes Gerät erforderlich)
Das Sperren von Uhren ist der beste Weg für eine stabile Leistung. Es trägt dazu bei,
Die Uhren werden nie hoch genug, um das Gerät aufzuheizen, oder niedrig, wenn der Benchmark nicht hoch genug ist.
die CPU voll auslastet. Sie kann mit einer Gradle-Aufgabe angewendet werden.
(gradlew lockClocks
) oder manuell in CI ausführen. Das ist zwar der beste Weg,
sorgen für eine stabile Leistung. Deshalb wird diese Funktion auf den meisten Geräten aus folgenden Gründen nicht unterstützt:
Dafür ist ein gerootetes Android-Gerät erforderlich.
Modus für kontinuierliche Leistung
Window.setSustainedPerformanceMode()
ist eine Funktion, die von Geräten unterstützt wird
mit der eine App
eine niedrigere maximale CPU-Frequenz nutzen kann. Bei Ausführung auf einem unterstützten
verwendet die MicroBenchmark-Bibliothek eine Kombination aus dieser API und
um eine Drosselung der Temperatur zu vermeiden und die Ergebnisse zu stabilisieren.
Diese Funktion ist standardmäßig durch die testInstrumentationRunner
aktiviert
des Android-Gradle-Plug-ins. Wenn Sie einen benutzerdefinierten Runner verwenden möchten, können Sie
AndroidBenchmarkRunner
abgeleitet und als Ihr
testInstrumentationRunner
.
Der Läufer startet eine opake Vollbildaktivität, um sicherzustellen, im Vordergrund ausgeführt wird und keine andere App-Zeichnung verwendet wird.
Automatisches Pausieren der Ausführung
Wenn Sie weder Zeitsperre noch kontinuierliche Leistung verwenden, führt die Bibliothek automatische Drosselungserkennung bei Überhitzung. Wenn diese Option aktiviert ist, um zu ermitteln, wann die Gerätetemperatur hoch genug ist, eine geringere CPU-Leistung. Wird eine verringerte CPU-Leistung erkannt, unterbricht die Ausführung, damit das Gerät abkühlen kann, und wiederholt dann den aktuellen Benchmark.
AOT-Kompilierung
Es kann lange dauern, bis sich
komplexe Mikro-Benchmarks stabilisieren,
und eine Stabilisierung
sehr schwer zu erkennen. Konstante und schnelle Messung
Iterationsgeschwindigkeit steht an erster Stelle, das androidx.benchmark
-Plug-in
kompiliert Ihre MicroBenchmark-APK, ähnlich wie
CompilationMode.Full
in Makro-Benchmarks. Dieses Verhalten erfordert eine Benchmark
1.3.0-beta01+
und Android-Gradle-Plug-in 8.4.0+
. Sie können diese Option deaktivieren
Verhalten, indem Sie androidx.benchmark.forceaotcompilation=false
in Ihrem
gradle.properties
-Datei.
Produktproben
Die folgenden Beispiele finden Sie im GitHub-Repository:
Weitere Informationen
Feedback geben
Wie Sie beim Benchmarking Probleme melden oder Funktionsanfragen stellen, erfahren Sie in der öffentliches Problem Tracker.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Benchmarking Ihrer App
- Baseline-Profile erstellen {:#creating-profile-rules}
- JankStats-Bibliothek