Instrumentierungsargumente hinzufügen

Konfigurieren Sie das Verhalten der Bibliothek mit den folgenden Instrumentierungsargumenten. Sie können sie entweder Ihrer Gradle-Konfiguration hinzufügen oder sie direkt anwenden, wenn Sie die Instrumentierung über die Befehlszeile ausführen. Fügen Sie diese Argumente zu testInstrumentationRunnerArguments hinzu, um sie für alle Android Studio- und Befehlszeilen-Testläufe festzulegen:

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. Bearbeiten Sie die Ausführungskonfiguration, indem Sie auf Bearbeiten und dann auf die Konfiguration klicken.
    Ausführungskonfiguration bearbeiten
    Abbildung 1. Bearbeiten Sie die Ausführungskonfiguration.
  2. Bearbeiten Sie die Instrumentierungsargumente. Klicken Sie dazu neben Instrumentierungsargumente auf Mehr.
    Instrumentierungsargumente bearbeiten
    Abbildung 2: Bearbeiten Sie die Instrumentierungsargumente.
  3. Fügen Sie das erforderliche Instrumentierungsargument hinzu. Klicken Sie dazu unter Instrumentation Extra Params (Zusätzliche Parameter für die Instrumentierung) auf Hinzufügen.
    Erforderliches Instrumentierungsargument hinzufügen
    Abbildung 3: Fügen Sie das erforderliche Instrumentierungsargument hinzu.

Wenn Sie direkt über die Befehlszeile anrufen, verwenden Sie -P android.testInstrumentationRunnerArguments.[name of the argument].

./gradlew :benchmark:connectedAndroidTest -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile

androidx.Benchmark.compilation.enabled

Hiermit können Sie die Kompilierung zwischen jeder Iteration der Benchmark deaktivieren. Standardmäßig wird die Zielanwendung zwischen den einzelnen Benchmarks neu installiert und kompiliert, um das an measureRepeated übergebene CompilationMode zu berücksichtigen. Wenn Sie diese Option deaktivieren, können Sie sowohl die Neuinstallation als auch die Kompilierung überspringen, wenn Sie beispielsweise die Zielanwendung einmal vollständig kompilieren möchten, bevor Sie die Testsuite ausführen und alle Benchmarks für dieses vollständig kompilierte Ziel ausführen möchten.

  • Argumenttyp: boolesch
  • Standardwert: true

androidx.Benchmark.dryRunMode.enable

Hiermit können Sie Benchmarks in einer einzelnen Schleife ausführen, um zu prüfen, ob sie ordnungsgemäß funktionieren. Sie können es mit regelmäßigen Tests im Rahmen der Überprüfung verwenden.

  • Argumenttyp: boolesch
  • Standardwert: false

androidx.Benchmark.enabledRules

Ermöglicht das Filtern von Ausführungen nach nur einem Testtyp: Generierung von Referenzprofilen oder Makro-Benchmark-Test. Durch Kommas getrennte Listen werden ebenfalls unterstützt.

  • Argumenttyp: String
  • Verfügbare Optionen:
    • Macrobenchmark
    • BaselineProfile
  • Standardeinstellung: Nicht angegeben

androidx.Benchmark.junit4.SideEffectRunListener

Sie können inkonsistente Benchmark-Ergebnisse erhalten, wenn während der Ausführung der Benchmark irrelevante Hintergrundarbeiten ausgeführt werden.

Wenn Sie während des Benchmarking Hintergrundarbeiten deaktivieren möchten, setzen Sie den Instrumentierungsargumenttyp listener auf androidx.benchmark.junit4.SideEffectRunListener.

  • Argumenttyp: String
  • Verfügbare Optionen:
    • androidx.benchmark.junit4.SideEffectRunListener
  • Standardeinstellung: Keine Angabe

androidx.Benchmark.fullTracing.enable

Aktiviert androidx.tracing.perfetto-Tracepoints wie das Jetpack Compose-Zusammensetzungs-Tracing.

