Argumente für die Instrumentierung von Makro-Benchmarks

Konfigurieren Sie das Verhalten der Bibliothek 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 Testläufe in Android Studio und über die Befehlszeile 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 und dann auf die Konfiguration klicken.
    Ausführungskonfiguration bearbeiten
    Abbildung 1: Bearbeiten Sie die Ausführungskonfiguration.
  2. Bearbeiten Sie die Instrumentierungsargumente, indem Sie unter Instrumentierungsargumente auf das Dreipunkt-Menü  klicken.
    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 Instrumentierungsparameter) auf Hinzufügen.
    Erforderliches Instrumentierungsargument hinzufügen
    Abbildung 3: Fügen Sie das erforderliche Instrumentierungsargument hinzu.

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

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

Wenn Sie den am 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.enabledRules BaselineProfile -w com.example.macrobenchmark/androidx.test.runner.AndroidJUnitRunner

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

androidx.benchmark.compilation.enabled

Ermöglicht es, die Kompilierung zwischen den einzelnen Iterationen des Benchmarks zu deaktivieren. Standardmäßig wird die Zielanwendung zwischen den einzelnen Benchmarks neu installiert und neu kompiliert, um den in measureRepeated übergebenen CompilationMode zu berücksichtigen. Wenn Sie diese Option deaktivieren, können Sie sowohl die Neuinstallation als auch die Kompilierung überspringen, wenn Sie beispielsweise die Ziel-App 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:boolescher Wert
  • Standardeinstellung:true

androidx.benchmark.dryRunMode.enable

Damit können Sie Benchmarks in einer Schleife ausführen, um zu prüfen, ob sie ordnungsgemäß funktionieren. Sie können sie im Rahmen der Überprüfung für regelmäßige Tests verwenden.

  • Argumenttyp:boolescher Wert
  • Standardeinstellung:false

androidx.benchmark.enabledRules

Ermöglicht das Filtern von Läufen nach nur einem Testtyp: Baseline-Profilgenerierung oder Macrobenchmark-Test. Durch Kommas getrennte Listen werden ebenfalls unterstützt.

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

androidx.benchmark.fullTracing.enable

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

Sie müssen Ihr Projekt so einrichten, dass Sie Kompositions-Tracing von Benchmarks erfassen können. Weitere Informationen finden Sie unter Trace mit Jetpack Macrobenchmark aufzeichnen.

  • Argumenttyp: boolescher Wert
  • Standardeinstellung: false

androidx.benchmark.killExistingPerfettoRecordings

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

  • Argumenttyp:boolescher Wert
  • Standardeinstellung:true

androidx.benchmark.profiling.mode

Ermöglicht das Erfassen von Tracedateien während der Ausführung der Benchmarks. Die verfügbaren Optionen sind dieselben wie für die Microbenchmark-Bibliothek. Weitere Informationen finden Sie in den Beschreibungen unter Microbenchmark profilieren.

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

androidx.benchmark.startupProfiles.enable

Ermöglicht es Ihnen, die Generierung von Startprofilen während des Benchmarking zu deaktivieren.

  • Argumenttyp: boolescher Wert
  • Standardeinstellung:true

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

      Der Fehler DEBUGGABLE weist darauf hin, dass das Zielpaket mit debuggable=true im Manifest ausgeführt wird. Dadurch wird die Laufzeitleistung zur Unterstützung von Debugging-Funktionen drastisch reduziert. Um diesen Fehler zu vermeiden, führen Sie Benchmarks mit debuggable=false aus. Das Argument „debuggable“ wirkt sich auf die Ausführungsgeschwindigkeit aus. Verbesserungen bei Benchmarks spiegeln sich daher möglicherweise nicht im Nutzererlebnis wider oder können die Release-Leistung beeinträchtigen.

    • LOW-BATTERY

      Wenn der Akku fast leer ist, wird die Leistung von Geräten oft reduziert, um den verbleibenden Akku zu schonen. Dazu werden beispielsweise große Kerne deaktiviert. Das passiert auch, wenn die Geräte angeschlossen sind. Unterdrücken Sie diesen Fehler nur, wenn Sie die App bewusst mit reduzierter Leistung profilieren.

    • EMULATOR

      Der Fehler EMULATOR bedeutet, dass der Benchmark auf einem Emulator ausgeführt wird, der nicht repräsentativ für Geräte echter Nutzer ist. Benchmark-Verbesserungen im Emulator wirken sich möglicherweise nicht auf die Nutzerfreundlichkeit aus oder können die Leistung auf echten Geräten beeinträchtigen. Verwenden Sie stattdessen ein physisches Gerät für Benchmarks. Unterdrücken Sie diesen Fehler nur mit äußerster Vorsicht.

    • NOT-PROFILEABLE

      Das Zielpaket $packageName wird ohne <profileable shell=true> ausgeführt. „Profileable“ ist unter Android 10 und 11 erforderlich, damit Macrobenchmark detaillierte Trace-Informationen aus dem Zielprozess erfassen kann, z. B. System-Tracing-Abschnitte, die in der App oder in Bibliotheken definiert sind. Unterdrücken Sie diesen Fehler nur mit äußerster Vorsicht.

    • METHOD-TRACING-ENABLED

      Für den Macrobenchmark-Lauf für die zu benchmarkende App ist die Methodenverfolgung aktiviert. Dadurch wird die VM langsamer als gewöhnlich ausgeführt. Berücksichtigen Sie die Messwerte aus den Tracedateien daher nur relativ, z. B. indem Sie vergleichen, wie schnell der erste Lauf im Vergleich zum zweiten Lauf ist. Wenn Sie diesen Fehler unterdrücken, kann das zu ungenauen Ergebnissen führen, wenn Sie Benchmarks für Builds mit unterschiedlichen Optionen für die Methodenverfolgung vergleichen.

  • Standardwert: leere Liste

additionalTestOutputDir

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

  • Argumenttyp:Pfadstring
  • 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