Hero-Benchmarks

Hero-Benchmarks sind eine Reihe von Benchmarks, die allgemeine App-User-Journeys abdecken, z. B. den App-Start oder das Scrollen in der Open-Source-Pokedex-App.

  • Benchmarks für den Start: Erfassen der Zeit vom Öffnen der App bis zur Anzeige von Inhalten.
  • Scroll-Hero-Benchmarks: Messen der Scrollleistung eines Lazy Grid mit Bildern.

Testeinrichtung

  • App-Auswahl: Wir haben diese Tests mit der Open-Source-App Pokedex durchgeführt und die ansichtsbasierte und die Compose-basierte Version verglichen. Die App wurde ausgewählt, um reale Szenarien darzustellen, und wurde nicht vom Compose-Team entwickelt.
  • Hardwareeinrichtung: Die Benchmarks wurden auf einem Pixel 6 mit Android 17 (API 37) mit gesperrten CPUs und GPUs ausgeführt. Vor Compose 1.12 wurden Benchmarks auf einem Pixel 3a durchgeführt. Ab Compose 1.12 wird das Pixel 6 als Standard-Leistungsreferenz für Hero-Benchmarks verwendet.
  • Build-Einrichtung: Für die Benchmarks wird die App im Releasemodus mit aktiviertem R8 verwendet. Die App ist vollständig vorkompiliert, um Instabilität durch Just-in-Time-Kompilierung (JIT) zu reduzieren.
  • Ergebnisauswahl: Um eine Worst-Case-Analyse zu ermöglichen, wurden extreme Ausreißer und nicht repräsentatives Rauschen aus den Benchmark-Ergebnissen ausgeschlossen. Anschließend wurde eine Baseline festgelegt, indem die Medianwerte der Leistungsdaten der oberen Grenze ausgewählt wurden.

Benchmarks für Start-up-Helden

Zur Messung des Startvorgangs haben wir PokedexStartupBenchmark verwendet. Mit PokedexStartupBenchmark wird die Zeit gemessen, die die Pokedex-App benötigt, um für den Nutzer sichtbar zu sein.

Der App-Start kann in einem von drei Zuständen erfolgen: Kaltstart, Warmstart oder Heißstart. Jeder Status wirkt sich darauf aus, wie lange es dauert, bis eine App für den Nutzer sichtbar wird. Bei einem Kaltstart wird die App von Grund auf neu gestartet. In diesem Benchmark messen wir die Leistung beim App-Start im Kaltstartzustand. Wir empfehlen, die App immer so zu optimieren, dass von einem Kaltstart ausgegangen wird. Dadurch kann auch die Leistung von Warm- und Heißstarts verbessert werden.

Die Messwerte, die wir zur Messung der App-Startzeit verwenden, sind die Zeit bis zur ersten Anzeige und die Zeit bis zur vollständigen Anzeige.

Zeit bis zur ersten Anzeige

Die Zeit bis zur ersten Anzeige (Time to Initial Display, TTID) ist die Zeit, die eine App benötigt, um den ersten Frame zu erzeugen. Dazu gehören die Prozessinitialisierung bei einem Kaltstart, die Erstellung von Aktivitäten bei einem Kalt- oder Warmstart und die Anzeige des ersten Frames.

In der PokedexStartupBenchmark ist Compose 1.12 bei der TTID mit einem Kaltstart auf Augenhöhe mit Views.

Compose 1.12 ist bei der TTID mit Views gleichauf
Abbildung 1: Compose 1.12 im Vergleich zu Ansichten für TTID.

Zeit bis zur vollständigen Anzeige

Die Zeit bis zur vollständigen Anzeige (Time to Full Display, TTFD) misst die Zeit, bis die App interaktiv wird. Das bedeutet, dass alle Daten geladen und gezeichnet wurden. Weitere Informationen zur Zeit bis zur vollständigen Anzeige finden Sie unter Startzeit der App.

In der PokedexStartupBenchmark ist Compose 1.12 bei der TTFD mit einem Kaltstart etwa 2 % langsamer als Views.

Compose 1.12 ist bei der TTFD etwa 2 % langsamer als Views.
Abbildung 2: Compose 1.12 im Vergleich zu Ansichten für TTFD.

Durch Hero-Benchmarks scrollen

Zur Messung der Scrollleistung haben wir den PokedexScrollBenchmark verwendet. Sie misst die Scrollleistung des Pokedex-App-Bildschirms für ein Lazy Grid mit Bildern. In diesem Benchmark wird der gesamte Bildschirm mehrmals gescrollt und gewischt und neue Elemente werden geladen. Die Scrollleistung wird anhand der Ruckelrate gemessen.

Ruckelrate

Android-Geräte rendern mit bis zu 60 oder 120 Bildern pro Sekunde (fps). Das bedeutet, dass das System eine strikte Frist (z. B. 16,6 ms für 60 fps) hat, um einen Frame zu erzeugen. Wenn die App zu lange braucht, um ihre Aufgaben auszuführen, kann dies zu einem sichtbaren Ruckeln führen, das wir als „Jank“ bezeichnen.

In der PokedexScrollBenchmark entspricht die Leistung von Compose der von Views, mit 0 Prozentpunkten zusätzlichem Ruckeln seit Compose 1.9.0. Auf dem Pixel 6 (getestet ab Compose 1.11) erreichen sowohl Compose als auch Views eine Ruckelrate von 0 %.

Seit Compose 1.9.0 entspricht das Scroll-Ruckeln in Compose dem in Views.
Seit Compose 1.9.0 entspricht das Scroll-Ruckeln in Compose dem in Views.

Hero-Benchmarks ausführen

So validieren Sie die Leistungsergebnisse und führen die Benchmarks lokal aus:

  1. Folge dem AndroidX-Leitfaden, um den Quellcode abzurufen.
  2. Folgen Sie der Anleitung in der README-Datei zum Quellcode der Hero-Benchmarks, um die Benchmark- und Ziel-APKs (pokedex-macrobenchmark und pokedex-macrobenchmark-target) zu erstellen, sie auf einem Testgerät zu installieren und die PokedexStartupBenchmark- und PokedexScrollBenchmark-Suites mit adb oder Android Studio auszuführen.

Sie können diese Benchmarks auf jedem unterstützten Gerät ausführen, z. B. auf einem bestimmten Gerät, für das Sie Ihre App optimieren. Verwenden Sie jedoch dieselbe Hardwareeinrichtung, um die offiziellen Ergebnisse zu validieren.