Sie müssen Ihr Projekt so einrichten, dass Zusammensetzungs-Tracing aus Benchmarks erfasst werden kann. Weitere Informationen finden Sie unter Trace mit Jetpack MacroBenchmark erfassen.

  • Argumenttyp: boolescher Wert
  • Standardwert: false

androidx.Benchmark.profiling.mode

Ermöglicht das Erfassen von Trace-Dateien beim Ausführen der Benchmarks. Die verfügbaren Optionen sind die gleichen wie die für die MicroBenchmark-Bibliothek. Weitere Informationen finden Sie in den Beschreibungen unter Profil für MicroBenchmark erstellen.

  • Argumenttyp: String
  • Verfügbare Optionen:
    • MethodTracing
    • StackSampling
    • None
  • Standardwert: None

androidx.Benchmark.startupProfiles.enable

Hiermit können Sie die Generierung von Start-up-Profilen während des Benchmarking deaktivieren.

  • Argumenttyp: boolescher Wert
  • Standardwert: true

androidx.Benchmark.suppressErrors

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

  • Argumenttyp: Liste mit Strings
  • Verfügbare Optionen:

    • DEBUGGABLE

      Der Fehler DEBUGGABLE gibt an, dass das Zielpaket mit debuggable=true im Manifest ausgeführt wird. Dadurch wird die Laufzeitleistung zur Unterstützung von Fehlerbehebungsfunktionen drastisch reduziert. Führen Sie Benchmarks mit debuggable=false aus, um diesen Fehler zu vermeiden. Das Debug-fähige Argument wirkt sich auf die Ausführungsgeschwindigkeit aus. Dies bedeutet, dass Benchmark-Verbesserungen möglicherweise nicht auf die tatsächliche Nutzererfahrung übertragen werden oder die Release-Leistung beeinträchtigt werden kann.

    • LOW-BATTERY

      Bei niedrigem Akkustand verringern Geräte häufig die Leistung, um den verbleibenden Akku zu schonen, z. B. indem große Kerne deaktiviert werden. Dies geschieht auch dann, wenn die Geräte angeschlossen sind. Unterdrücken Sie diesen Fehler nur, wenn Sie absichtlich ein Profil der Anwendung mit reduzierter Leistung erstellen.

    • EMULATOR

      Der Fehler EMULATOR gibt an, dass die Benchmark auf einem Emulator ausgeführt wird, der für die Geräte echter Nutzer nicht repräsentativ ist. Verbesserungen von Emulator-Benchmarks werden möglicherweise nicht für die tatsächliche Nutzererfahrung übernommen oder beeinträchtigen die tatsächliche Geräteleistung. Stattdessen sollten Sie ein physisches Gerät für das Benchmarking verwenden. Unterdrücken Sie diesen Fehler nur mit äußerster Vorsicht.

    • NOT-PROFILEABLE

      Das Zielpaket $packageName wird ohne <profileable shell=true> ausgeführt. Unter Android 10 und 11 ist Profileable erforderlich, damit MacroBenchmark detaillierte Trace-Informationen vom Zielprozess erfassen kann, z. B. in der App oder den Bibliotheken definierte System-Tracing-Abschnitte. Unterdrücken Sie diesen Fehler nur mit äußerster Vorsicht.

    • METHOD-TRACING-ENABLED

      Bei der MacroBenchmark-Ausführung der Anwendung, für die ein Benchmarking durchgeführt wird, ist Methoden-Tracing aktiviert. Dies führt dazu, dass die VM langsamer als üblich ausgeführt wird. Betrachten Sie die Messwerte aus den Trace-Dateien daher nur relativ gesehen, z. B. um die Geschwindigkeit der ersten Ausführung mit der zweiten zu vergleichen. Das Unterdrücken dieses Fehlers kann zu ungenauen Ergebnissen führen, wenn Sie Benchmarks für Builds mit verschiedenen Optionen für das Methoden-Tracing vergleichen.

  • Standardwert: eine leere Liste

additionalTestOutputDir

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

  • Argumenttyp: Pfadstring
  • Standardeinstellung: Externes Verzeichnis des Test-APKs