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, 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.

Hinweis:Bei einigen Android-Betriebssystemen und ART-Versionen ist das Methoden-Tracing standardmäßig deaktiviert. In diesen Fällen gibt Android Studio eine Warnung aus.

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.