MicroBenchmark-Instrumentierungsargumente

Konfigurieren Sie das Verhalten von Microbenchmark mit den folgenden Instrumentierungsargumenten. Sie können sie entweder Ihrer Gradle-Konfiguration hinzufügen oder direkt anwenden, wenn Sie die Instrumentierung über die Befehlszeile ausführen. Wenn Sie diese Argumente für alle Android Studio- und Befehlszeilen-Tests festlegen möchten, fügen Sie sie testInstrumentationRunnerArguments hinzu:

android {
    defaultConfig {
        // ...
        testInstrumentationRunnerArguments["androidx.benchmark.dryRunMode.enable"] = "true"
    }
}

Sie können auch Instrumentierungsargumente einrichten, wenn Sie die Benchmarks über Android Studio ausführen. So ändern Sie die Argumente:

  1. Bearbeiten Sie die Ausführungskonfiguration, indem Sie auf Bearbeiten klicken und die Konfiguration auswählen, die Sie bearbeiten möchten.
    Abbildung 1 Bearbeiten Sie die Ausführungskonfiguration.
  2. Bearbeiten Sie die Instrumentierungsargumente, indem Sie neben dem Feld Instrumentierungsargumente auf  klicken.
    Abbildung 2. Bearbeiten Sie das Instrumentierungsargument.
  3. Klicken Sie auf  und fügen Sie das erforderliche Instrumentierungsargument hinzu.
    Abbildung 3: Fügen Sie das Instrumentierungsargument hinzu.

Wenn Sie den Benchmark über die Befehlszeile ausführen, verwenden Sie -P android.testInstrumentationRunnerArguments.[name of the argument]:

./gradlew :benchmark:connectedAndroidTest -P android.testInstrumentationRunnerArguments.androidx.benchmark.profiling.mode=StackSampling

Wenn Sie einen Instrumentierungsbefehl direkt aufrufen (was in CI-Testumgebungen der Fall sein kann), übergeben Sie das Argument mit -e an am instrument:

adb shell am instrument -e androidx.benchmark.profiling.mode StackSampling -w com.example.macrobenchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner

Weitere Informationen zum Konfigurieren von Benchmarks in CI finden Sie unter Benchmarking in CI.

additionalTestOutputDir

Hier wird konfiguriert, wo JSON-Benchmarkberichte und ‑Profilierungsergebnisse auf dem Gerät gespeichert werden.

  • Argumenttyp:Dateipfad-String
  • Standardeinstellung:externes Verzeichnis des Test-APK

androidx.benchmark.cpuEventCounter.enable (experimentell)

Zählt die in androidx.benchmark.cupEventCounter.events angegebenen CPU-Ereignisse. Erfordert Root-Zugriff.

  • Argumenttyp:boolescher Wert
  • Standardeinstellung: „false“

androidx.benchmark.cpuEventCounter.events (experimentell)

Gibt an, welche Arten von CPU-Ereignissen gezählt werden sollen. Wenn Sie dieses Argument verwenden möchten, muss androidx.benchmark.cpuEventCounter.enable auf true gesetzt sein.

  • Argumenttyp:Kommagetrennte Liste von Strings
  • Verfügbare Optionen:
    • Instructions
    • CPUCycles
    • L1DReferences
    • L1DMisses
    • BranchInstructions
    • BranchMisses
    • L1IReferences
    • L1IMisses
  • Standardeinstellung:Instructions, CpuCycles, BranchMisses

androidx.benchmark.dryRunMode.enable

Hiermit können Sie Benchmarks in einer einzelnen Schleife ausführen, um zu prüfen, ob sie ordnungsgemäß funktionieren.

Das bedeutet:

  • Konfigurationsfehler werden nicht erzwungen (z. B. um die Ausführung regelmäßiger Korrektheitstests auf Emulatoren zu vereinfachen)
  • Der Benchmark wird nur einmal ohne Aufwärmung ausgeführt.
  • Messungen und Protokolle werden nicht erfasst, um die Laufzeit zu verkürzen

So wird der Testdurchsatz optimiert und die Benchmarklogik wird anhand der Build- und Messrichtigkeit validiert.

  • Argumenttyp:boolescher Wert
  • Standardeinstellung:false

androidx.benchmark.iterations

Überschreibt die zeitbasierten Zieliterationen, um eine gleichbleibende Arbeitsmenge zu gewährleisten. Dies ist in der Regel nur bei aktiviertem Profiling sinnvoll, um sicherzustellen, dass innerhalb eines Profiling-Traces eine einheitliche Arbeitsmenge ausgeführt wird, wenn verschiedene Implementierungen oder Ausführungen verglichen werden. In anderen Fällen wird dadurch wahrscheinlich die Genauigkeit oder Stabilität der Messungen beeinträchtigt.

  • Argumenttyp:Ganzzahl
  • Standardwert:nicht angegeben

androidx.benchmark.junit4.SideEffectRunListener

Es kann zu inkonsistenten Benchmarkergebnissen kommen, wenn während des Benchmarks andere Hintergrundarbeiten ausgeführt werden.

Wenn Sie Hintergrundarbeiten während des Benchmarkings deaktivieren möchten, legen Sie den listener-Typ des Instrumentierungsarguments auf androidx.benchmark.junit4.SideEffectRunListener fest.

  • Argumenttyp:String
  • Verfügbare Optionen:
    • androidx.benchmark.junit4.SideEffectRunListener
  • Standardwert:nicht angegeben

androidx.benchmark.output.enable

Ermöglicht das Schreiben der JSON-Ergebnisdatei in den externen Speicher.

  • Argumenttyp:boolescher Wert
  • Standardeinstellung:true

androidx.benchmark.profiling.mode

Ermöglicht das Erfassen von Ablaufdateien während der Ausführung der Benchmarks. Informationen zu den verfügbaren Optionen finden Sie unter Microbenchmark erfassen.

Beachten Sie, dass einige Android-Betriebssystemversionen das Methoden-Tracing nicht unterstützen, ohne dass sich dies auf nachfolgende Messungen auswirkt. Microbenchmark wirft eine Ausnahme, um dies zu verhindern. Verwenden Sie das Standardargument zum Erfassen von Methodenaufzeichnungen daher nur, wenn dies sicher möglich ist. Weitere Informationen finden Sie unter Issue #316174880.

  • Argumenttyp:String
  • Verfügbare Optionen:
    • MethodTracing
    • StackSampling
    • None
  • Standardeinstellung:Sichere Version von MethodTracing, die nur dann einen Methoden-Trace erfasst, wenn das Gerät dies tun kann, ohne die Messungen zu beeinträchtigen.

androidx.benchmark.suppressErrors

Akzeptiert eine durch Kommas getrennte Liste von Fehlern, die in Warnungen umgewandelt werden sollen.

  • Argumenttyp:Liste von Strings
  • Verfügbare Optionen:
    • DEBUGGABLE
    • LOW-BATTERY
    • EMULATOR
    • CODE-COVERAGE
    • UNLOCKED
    • SIMPLEPERF
    • ACTIVITY-MISSING
  • Standardeinstellung:leere Liste