Mikro-Benchmark

Mit der Jetpack MicroBenchmark-Bibliothek können Sie Ihren nativen Android-Code – Kotlin oder Java – direkt in Android Studio messen. Die Bibliothek verarbeitet die Aufwärmphase, misst die Codeleistung und die Anzahl der Zuweisungen und gibt Benchmarking-Ergebnisse sowohl an die Android Studio Console als auch an eine JSON-Datei mit detaillierteren Informationen aus.

Wir empfehlen Ihnen, ein Profil für Ihren Code zu erstellen, bevor Sie eine Benchmark schreiben. So können Sie teure Vorgänge finden, die sich optimieren lassen. Es kann auch aufzeigen, warum die Vorgänge langsam sind, indem Sie sehen, was während der Ausführung geschieht, z. B. das Ausführen eines Threads mit niedriger Priorität, der Ruhezustand aufgrund des Laufwerkszugriffs oder ein unerwarteter Aufruf einer teuren Funktion wie der Bitmap-Decodierung.

Micro-Benchmarks sind am nützlichsten für CPU-Arbeit, die mehrmals in Ihrer Anwendung ausgeführt werden. Sie werden auch als Hot-Code-Pfade bezeichnet. Gute Beispiele sind das Scrollen durch RecyclerView, bei dem jeweils nur ein Element angezeigt wird, Datenkonvertierungen oder -verarbeitung und andere Codeelemente, die wiederholt verwendet werden.

Andere Arten von Code sind mit der MicroBenchmark-Bibliothek schwieriger zu messen. Da Benchmarks in einer Schleife ausgeführt werden, ist jeder Code, der nicht häufig ausgeführt wird oder bei mehrmaligem Aufruf unterschiedlich funktioniert, möglicherweise nicht für das Benchmarking geeignet.

Informationen zum Verwenden der Bibliothek in einer Continuous-Integration-Umgebung (CI) finden Sie unter Benchmarks in Continuous Integration ausführen.

Cache-Messung vermeiden

Versuchen Sie, nicht nur den Cache zu messen. Die Layout-Benchmark einer benutzerdefinierten Ansicht kann beispielsweise nur die Leistung des Layout-Cache messen. Um dies zu vermeiden, können Sie in jeder Schleife unterschiedliche Layoutparameter übergeben. In anderen Fällen, z. B. beim Messen der Dateisystemleistung, kann dies schwierig sein, da das Betriebssystem das Dateisystem während einer Schleife im Cache speichert.

Einheitliche Benchmarks erhalten

Die Uhren auf Mobilgeräten wechseln dynamisch von einem hohen Status in einen niedrigen Status, um Strom zu sparen oder wenn das Gerät heiß wird. Diese variierenden Uhren können dazu führen, dass Ihre Benchmark-Zahlen stark variieren, sodass die Bibliothek Möglichkeiten zum Umgang mit diesem Problem bietet.

Sperruhr (erfordert gerootetes Gerät)

Das Sperren der Uhr ist der beste Weg, um eine stabile Leistung zu erzielen. Es sorgt dafür, dass die Zeitblöcke nie hoch genug werden, um das Gerät zu erwärmen, oder niedrig werden, wenn eine Benchmark die CPU nicht voll ausnutzt. Sie kann mit einer Gradle-Aufgabe (gradlew lockClocks) oder manuell in CI angewendet werden. Dies ist zwar die beste Möglichkeit, eine stabile Leistung sicherzustellen, wird jedoch auf den meisten Geräten nicht unterstützt, da ein gerootetes Android-Gerät erforderlich ist.

Modus „Kontinuierliche Leistung“

Window.setSustainedPerformanceMode() ist eine Funktion, die von Geräten unterstützt wird, auf denen Apps eine niedrigere maximale CPU-Frequenz festlegen können. Bei der Ausführung auf unterstützten Geräten verwendet die MicroBenchmark-Bibliothek eine Kombination aus dieser API und startet eine eigene Aktivität, um eine Drosselung der Energiezufuhr zu verhindern und die Ergebnisse zu stabilisieren.

Dieses Feature ist standardmäßig durch das testInstrumentationRunner aktiviert, das vom Android-Gradle-Plug-in festgelegt wurde. Wenn Sie einen benutzerdefinierten Runner verwenden möchten, können Sie AndroidBenchmarkRunner untergeordnete Klassen erstellen und sie als testInstrumentationRunner verwenden.

Der Runner startet eine intransparente Vollbildaktivität, um sicherzustellen, dass die Benchmark im Vordergrund und ohne weitere App-Zeichnungen ausgeführt wird.

Automatisches Pausieren der Ausführung

Wenn Sie weder Taktung noch kontinuierliche Leistung verwenden, führt die Bibliothek eine automatische Erkennung der Drosselung der Temperatur durch. Wenn diese Option aktiviert ist, wird die interne Benchmark regelmäßig ausgeführt, um zu ermitteln, wann die Gerätetemperatur hoch genug ansteigt, um die CPU-Leistung zu verringern. Wird eine verminderte CPU-Leistung erkannt, pausiert die Bibliothek die Ausführung, damit das Gerät abkühlen kann, und wiederholt dann die aktuelle Benchmark.

Produktproben

Sehen Sie sich die folgenden Beispiele im GitHub-Repository an:

Weitere Informationen

Feedback geben

Mithilfe der öffentlichen Problemverfolgung können Sie beim Einsatz von Benchmarking Probleme melden oder Funktionsanfragen senden.