Messwerte sind die wichtigsten Informationen, die aus Ihren Benchmarks extrahiert werden. Sie werden als List
an die Funktion measureRepeated
übergeben, mit der Sie mehrere gemessene Messwerte gleichzeitig angeben können. Zum Ausführen der Benchmark ist mindestens ein Messwerttyp erforderlich.
Das folgende Code-Snippet erfasst Frame-Timing und benutzerdefinierte Messwerte im Trace-Bereich:
Kotlin
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Java
benchmarkRule.measureRepeated( TARGET_PACKAGE, // packageName Arrays.asList( // metrics new StartupTimingMetric(), new TraceSectionMetric("RV CreateView"), new TraceSectionMetric("RV OnBindView"), ), 5, // Iterations // ... );
In diesem Beispiel sind RV CreateView
und RV OnBindView
die IDs der nachverfolgbaren Blöcke, die in RecyclerView
definiert sind. Der Quellcode für die Methode createViewHolder()
ist ein Beispiel dafür, wie Sie nachverfolgbare Blöcke in Ihrem eigenen Code definieren können.
StartupTimingMetric
, TraceSectionMetric
, FrameTimingMetric
und PowerMetric
werden weiter unten in diesem Dokument ausführlich behandelt.
Benchmarkergebnisse werden in Android Studio ausgegeben, wie in Abbildung 1 dargestellt. Wenn mehrere Messwerte definiert sind, werden alle in der Ausgabe zusammengefasst.
![Ergebnisse von TraceSectionMetric und FrameTimingMetric.](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames_tracing.png?authuser=0000&hl=de)
TraceSectionMetric
und FrameTimingMetric
.Start-Timing-Messwert
StartupTimingMetric
erfasst Messwerte für die App-Startzeit mit den folgenden Werten:
timeToInitialDisplayMs
: Die Zeitspanne zwischen dem Empfang eines Start-Intents im System und dem Rendern des ersten Frames des ZielsActivity
.timeToFullDisplayMs
: Die Zeitspanne zwischen dem Empfang eines Start-Intents im System und dem Zeitpunkt, zu dem die Anwendung mit der MethodereportFullyDrawn()
vollständig gemeldet wird. Die Messung endet, wenn das Rendern des ersten Frames nach demreportFullyDrawn()
-Aufruf (oder das Enthalten) abgeschlossen ist. Diese Messung ist unter Android 10 (API-Level 29) und früheren Versionen möglicherweise nicht verfügbar.
StartupTimingMetric
gibt die Mindest-, Median- und Maximalwerte aus den Startiterationen aus. Bei der Bewertung der Start-Optimierung sollten Sie sich auf Medianwerte konzentrieren, da diese die beste Schätzung der typischen Startzeit liefern. Weitere Informationen dazu, was sich auf die App-Startzeit auswirkt, finden Sie unter App-Startzeit.
![StartupTimingMetric-Ergebnisse](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_fully_drawn_startup.png?authuser=0000&hl=de)
StartupTimingMetric
Ergebnisse.Frame-Timing-Messwert
FrameTimingMetric
erfasst Zeitinformationen aus Frames, die von einer Benchmark erstellt wurden, z. B. Scrollen oder Animationen, und gibt die folgenden Werte aus:
frameOverrunMs
: die Zeitspanne, um die die Frist für einen bestimmten Frame überschritten wird. Positive Zahlen geben einen abgebrochenen Frame und eine sichtbare Verzögerung oder Ruckeln an. Negative Zahlen geben an, wie viel schneller ein Frame als das Zeitlimit ist. Hinweis: Diese Funktion ist nur auf Geräten mit Android 12 (API-Level 31) und höher verfügbar.frameDurationCpuMs
: Die Zeit, die der Frame benötigt, um auf der CPU sowohl im UI-Thread als auch imRenderThread
zu erzeugen.
Diese Messungen werden in einer Verteilung des 50., 90., 95. und 99. Perzentils erfasst.
Weitere Informationen zum Erkennen und Verbessern langsamer Frames findest du unter Langsames Rendering.
![FrameTimingMetric-Ergebnisse](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames.png?authuser=0000&hl=de)
FrameTimingMetric
Ergebnisse.TraceSectionMetric
TraceSectionMetric
erfasst die Häufigkeit, mit der ein mit dem angegebenen sectionName
übereinstimmender Trace-Abschnitt auftritt, und die dafür benötigte Zeit. Für die Zeit werden die Mindest-, Median- und Höchstzeiten in Millisekunden ausgegeben. Der Trace-Abschnitt wird entweder durch den Funktionsaufruf trace(sectionName)
oder den Code zwischen Trace.beginSection(sectionName)
und Trace.endSection()
oder deren asynchronen Varianten definiert. Es wird immer die erste Instanz eines Trace-Abschnitts ausgewählt, der während einer Messung erfasst wird. Standardmäßig werden nur Trace-Abschnitte Ihres Pakets ausgegeben. Legen Sie targetPackageOnly = false
fest, um Prozesse außerhalb des Pakets einzuschließen.
Weitere Informationen zum Tracing finden Sie unter Systemverfolgung und Benutzerdefinierte Ereignisse definieren.
![TraceSectionMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_tracing.png?authuser=0000&hl=de)
TraceSectionMetric
Ergebnisse.Leistungsmetrik
PowerMetric
erfasst die Änderung der Leistung oder Energie während der Dauer des Tests für die angegebenen Leistungskategorien.
Jede ausgewählte Kategorie wird in ihre messbaren Unterkomponenten unterteilt. Nicht ausgewählte Kategorien werden dem Messwert „Nicht ausgewählt“ hinzugefügt.
Mit diesen Messwerten wird die systemweite Nutzung gemessen, nicht der Verbrauch pro App. Sie sind auf Pixel 6, Pixel 6 Pro und neuere Geräte beschränkt:
power<category>Uw
: der Stromverbrauch im Verlauf des Tests in dieser Kategorie.energy<category>Uws
: die pro Zeiteinheit übertragene Energie für die Dauer des Tests in dieser Kategorie.
Zu den Kategorien gehören:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
Bei einigen Kategorien wie CPU
ist es möglicherweise schwierig, die Arbeit anderer Prozesse von der Arbeit Ihrer eigenen App zu trennen. Entfernen oder beschränken Sie unnötige Apps und Konten, um dies zu vermeiden.
![PowerMetric-Ergebnisse](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_power.png?authuser=0000&hl=de)
PowerMetric
Ergebnisse.Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Baseline-Profile erstellen {:#creating-profile-rules}
- Makro-Benchmark schreiben
- Analyse und Optimierung von App-Start-ups {:#app-startup-analysis-optim}