Standardmäßig erhalten Sie bei Microbenchmarks Informationen zum Timing und zu den Zuweisungen des ausgeführten Codes. Wenn Sie untersuchen möchten, warum der gemessene Code langsam ausgeführt wird, sehen Sie sich den Methoden-Trace an, der standardmäßig auf unterstützten Betriebssystemversionen erfasst wird, oder wählen Sie andere Profilkonfigurationen aus.
Um die Profiler-Konfiguration auszuwählen, fügen Sie das Instrumentation Runner-Argument androidx.benchmark.profiling.mode
mit einem 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 Tracing und StackSampling
dem Sampling, 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 ein Benchmark-Profil erstellen, wird eine .trace
-Ausgabedatei auf den Host in das Verzeichnis neben JSON-Ergebnissen kopiert. Wenn Sie die Profiling-Ergebnisse in Android Studio ansehen möchten, wählen Sie in den Microbenchmark-Ergebnissen den Link Method Trace (Methoden-Trace) oder Stack Sampling Trace (Stack-Sampling-Trace) aus.
MethodTracing
Methodentracing ist nützlich, wenn Sie Ihren Code optimieren möchten, da Sie damit Methoden identifizieren können, die länger als andere ausgeführt werden. Anschließend können Sie sich auf die Optimierung der Methoden konzentrieren, die sich am stärksten auf die Leistung auswirken.
Das Profiling erfolgt sequenziell nach der Code-Messung. Ihr Test gibt also sowohl genaue Zeitmessungen als auch Profiling-Ergebnisse aus.
Die Methodenverfolgung ist standardmäßig aktiviert.
StackSampling
Mit dem Sample-Tracing lassen sich auch teure Methoden ohne den Leistungsaufwand des Method-Tracing identifizieren. Wenn Ihre App jedoch in eine Methode eintritt, nachdem ein Aufrufstack erfasst wurde, und die Methode beendet wird, bevor die nächste Erfassung erfolgt, wird der Methodenaufruf nicht protokolliert. Verwenden Sie zum richtigen Erfassen von Methoden mit kurzen Lebenszyklen die Methodenverfolgung anstelle der Stichprobenverfolgung.
Beim Stack-Sampling werden Aufrufstacks nach Abschluss der Aufwärmphase erfasst. Sie können das Stichprobenverhalten wie die Stichprobenhäufigkeit und die Dauer der Stichprobenerhebung mithilfe von Instrumentierungsargumenten steuern.
Unter Android 10 (API 29) und höher wird für die Stapelstichprobenerhebung Simpleperf verwendet, um App-Callstacks, einschließlich C++-Code, zu erfassen. Unter Android 9 (API 28) und niedriger wird Debug.startMethodTracingSampling
verwendet, um Stapel-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 sind 1.000 Samples pro Sekunde festgelegt.
androidx.benchmark.profiling.sampleDurationSeconds
- Dauer der auszuführenden Benchmark.
- Argumenttyp: Ganzzahl
- Standardmäßig 5 Sekunden.
androidx.benchmark.profiling.skipWhenDurationRisksAnr
- Überspringt die Methodenverfolgung, wenn dadurch wahrscheinlich ein ANR auftritt. Diese Option sollte für CI-Läufe aktiviert bleiben, da ANR-Fehler bei langen CI-Läufen Probleme verursachen können.
- Argumenttyp: boolescher Wert
- Die Standardeinstellung ist
true
.
Keine
Mit diesem Argument wird keine Profiling-Datei erfasst. Informationen zu Timing und Zuweisungen werden weiterhin gemessen.
Empfehlungen für dich
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Argumente für die Microbenchmark-Instrumentierung
- Benchmarks in Continuous Integration ausführen