Sie können das Verhalten von Microbenchmark mit den folgenden Instrumentierungsargumenten konfigurieren. 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:
- 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. - Klicken Sie neben dem Feld Instrumentationsargumente auf
Abbildung 2. Bearbeiten Sie das Instrumentierungsargument.
, um die Instrumentationsargumente zu bearbeiten.
- Klicken Sie auf
Abbildung 3: Fügen Sie das Instrumentierungsargument hinzu.
und fügen Sie das erforderliche 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 Instrumentationsbefehl 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.cupEventCounter.events
angegebenen CPU-Ereignisse.
Erfordert Root-Zugriff.
- Argumenttyp:boolescher Wert
- Standardwert: „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 einzelnen 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.
- Beim Benchmark wird nur eine Schleife ohne Warm-up ausgeführt.
- Messungen und Traces werden nicht erfasst, um die Laufzeit zu verkürzen.
Dadurch wird der Testdurchsatz optimiert und die Benchmark-Logik wird über die Build- und Messrichtigkeit hinweg validiert.
- 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.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 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 Profilerstellungsergebnisse 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
Empfehlungen für dich
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Argumente für die Makrobenchmark-Instrumentierung
- Microbenchmark profilieren
- Baseline-Profile erstellen {:#creating-profile-rules}