Messwerte sind die wichtigsten Informationen, die aus Ihren Benchmarks extrahiert werden. Sie werden der Funktion measureRepeated
als List
übergeben, sodass Sie mehrere gemessene Messwerte gleichzeitig angeben können. Damit der Benchmark ausgeführt werden kann, ist mindestens ein Messwerttyp erforderlich.
Das folgende Code-Snippet erfasst Messwerte für das Frame-Timing und benutzerdefinierte Trace-Abschnitte:
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 von nachverfolgbaren Blöcken, die in RecyclerView
definiert sind. Der Quellcode für die Methode createViewHolder()
ist ein Beispiel dafür, wie Sie nachvollziehbare Blöcke in Ihrem eigenen Code definieren können.
StartupTimingMetric
, TraceSectionMetric
, FrameTimingMetric
> und PowerMetric
werden später in diesem Dokument ausführlich behandelt.
Eine vollständige Liste der Messwerte finden Sie in den Unterklassen von Metric
.
Benchmark-Ergebnisse werden in Android Studio ausgegeben, wie in Abbildung 1 dargestellt. Wenn mehrere Messwerte definiert sind, werden sie alle in der Ausgabe kombiniert.

TraceSectionMetric
und FrameTimingMetric
.StartupTimingMetric
StartupTimingMetric
erfasst Messwerte für das Timing des App-Starts mit den folgenden Werten:
timeToInitialDisplayMs
: Die Zeitspanne zwischen dem Empfang einer Startabsicht durch das System und dem Rendern des ersten Frames des Ziel-Activity
.timeToFullDisplayMs
: Die Zeitspanne zwischen dem Empfang eines Start-Intents durch das System und dem Zeitpunkt, zu dem die App mit der MethodereportFullyDrawn()
meldet, dass sie vollständig gerendert wurde. Die Messung wird beendet, sobald der erste Frame nach demreportFullyDrawn()
-Aufruf gerendert wurde. Diese Messung ist möglicherweise nicht für Android 10 (API-Level 29) und niedriger verfügbar.
StartupTimingMetric
gibt die Minimal-, Median- und Maximalwerte der Start-up-Iteration aus. Um die Verbesserung des Startvorgangs zu bewerten, sollten Sie sich auf die Medianwerte konzentrieren, da sie die beste Schätzung der typischen Startzeit liefern. Weitere Informationen dazu, was zur App-Startzeit beiträgt, finden Sie unter App-Startzeit.

StartupTimingMetric
ErgebnisseFrameTimingMetric
FrameTimingMetric
erfasst Zeitinformationen aus Frames, die von einem Benchmark wie einem Scrolling oder einer Animation erzeugt werden, und gibt die folgenden Werte aus:
frameOverrunMs
: Die Zeitspanne, um die ein bestimmter Frame seine Deadline verpasst. Positive Zahlen weisen auf einen ausgelassenen Frame und sichtbare Ruckler oder Stottern hin. Negative Zahlen geben an, wie viel schneller ein Frame als die Deadline ist. Hinweis: Diese Funktion ist nur unter Android 12 (API-Level 31) und höher verfügbar.frameDurationCpuMs
: Die Zeit, die für die Erstellung des Frames auf der CPU im UI-Thread und imRenderThread
benötigt wird.
Diese Messungen werden in einer Verteilung des 50., 90., 95. und 99. Perzentils erfasst.
Weitere Informationen zum Erkennen und Beheben von Problemen mit langsamen Frames finden Sie unter Langsames Rendern.

FrameTimingMetric
ErgebnisseTraceSectionMetric
TraceSectionMetric
erfasst die Anzahl der Vorkommen eines Trace-Abschnitts, der mit dem angegebenen sectionName
übereinstimmt, und die dafür benötigte Zeit. Für die Zeit werden die Mindest-, Median- und Höchstwerte 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 während einer Messung erfassten Trace-Abschnitts ausgewählt. Standardmäßig werden nur Trace-Abschnitte aus Ihrem Paket ausgegeben. Wenn Sie Prozesse außerhalb Ihres Pakets einbeziehen möchten, legen Sie targetPackageOnly = false
fest.
Weitere Informationen zum Tracing finden Sie unter System-Tracing – Übersicht und Benutzerdefinierte Ereignisse definieren.

TraceSectionMetric
ErgebnissePowerMetric
PowerMetric
erfasst die Änderung der Leistung oder Energie während 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.
Diese Messwerte beziehen sich auf den systemweiten Verbrauch und nicht auf den Verbrauch pro App. Sie sind auf das Pixel 6, Pixel 6 Pro und neuere Geräte beschränkt:
power<category>Uw
: Die in dieser Kategorie während des Tests verbrauchte Strommenge.energy<category>Uws
: Die Menge an Energie, die pro Zeiteinheit während des Tests in dieser Kategorie übertragen wurde.
Dazu gehören folgende Kategorien:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
Bei einigen Kategorien, z. B. CPU
, ist es möglicherweise schwierig, die Arbeit anderer Prozesse von der Arbeit Ihrer eigenen App zu trennen. Um Störungen zu minimieren, sollten Sie unnötige Apps und Konten entfernen oder einschränken.

PowerMetric
ErgebnisseEmpfehlungen für dich
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Baseline-Profile erstellen {:#creating-profile-rules}
- Macrobenchmark schreiben
- Analyse und Optimierung des App-Starts {:#app-startup-analysis-optimization}