Makro-Benchmark-Messwerte erfassen

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

Im folgenden Code-Snippet werden Frame-Timing und Messwerte für benutzerdefinierte Trace-Abschnitte erfasst:

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 zu verfolgenden Blöcke, die in RecyclerView definiert sind. 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 sie in der Ausgabe kombiniert.

Ergebnisse von TraceSectionMetric und FrameTimingMetric.
Abbildung 1: Ergebnisse von TraceSectionMetric und FrameTimingMetric

Start-Timing-Messwert

StartupTimingMetric erfasst Messwerte zum Startzeitpunkt der App mit den folgenden Werten:

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

StartupTimingMetric gibt die Minimal-, Median- und Maximalwerte aus den Startiterationen aus. Wenn Sie die Verbesserung der Startzeit beurteilen möchten, sollten Sie sich auf Medianwerte konzentrieren, da sie die beste Schätzung der typischen Startzeit liefern. Weitere Informationen Informationen dazu, was sich auf die App-Startzeit auswirkt, finden Sie unter App-Startzeit

StartupTimingMetric-Ergebnisse
Abbildung 2: StartupTimingMetric Ergebnisse.

FrameTimingMetric

FrameTimingMetric erfasst Zeitinformationen aus Frames, die von einem Benchmark erstellt wurden, z. B. ein Scrollen oder eine Animation, und gibt die folgenden Werte aus:

  • frameOverrunMs: die Zeitspanne, um die die Frist für einen bestimmten Frame überschritten wird. Positive Zahlen geben an, dass ein Frame verloren gegangen ist und es zu Rucklern oder Aussetzern kommt. 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 Identifizieren und Optimieren langsamer Frames findest du unter Langsames Rendern.

FrameTimingMetric-Ergebnisse
Abbildung 3: FrameTimingMetric Ergebnisse.

TraceSectionMetric

TraceSectionMetric zeichnet auf, wie oft ein Trace-Abschnitt mit der angegebenen sectionName vorkommt und wie lange er dauert. 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 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. die während einer Messung erfasst wurden. 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
Abbildung 4: TraceSectionMetric Ergebnisse.

Leistungsmetrik

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 aufgeschlüsselt. Nicht ausgewählte Kategorien werden dem Messwert „Nicht ausgewählt“ hinzugefügt.

Diese Messwerte messen den systemweiten Verbrauch, nicht den Verbrauch pro App. Sie sind auf Google Pixel 6, Google Pixel 6 Pro und neuere Geräte beschränkt:

  • power<category>Uw: die Menge an Strom, die während der Dauer deines in dieser Kategorie testen.
  • energy<category>Uws: Die übertragene Energie pro Zeiteinheit während der 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 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.

PowerMetric-Ergebnisse
Abbildung 5: PowerMetric Ergebnisse.