Profil einer Mikro-Benchmark erstellen

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 File > Open 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-Messung 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.