Mikro-Benchmark

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.