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 Befehlszeilentests 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 in Android Studio ausführen. So ändern Sie die Argumente:

  1. Klicken Sie auf Bearbeiten und wählen Sie die Konfiguration aus, die Sie bearbeiten möchten.
    Abbildung 1. Bearbeiten Sie die Ausführungskonfiguration.
  2. Klicken Sie neben dem Feld Instrumentationsargumente auf , um die Instrumentationsargumente zu bearbeiten.
    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 Instrument-Befehl 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 der CI finden Sie unter Benchmarking in CI.

androidx.benchmark.cpuEventCounter.enable (experimentell)

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

  • Argumenttyp:boolean
  • 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:durch Kommas getrennte Liste von Strings
  • Verfügbare Optionen:
    • Instructions
    • CPUCycles
    • L1DReferences
    • L1DMisses
    • BranchInstructions
    • BranchMisses
    • L1IReferences
    • L1IMisses
  • Standardeinstellung:Instructions, CpuCycles, BranchMisses

androidx.benchmark.dryRunMode.enable

Damit können Sie Benchmarks in einem einzigen Loop ausführen, um zu prüfen, ob sie richtig funktionieren.

Das heißt:

  • Konfigurationsfehler werden nicht erzwungen, um beispielsweise die Ausführung mit regulären Korrektheitstests auf Emulatoren zu erleichtern.
  • Der Benchmark wird nur einmal durchlaufen und es gibt keine Aufwärmphase.
  • Messungen und Traces werden nicht erfasst, um die Laufzeit zu verkürzen.

Dadurch wird der Testdurchsatz optimiert und die Benchmark-Logik wird über die Richtigkeit von Build und Messung hinweg validiert.

  • Argumenttyp:boolean
  • Standardwert: false

androidx.benchmark.iterations

Konfiguriert, wie viele Messungen erfolgen. Dies definiert nicht direkt die Anzahl der ausgeführten Schleifen, da für jede Messung in der Regel viele Schleifen ausgeführt werden, die während des Aufwärmens dynamisch auf Grundlage der Laufzeit definiert werden.

  • Argumenttyp:Ganzzahl
  • Standardwert: 50

androidx.benchmark.killExistingPerfettoRecordings

Standardmäßig werden alle vorhandenen Perfetto-Aufzeichnungen (System Trace) von Microbenchmark beendet, wenn ein neuer Trace gestartet wird, um Störungen zu reduzieren. Wenn Sie dieses Verhalten deaktivieren möchten, übergeben Sie false.

  • Argumenttyp:boolean
  • Standardwert: true

androidx.benchmark.output.enable

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

  • Argumenttyp:boolean
  • Standardwert: true

androidx.benchmark.profiling.mode

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

Hinweis: Bei einigen Android-Betriebssystemversionen wird das Methodentracing nicht unterstützt, ohne dass nachfolgende Messungen beeinträchtigt werden. Microbenchmark löst eine Ausnahme aus, um dies zu verhindern. Verwenden Sie daher das Standardargument, um Methoden-Traces nur dann zu erfassen, wenn dies sicher ist. Weitere Informationen finden Sie unter Problem 316174880.

  • Argumenttyp:String
  • Verfügbare Optionen:
    • MethodTracing
    • StackSampling
    • None
  • Standardmäßig: Sichere Version von MethodTracing, bei der nur ein Methoden-Trace erfasst wird, wenn das Gerät dies ohne Beeinträchtigung der Messungen tun kann.

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
  • Standardwert:eine leere Liste

additionalTestOutputDir

Konfiguriert, wo JSON-Benchmarkberichte und Profilierungsergebnisse auf dem Gerät gespeichert werden.

  • Argumenttyp:Dateipfad-String
  • Standardmäßig: externes Verzeichnis des Test-APKs

listener

Wenn während der Ausführung des Benchmarks nicht zugehörige Hintergrundarbeiten ausgeführt werden, kann es zu inkonsistenten Benchmark-Ergebnissen kommen.

Wenn Sie Hintergrundarbeiten während des Benchmarking deaktivieren möchten, legen Sie den Instrumentation-Argumenttyp listener auf androidx.benchmark.junit4.SideEffectRunListener fest.

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