Konzepte und Jetpack Compose-Implementierung
Messwerte sind die wichtigste Art von Informationen, die aus Ihren Benchmarks extrahiert werden. Sie werden als List an die Funktion measureRepeated übergeben. So können Sie mehrere gemessene Messwerte gleichzeitig angeben. 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 und FrameTimingMetric 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 einer Startabsicht durch das System und dem Zeitpunkt, zu dem die App mit der MethodereportFullyDrawn()meldet, dass sie vollständig gerendert wurde. Die Messung wird beendet, wenn der erste Frame nach demreportFullyDrawn()-Aufruf gerendert wird. 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 Startiterationen aus. Konzentrieren Sie sich bei der Bewertung von Verbesserungen beim Start immer auf die Medianwerte, da sie die beste Schätzung der typischen Startzeiten für Nutzer darstellen. Weitere Informationen dazu, was zur App-Startzeit beiträgt, finden Sie unter App-Startzeit.
StartupTimingMetric ErgebnisseFrameTimingMetric
FrameTimingMetric erfasst Zeitinformationen von Frames, die von einem Benchmark wie Scrollen oder 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 hin, der zu sichtbaren Rucklern oder Stottern führt. Negative Zahlen geben an, wie viel schneller ein Frame im Vergleich zur Hardware-Deadline des Subsystems fertiggestellt wurde. Hinweis: Dieser Messwert ist nur für 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 imRenderThreadbenötigt wird.
Diese Messungen werden in einer Verteilung des 50., 90., 95. und 99. Perzentils erfasst.
Weitere Informationen dazu, wie Sie langsame Frames erkennen und verbessern können, finden Sie unter Langsames Rendern.
FrameTimingMetric ErgebnisseTraceSectionMetric
TraceSectionMetric erfasst, wie oft ein bestimmter Trace-Abschnitt auftritt, und die absolute Zeit, die für die Ausführung benötigt wird. Für die Zeitmessung werden die Mindest-, Median- und Höchstzeiten in Millisekunden ausgegeben.
Der Zielabschnitt des Traces wird entweder durch den Funktionsaufruf trace(sectionName) oder die Blockgrenzen auf niedrigerer Ebene 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 und Benutzerdefinierte Ereignisse definieren.
TraceSectionMetric ErgebnisseEmpfehlungen 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}