Profil einer Mikro-Benchmark erstellen

Standardmäßig liefern MicroBenchmarks Informationen zum Timing und zu den 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 des Instrumentierungs-Runners mit einem der Argumente MethodTracing, StackSampling oder None 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 entspricht den in diesem Dokument definierten Java-Beispielmethoden.

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 neben den JSON-Ergebnissen eine .trace-Ausgabedatei in das Verzeichnis kopiert. Wählen Sie Datei > Öffnen aus, um die Profilerstellungsergebnisse im CPU Profiler in Android Studio zu untersuchen. Weitere Informationen zum Lesen und Verständnis von Traces finden Sie unter Traces prüfen.

Method-Tracing

Das Methoden-Tracing ist nützlich, wenn Sie Ihren Code optimieren möchten, da Sie damit die 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 ein genaues Timing als auch Profilerstellungsergebnisse ausgibt.

Stack-Stichproben

Das Beispiel-Tracing kann auch dabei helfen, teure Methoden zu identifizieren, ohne den Leistungsaufwand für das Methoden-Tracing. Wenn Ihre Anwendung jedoch in eine Methode einsteigt, 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 verfolgen, verwenden Sie Methoden-Tracing anstelle von Stichproben-Tracing.

Beim Stack-Sampling werden nach Abschluss des Aufwärmvorgangs Aufrufstacks von der Benchmark analysiert. Mit Instrumentierungsargumenten können Sie die Stichprobenhäufigkeit und Dauer der Stichprobenerhebung steuern.

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

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 ist 1.000 Samples pro Sekunde.
  • androidx.benchmark.profiling.sampleDurationSeconds

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

Keine

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