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.

  • Startup-Hero-Benchmarks: 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-Level 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. Compose 1.11 wurde zum Vergleich ebenfalls auf dem Pixel 6 gemessen.
  • 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 Starts haben wir PokedexStartupBenchmark verwendet. Mit PokedexStartupBenchmark wird die Zeit gemessen, die die Pokédex-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 sie von einem Kaltstart ausgeht. 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 erreicht Compose 1.13 die erste Anzeige bei einem Kaltstart in 147,65 ms. Dieses Ergebnis liegt im normalen Bereich der Abweichungen zwischen den Ausführungen von Compose 1.12.1 (145,51 ms) und Compose 1.11.4 (147,78 ms) und ist 3,4 % schneller als Views (152,87 ms).

Zeit bis zur ersten Anzeige in Millisekunden, getestet auf dem Pixel 6
VersionZeit bis zur ersten Anzeige (ms)
Compose 1.11147,78
Compose 1.12145,51
Compose 1.13147,65
Aufrufe152,87
Abbildung 1. In diesem Diagramm wird die TTID für Compose 1.11, 1.12 und 1.13 mit Views verglichen.

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 App-Startzeit.

In der PokedexStartupBenchmark erreicht Compose 1.13 die vollständige Anzeige bei einem Kaltstart in 202,79 ms. Dieses Ergebnis liegt im normalen Bereich der Abweichungen zwischen den Ausführungen von Compose 1.12.1 (201,96 ms) und Compose 1.11.4 (203,33 ms). Views erreicht die vollständige Anzeige in 180,32 ms. Compose 1.13 ist also 12,5 % langsamer als Views für TTFD.

Zeit bis zur vollständigen Anzeige in Millisekunden, getestet auf dem Pixel 6
VersionZeit bis zur vollständigen Anzeige (ms)
Compose 1.11203,33
Compose 1.12201,96
Compose 1.13202,79
Aufrufe180,32
Abbildung 2. In diesem Diagramm wird die TTFD für Compose 1.11, 1.12 und 1.13 mit Views verglichen.

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 für ihre Arbeit braucht, 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 weisen Views und Compose in Compose 1.11.4, 1.12.1 und 1.13 jeweils 0,00 % Ruckeln auf.

Zusätzliche Ruckler bei Compose im Vergleich zu Ansichten in Prozentpunkten, nach Compose-Version (niedriger ist besser)
Compose-VersionGerätÜbermäßige Ruckler im Vergleich zu Aufrufen (PP)
1.3.3Pixel 3a+0,35
1.4.3Pixel 3a+0,41
1.5.4Pixel 3a+0,42
1.6.8Pixel 3a+0,21
1.7.8Pixel 3a+0,36
1.8.0Pixel 3a+0,38
1.9.0Pixel 3a0
1.10.0Pixel 3a0
1.11Pixel 60
1.12Pixel 60
1.13Pixel 60
Abbildung 3. 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.