Makro-Benchmark-Messwerte erfassen

Messwerte sind die wichtigsten Informationen, die aus Ihren Benchmarks extrahiert werden. Sie werden an measureRepeated übergeben. Funktion als List, mit der Sie angeben können, mehrere Messwerte gleichzeitig erfassen. Für das Ereignis ist mindestens ein Messwerttyp erforderlich. ausgeführt werden soll.

Mit dem folgenden Code-Snippet werden Frame-Timings und benutzerdefinierter Trace-Abschnitt erfasst. Metriken:

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: RV CreateView und RV OnBindView sind die IDs rückverfolgbarer Blöcke, die in RecyclerView Die Quellcode für die createViewHolder() ist ein Beispiel dafür, wie Sie rückverfolgbare Blöcke innerhalb Ihrer eigenen Code.

StartupTimingMetric, TraceSectionMetric, FrameTimingMetric und PowerMetric sind abgedeckt. dieses Dokument genauer an.

Benchmarkergebnisse werden in Android Studio ausgegeben, wie in Abbildung 1 dargestellt. Wenn mehrere Messwerte definiert sind, werden alle in der Ausgabe zusammengefasst.

<ph type="x-smartling-placeholder">
</ph> Ergebnisse von TraceSectionMetric und FrameTimingMetric.
Abbildung 1: Ergebnisse von TraceSectionMetric und FrameTimingMetric

Start-Timing-Messwert

StartupTimingMetric erfasst Messwerte für die App-Startzeit mit den folgenden Werten:

  • timeToInitialDisplayMs: Die Zeitspanne ab dem Zeitpunkt, zu dem das System Start-Intent, wenn der erste Frame des Ziels gerendert wird Activity
  • timeToFullDisplayMs: Die Zeitspanne ab dem Zeitpunkt, zu dem das System ein Startabsicht, bis die App vollständig mit dem reportFullyDrawn() . Die Messung endet, wenn das Rendern des ersten Frames abgeschlossen ist. nach dem reportFullyDrawn()-Aufruf oder enthalten ihn. Dieses sind unter Android 10 (API-Level 29) und früheren Versionen möglicherweise nicht verfügbar.

StartupTimingMetric gibt die Mindest-, Median- und Maximalwerte beim Start aus Iterationen vor. Um die Verbesserung von Start-ups zu beurteilen, sollten Sie sich auf Medianwerte, da sie die beste Schätzung der typischen Startzeit bieten. Weitere Informationen Informationen dazu, was sich auf die App-Startzeit auswirkt, finden Sie unter App-Startzeit

<ph type="x-smartling-placeholder">
</ph> StartupTimingMetric-Ergebnisse
Abbildung 2: StartupTimingMetric Ergebnisse.

Frame-Timing-Messwert

FrameTimingMetric erfasst Timing-Informationen aus Frames, die von einer Benchmark erstellt wurden, z. B. oder Animation 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, bis er produziert wird. die CPU sowohl im UI-Thread als auch im RenderThread an.

Diese Messungen werden in einer Verteilung von 50., 90., 95. und 99. erfasst. Perzentil.

Weitere Informationen zum Erkennen und Verbessern langsamer Frames findest du unter Langsames Rendering:

<ph type="x-smartling-placeholder">
</ph> FrameTimingMetric-Ergebnisse
Abbildung 3: FrameTimingMetric Ergebnisse.

TraceSectionMetric

TraceSectionMetric erfasst, wie oft ein Trace-Abschnitt mit dem angegebenen sectionName übereinstimmt und die Zeit, die dafür benötigt wird. Für die Zeit wird das Minimum ausgegeben, Medianwert und die Höchstdauer in Millisekunden. Der Trace-Abschnitt wird entweder durch den Funktionsaufruf trace(sectionName) oder der Code zwischen Trace.beginSection(sectionName) und Trace.endSection() oder um ihre asynchronen Varianten zu optimieren. Es wird immer die erste Instanz eines Trace-Abschnitts ausgewählt. die während einer Messung erfasst wurden. Es werden nur Trace-Abschnitte aus Ihrem Paket ausgegeben. ist standardmäßig aktiviert. um Prozesse außerhalb Ihres Pakets einzubeziehen, targetPackageOnly = false

Weitere Informationen zum Tracing finden Sie unter Systemübersicht Tracing und Benutzerdefiniertes Definieren Ereignisse.

<ph type="x-smartling-placeholder">
</ph> TraceSectionMetric
Abbildung 4: TraceSectionMetric Ergebnisse.

Leistungsmetrik

PowerMetric Aufnahmen die Änderung der Leistung oder Energie während der Dauer des Tests für die Leistungskategorien. Jede ausgewählte Kategorie wird in ihre messbaren Unterkomponenten unterteilt. werden nicht ausgewählte Kategorien zu den nicht ausgewählten Messwert.

Diese Messwerte messen und nicht pro App, sondern systemweit genutzt werden. auf Google Pixel 6, Google Pixel 6 Pro und neueren Modellen:

  • power<category>Uw: die Menge an Strom, die während der Dauer deines in dieser Kategorie testen.
  • energy<category>Uws: die pro Zeiteinheit übertragene Energiemenge für Dauer Ihres 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 Aufgaben von anderen Prozessen aus der Arbeit Ihrer eigenen App. Um Störungen zu minimieren, unnötige Apps und Konten zu entfernen oder einzuschränken.

<ph type="x-smartling-placeholder">
</ph> PowerMetric-Ergebnisse
Abbildung 5: PowerMetric Ergebnisse.