Standardmäßig erhalten Sie von Microbenchmarks Informationen zum Timing und zu den Zuweisungen 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 auf unterstützten Betriebssystemversionen erfasst wird, oder wählen Sie andere Profilerstellungskonfigurationen aus.
Fügen Sie zur Auswahl der Profiler-Konfiguration das Argument androidx.benchmark.profiling.mode für den Instrumentierungs-Runner 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 Profil für einen Benchmark erstellen, wird eine .trace-Ausgabedatei in das Verzeichnis neben den JSON-Ergebnissen auf den Host kopiert. Wenn Sie die Profilerstellungsergebnisse in Android Studio prüfen möchten, wählen Sie in den Microbenchmark-Ergebnissen den Link Method Trace oder Stack Sampling Trace aus.
MethodTracing
Methoden-Tracing ist nützlich, wenn Sie Ihren Code optimieren möchten, da Sie damit die 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.
Die Profilerstellung erfolgt nacheinander nach der Codemessung, sodass Ihre Testausgaben sowohl genaue Zeit- als auch Profilerstellungsergebnisse enthalten.
Das Methoden-Tracing ist standardmäßig aktiviert.
StackSampling
Mit dem Sample-Tracing können auch rechenintensive Methoden ohne den Leistungsaufwand des Methoden-Tracings identifiziert werden. Wenn Ihre Anwendung jedoch nach der Erfassung eines Aufrufstacks eine Methode aufruft und die Methode vor der nächsten Erfassung beendet wird, wird der Methodenaufruf nicht protokolliert. Verwenden Sie das Methoden-Tracing anstelle des Sample-Tracing, um Methoden mit kurzen Lebenszyklen richtig zu verfolgen.
Beim Stack-Sampling werden die Aufrufstacks nach Abschluss des Warm-ups vom Benchmark 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 das Stack-Sampling Simpleperf verwendet, um App-Aufrufstacks, einschließlich C++-Code, zu erfassen. Unter Android 9 (API 28) und niedriger wird Debug.startMethodTracingSampling verwendet, um Stack-Stichproben zu erfassen.
Sie können diesen Profilerstellungsmodus konfigurieren, indem Sie ein weiteres Instrumentierungsargument hinzufügen:
androidx.benchmark.profiling.sampleFrequency- Anzahl der Stack-Stichproben, die pro Sekunde erfasst werden sollen.
- Argumenttyp: Ganzzahl
- Der Standardwert ist 1.000 Stichproben pro Sekunde.
androidx.benchmark.profiling.sampleDurationSeconds- Dauer des auszuführenden Benchmarks.
- Argumenttyp: Ganzzahl
- Standardmäßig 5 Sekunden.
androidx.benchmark.profiling.skipWhenDurationRisksAnr- Überspringt das Methoden-Tracing, wenn es wahrscheinlich zu einem ANR-Fehler führt. Sie sollten diese Option für CI-Ausführungen aktiviert lassen, da ANR-Fehler bei langen CI-Ausführungen Probleme verursachen können.
- Argumenttyp: boolescher Wert
- Die Standardeinstellung ist
true.
Keine
Mit diesem Argument wird keine Profilerstellungsdatei erfasst. Informationen zu Timing und Zuweisungen werden weiterhin gemessen.
Empfehlungen für Sie
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Argumente für die Instrumentierung von Microbenchmarks
- Benchmarks in Continuous Integration ausführen