Profil einer Mikro-Benchmark erstellen

Standardmäßig liefern MicroBenchmarks Informationen zum Zeitplan und Zuweisungen des ausgeführten Codes. Wenn Sie untersuchen möchten, warum die gemessene zu langsam ausgeführt wird, können Sie die Benchmarks mit dem CPU-Profiler ausführen, angehängt.

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 Informationen zu den Optionen finden Sie im Hilfeartikel Aufzeichnungskonfiguration auswählen. MethodTracing entspricht „Java-Methoden erfassen“ und StackSampling entspricht „Beispiel-Java-Methoden“, wie in diesem Dokument definiert.

Cool

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 eine Benchmark erstellen, wird eine .trace-Ausgabedatei auf den Host in das Verzeichnis neben den JSON-Ergebnissen. Wenn Sie die Ergebnisse des Profilers im CPU-Profiler in Android Studio prüfen möchten, wählen Sie Datei > Öffnen aus. Weitere Informationen über Informationen zum Lesen und Verstehen von Traces finden Sie unter Traces überprüfen.

Method-Tracing

Das Methoden-Tracing ist nützlich, wenn Sie Ihren Code optimieren möchten, können Sie feststellen, bei welchen Methoden die Ausführung länger dauert als bei anderen. Sie können konzentrieren Sie sich dann auf die Optimierung der Methoden, die sich am stärksten auf die Leistung auswirken.

Die Profilerstellung erfolgt nacheinander nach der Codemessung, sodass Ihr Test sowohl des genauen Timings und der Profilerstellung.

Stack-Stichproben

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. Um Methoden mit kurze Lebenszyklen sollten Sie Methoden-Tracing anstelle von Stichproben-Tracing verwenden.

Beim Stack-Sampling werden nach dem Aufwärmprogramm Aufrufstacks durch die Benchmark entnommen abgeschlossen ist. Sie können die Stichprobenhäufigkeit festlegen und Dauer der Stichprobenerhebung mithilfe von Instrumentierung Argumente.

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-Version 28) und niedriger Debug.startMethodTracingSampling zum Erfassen von Stackproben.

Sie können diesen Profilerstellungsmodus konfigurieren, indem Sie eine weitere Instrumentierung hinzufügen Argumente:

  • androidx.benchmark.profiling.sampleFrequency

    • Anzahl der Stackproben, die pro Sekunde erfasst werden sollen.
    • Argumenttyp: Ganzzahl
    • Die Standardeinstellung ist 1.000 Samples pro Sekunde.
  • androidx.benchmark.profiling.sampleDurationSeconds

    • Ausführungsdauer der Benchmark.
    • Argumenttyp: Ganzzahl
    • Die Standardeinstellung ist 5 Sekunden.

Keine

Mit diesem Argument wird keine Profiler-Datei erfasst. Informationen zum Zeitplan und zu weiterhin gemessen.