Profil einer Mikro-Benchmark erstellen

Standardmäßig liefern MicroBenchmarks Informationen über den Zeitpunkt und die Zuweisungen des ausgeführten Codes. Wenn Sie untersuchen möchten, warum der gemessene Code langsam ausgeführt wird, können Sie die Benchmarks mit dem angehängten CPU-Profiler ausführen.

Fügen Sie zum Auswählen der Profiler-Konfiguration das Argument androidx.benchmark.profiling.mode für den Instrumentierungs-Runner mit einem MethodTracing-, StackSampling- oder None-Argument hinzu, wie im folgenden Snippet gezeigt.

Weitere Informationen zu den Optionen finden Sie unter Aufzeichnungskonfiguration auswählen. MethodTracing entspricht den „Trace Java-Methoden“ und StackSampling den „Beispiel-Java-Methoden“ gemäß der Definition im vorliegenden Dokument.

Groovig

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 zusammen mit den JSON-Ergebnissen eine .trace-Ausgabedatei auf den Host im Verzeichnis kopiert. Wählen Sie Datei > Öffnen aus, um die Ergebnisse der Profilerstellung im CPU-Profiler in Android Studio zu prüfen. Weitere Informationen zum Lesen und Verstehen von Traces finden Sie unter Traces untersuchen.

MethodTracing

Methoden-Tracing ist nützlich, wenn Sie versuchen, Ihren Code zu optimieren, da Sie damit Methoden identifizieren können, deren Ausführung länger dauert als andere. 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 Ihr Test sowohl genaue Zeitangaben als auch Profilerstellungsergebnisse ausgibt.

StackSampling

Das Stichproben-Tracing kann auch bei der Identifizierung teurer Methoden ohne den Leistungsaufwand von Methoden-Tracing helfen. Wenn Ihre Anwendung jedoch eine Methode einsetzt, nachdem ein Aufrufstack erfasst wurde und die Methode vor der nächsten Erfassung beendet wird, wird der Methodenaufruf nicht protokolliert. Um Methoden mit kurzen Lebenszyklen richtig zu erfassen, sollten Sie Methoden-Tracing anstelle von Stichproben-Tracing verwenden.

Bei Stack-Sampling rufen die Benchmark-Beispiele Stacks nach Abschluss des Aufwärmvorgangs auf. Mit Instrumentierungsargumenten können Sie die Abtasthäufigkeit und die Abtastdauer festlegen.

Unter Android 10 (API 29) und höher wird für das Stack Sampling Simpleperf verwendet, um Beispiele für App-Aufrufstacks zu erstellen, einschließlich C++-Code. Unter Android 9 (API 28) und niedriger wird Debug.startMethodTracingSampling verwendet, um Stackproben zu erfassen.

Sie können diesen Profilerstellungsmodus konfigurieren, indem Sie weitere Instrumentierungsargumente hinzufügen:

  • androidx.benchmark.profiling.sampleFrequency

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

    • Dauer der Benchmark, die ausgeführt werden soll.
    • Argumenttyp: Ganzzahl
    • Die Standardeinstellung ist 5 Sekunden.

Keine

Dieses Argument erfasst keine Profilerstellungsdatei. Informationen zu Zeitplan und Zuweisungen werden weiterhin gemessen.