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, können Sie die Benchmarks mit dem angehängten CPU-Profiler ausführen.
Um die Profilerkonfiguration auszuwählen, fügen Sie dem Instrumentierungs-Runner-Argument androidx.benchmark.profiling.mode
eines der Argumente MethodTracing
, StackSampling
oder None
hinzu, wie im folgenden Snippet dargestellt.
Weitere Informationen zu den Optionen finden Sie unter Aufzeichnungskonfiguration auswählen.
MethodTracing
entspricht „Java-Methoden erfassen“ und StackSampling
entspricht „Beispiel-Java-Methoden“, 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 Ergebnisse des Profilers im CPU-Profiler in Android Studio prüfen möchten, wählen Sie Datei > Öffnen aus. Weitere Informationen zum Lesen und Verstehen von Traces finden Sie unter Traces prüfen.
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.
StackSampling
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. Sie können die Stichprobenfrequenz und die Stichprobenerhebungsdauer mithilfe von Instrumentierungsargumenten steuern.
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.
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