Messwerte sind die wichtigste Art von Informationen, die aus Ihren Benchmarks extrahiert werden. Sie
werden als List an die measureRepeated
Funktion übergeben, sodass Sie
mehrere gemessene Messwerte gleichzeitig angeben können. Für die Ausführung des Benchmarks 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
RecyclerViewdefiniert sind. Der
Quellcode für die createViewHolder()
Methode ist ein Beispiel dafür, wie Sie nachverfolgbare 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 beim App-Start mit den folgenden Werten:
timeToInitialDisplayMs: Die Zeitspanne zwischen dem Empfang einer Start-Intent durch das System und dem Rendern des ersten Frames der ZielActivity.timeToFullDisplayMs: Die Zeitspanne zwischen dem Empfang einer Start-Intent durch das System und dem Zeitpunkt, zu dem die App mit derreportFullyDrawn()Methode meldet, dass sie vollständig gerendert wurde. Die Messung wird abgeschlossen, wenn der erste Frame nach dem Aufruf vonreportFullyDrawn()gerendert wurde. Diese Messung ist unter Android 10 (API-Level 29) und niedriger möglicherweise nicht verfügbar.
StartupTimingMetric gibt die Minimal-, Median- und Maximalwerte aus den Start-Iterationen aus. Um die Verbesserung des Starts zu bewerten, sollten Sie sich auf die Medianwerte konzentrieren, da sie die beste Schätzung der typischen Startzeit liefern. Weitere Informationen zu den Faktoren, die zur Startzeit von Apps beitragen, finden Sie unter Startzeit von Apps.
StartupTimingMetric Ergebnisse.FrameTimingMetric
FrameTimingMetric
erfasst Timing-Informationen aus Frames, die von einem Benchmark erzeugt wurden, z. B. beim Scrollen oder bei Animationen, und gibt die folgenden Werte aus:
frameOverrunMs: Die Zeitspanne, um die ein bestimmter Frame seine Frist überschreitet. Positive Zahlen weisen auf einen verworfenen Frame und sichtbare Ruckler hin. Negative Zahlen geben an, wie viel schneller ein Frame als die Frist ist. Hinweis: Diese Funktion ist nur unter Android 12 (API-Level 31) und höher verfügbar.frameDurationCpuMs: Die Zeitspanne, die der Frame benötigt, um auf der CPU sowohl im UI-Thread als auch imRenderThreaderzeugt zu werden.
Diese Messungen werden in einer Verteilung des 50., 90., 95. und 99. Perzentils erfasst.
Weitere Informationen zum Identifizieren und Verbessern langsamer Frames finden Sie unter Langsames Rendering.
FrameTimingMetric Ergebnisse.TraceSectionMetric
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 Minimal-, Median- und Maximalwerte in Millisekunden ausgegeben. Der Trace-Abschnitt wird entweder
durch den Funktionsaufruf
trace(sectionName)
oder durch 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 wurde. 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 Übersicht zum System Tracing und Benutzerdefinierte Ereignisse definieren.
TraceSectionMetric Ergebnisse.PowerMetric
PowerMetric erfasst
die Änderung der Leistung oder Energie während der Testdauer 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 erfassen den systemweiten Verbrauch und nicht den Verbrauch pro App. Sie sind auf das Pixel 6, Pixel 6 Pro und neuere Geräte beschränkt:
power<category>Uw: Die während der Dauer Ihres Tests in dieser Kategorie verbrauchte Leistung.energy<category>Uws: Die während der Testdauer in dieser Kategorie pro Zeiteinheit übertragene Energiemenge für.
Zu den Kategorien gehören:
CPUDISPLAYGPUGPSMEMORYMACHINE_LEARNINGNETWORKUNCATEGORIZED
Bei einigen Kategorien wie CPU ist es möglicherweise schwierig, die Arbeit anderer Prozesse von der Arbeit Ihrer eigenen App zu trennen. Um die Störungen zu minimieren, entfernen oder beschränken Sie unnötige Apps und Konten.
PowerMetricEmpfehlungen für Sie
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist
- Baseline-Profile erstellen {:#creating-profile-rules}
- Makrobenchmark schreiben
- Analyse und Optimierung des App-Starts {:#app-startup-analysis-optimization}