Standardmäßig erhalten Sie mit Microbenchmarks Informationen zum Timing und zur Allokation des ausgeführten Codes. Wenn Sie herausfinden möchten, warum der gemessene Code langsam ausgeführt wird, prüfen Sie den Methoden-Trace, der standardmäßig in unterstützten Betriebssystemversionen erfasst wird, oder wählen Sie andere Profiling-Konfigurationen aus.
Um die Profilerkonfiguration auszuwählen, fügen Sie dem Argument „Instrumentation Runner“ androidx.benchmark.profiling.mode
eines der Argumente MethodTracing
(Standard), StackSampling
oder None
hinzu, wie im folgenden Snippet gezeigt.
Weitere Informationen zu den Optionen finden Sie unter Java-/Kotlin-Methoden aufzeichnen.
MethodTracing
entspricht dem Tracen und StackSampling
dem Stichprobenverfahren, wie in diesem Dokument definiert.
Groovy
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling' } }
Kotlin
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling" } }
Wenn Sie einen Benchmark erfassen, wird eine Ausgabedatei vom Typ .trace
zusammen mit den JSON-Ergebnissen in das Verzeichnis auf dem Host kopiert. Wenn Sie die Profiling-Ergebnisse in Android Studio prüfen möchten, wählen Sie in den Microbenchmark-Ergebnissen den Link Method Trace oder Stack Sampling Trace aus.
MethodTracing
Das Methoden-Tracing ist nützlich, wenn Sie Ihren Code optimieren möchten, da Sie so die Methoden identifizieren können, deren Ausführung länger dauert als bei anderen. Anschließend können Sie sich darauf konzentrieren, die Methoden zu optimieren, die sich am stärksten auf die Leistung auswirken.
Das Profiling erfolgt nach der Codemessung nacheinander, sodass Ihr Test sowohl genaue Zeit- als auch Profiling-Ergebnisse liefert.
Die Methodenaufzeichnung ist standardmäßig aktiviert.
Stack-Stichprobenerhebung
Mit dem Stichproben-Tracing können Sie auch teure Methoden ohne den Leistungsoverhead des Methoden-Tracings identifizieren. Wenn Ihre App jedoch eine Methode aufruft, nachdem ein Aufrufstapel erfasst wurde, und die Methode vor der nächsten Erfassung beendet wird, wird der Methodenaufruf nicht protokolliert. Verwenden Sie zum korrekten Überwachen von Methoden mit kurzen Lebenszyklen das Methoden-Tracing anstelle des Stichproben-Tracings.
Bei der Stack-Stichprobenerhebung werden die Aufrufstacks nach Abschluss der Aufwärmphase für die Benchmark-Stichproben verwendet. Mithilfe von Instrumentierungsargumenten können Sie das Stichprobenverhalten steuern, z. B. die Stichprobenfrequenz und die Dauer der Stichprobenerhebung.
Unter Android 10 (API 29) und höher wird für die Stack-Stichprobenerhebung Simpleperf verwendet, um App-Aufrufstacks zu erfassen, einschließlich C++-Code. Unter Android 9 (API 28) und niedriger wird Debug.startMethodTracingSampling
verwendet, um Stack-Samples zu erfassen.
Sie können diesen Profiling-Modus konfigurieren, indem Sie weitere Instrumentierungsargumente hinzufügen:
androidx.benchmark.profiling.sampleFrequency
- Anzahl der Stack-Stichproben, die pro Sekunde erfasst werden sollen.
- Argumenttyp: Ganzzahl
- Standardmäßig 1.000 Samples pro Sekunde.
androidx.benchmark.profiling.sampleDurationSeconds
- Dauer des zu laufenden Benchmarks.
- Argumenttyp: Ganzzahl
- Standardmäßig 5 Sekunden.
androidx.benchmark.profiling.skipWhenDurationRisksAnr
- Überspringt die Methode, wenn sie wahrscheinlich zu einem ANR führt. Sie sollten diese Option für CI-Ausführungen aktiviert lassen, da ANRs bei langen CI-Ausführungen zu Problemen führen können.
- Argumenttyp: boolescher Wert
- Standardeinstellung:
true
Keine
Mit diesem Argument wird keine Profiler-Datei erfasst. Informationen zu Timing und Zuordnungen werden weiterhin erfasst.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Argumente für die Instrumentierung von Mikrobenchmarks
- Benchmarks in Continuous Integration ausführen