Renderinggeschwindigkeit prüfen

Android bietet einige On-Device-Entwickleroptionen, mit denen Sie visualisieren können, wo bei der Darstellung der Benutzeroberfläche Ihrer App Probleme auftreten können, z. B. wenn mehr Rendering-Arbeit als nötig ausgeführt wird oder lange Thread- und GPU-Vorgänge ausgeführt werden. Auf dieser Seite wird beschrieben, wie Sie GPU-Überschneidungen debuggen und das GPU-Rendering profilieren.

Weitere Informationen zu Entwickleroptionen auf dem Gerät, einschließlich der Aktivierung, finden Sie unter Entwickleroptionen auf dem Gerät konfigurieren.

GPU-Rendering-Geschwindigkeit für Profil erstellen

Das Tool „GPU-Rendering für Profil“ zeigt als scrollendes Histogramm eine visuelle Darstellung der Zeit, die für das Rendern der Frames eines UI-Fensters im Vergleich zu einem Benchmark von 16, 67 ms pro Frame benötigt wird.

Bei weniger leistungsstarken GPUs kann die verfügbare Füllrate (die Geschwindigkeit, mit der die GPU den Framebuffer füllen kann) recht niedrig sein. Wenn die Anzahl der Pixel, die zum Zeichnen eines Frames erforderlich sind, zunimmt, kann es länger dauern, bis die GPU neue Befehle verarbeitet. Dadurch muss der Rest des Systems warten, bis die GPU nachkommt.

Mit dem Profiling-Tool können Sie ermitteln, wann die GPU überlastet ist, weil sie versucht, Pixel zu zeichnen, oder durch Overdraw belastet wird.

Profiler aktivieren

Bevor Sie beginnen, müssen Sie sicherstellen, dass Sie ein Gerät mit Android 4.1 (API‑Level 16) oder höher verwenden und die Entwickleroptionen aktivieren. So profilieren Sie das GPU-Rendering des Geräts während der Verwendung Ihrer App:

  1. Rufen Sie auf Ihrem Gerät die Einstellungen auf und tippen Sie auf Entwickleroptionen.
  2. Wählen Sie im Bereich Monitoring (Überwachung) je nach Android-Version auf dem Gerät Profile GPU Rendering (GPU-Rendering-Profil) oder Profile HWUI rendering (HWUI-Rendering-Profil) aus.
  3. Wählen Sie im Dialogfeld „Profile GPU Rendering“ (GPU-Rendering profilieren) die Option On screen as bars (Auf dem Bildschirm als Balken) aus, um die Grafiken auf dem Bildschirm Ihres Geräts zu überlagern.
  4. Öffnen Sie die App, die Sie profilieren möchten.

Ausgabe überprüfen

In der vergrößerten Abbildung des Diagramms „GPU-Rendering des Profils“ in Abbildung 1 sehen Sie den farbigen Bereich, wie er unter Android 6.0 (API-Level 23) angezeigt wird.

Abbildung 1. Vergrößerte Grafik für das Profil-GPU-Rendering.

Hier sind einige Dinge, die Sie bei der Ausgabe beachten sollten:

  • Für jede sichtbare Anwendung wird ein Diagramm angezeigt.
  • Jeder vertikale Balken entlang der horizontalen Achse steht für einen Frame. Die Höhe jedes vertikalen Balkens gibt die Zeit an, die zum Rendern des Frames benötigt wurde (in Millisekunden).
  • Die horizontale grüne Linie steht für 16,67 Millisekunden. Damit 60 Bilder pro Sekunde erreicht werden, muss der vertikale Balken für jedes Bild unter dieser Linie bleiben. Wenn ein Balken diese Linie überschreitet, kann es zu Pausen in den Animationen kommen.
  • Im Tool werden Frames, die den Grenzwert von 16,67 Millisekunden überschreiten, durch einen breiteren und weniger transparenten Balken hervorgehoben.
  • Jeder Balken hat farbige Komponenten, die einer Phase in der Rendering-Pipeline entsprechen. Die Anzahl der Komponenten variiert je nach API-Level des Geräts.

In der folgenden Tabelle werden die einzelnen Segmente eines vertikalen Balkens in der Profilerausgabe beschrieben, wenn Sie ein Gerät mit Android 6.0 oder höher verwenden.

Komponente des BalkensRendering-PhaseBeschreibung
Puffer tauschen Die Zeit, in der die CPU darauf wartet, dass die GPU ihre Arbeit beendet. Wenn dieser Balken lang ist, bedeutet das, dass die App zu viel Arbeit auf der GPU ausführt.
Befehlsproblem Gibt die Zeit an, die der 2D-Renderer von Android benötigt, um Befehle an OpenGL zu senden, um Anzeigelisten zu zeichnen und neu zu zeichnen. Die Höhe dieses Balkens ist direkt proportional zur Summe der Zeit, die für die Ausführung der einzelnen Anzeigelisten benötigt wird. Je mehr Anzeigelisten vorhanden sind, desto höher ist der rote Balken.
Synchronisieren und hochladen Gibt die Zeit an, die zum Hochladen von Bitmap-Informationen in die GPU benötigt wird. Ein großes Segment deutet darauf hin, dass die App viel Zeit benötigt, um große Mengen an Grafiken zu laden.
Zeichnen Stellt die Zeit dar, die zum Aufzeichnen von Zeichenbefehlen wie drawLine verwendet wird. In Compose kann diese Phase manchmal Mess- und Layoutvorgänge umfassen. Wenn dieser Balken hoch ist, erfassen Sie einen System-Trace und untersuchen Sie ihn mit Perfetto, um eine detaillierte Aufschlüsselung zu erhalten.
Messen / Layout Gibt die Zeit an, die für die Positionierung und Größenbestimmung von UI-Komponenten während der Layoutphase aufgewendet wurde. Dazu gehört auch die Ausführung von Mess- und Platzierungsmodifikatoren. Ein großes Segment deutet auf komplexe Berechnungen innerhalb dieser Modifizierer oder einen übermäßig tiefen Layoutbaum hin, der häufig neu berechnet werden muss.
Eingabebehandlung und Animation Stellt die Zeit dar, die für die Auswertung von Animation API-Aufrufen oder für die Verarbeitung von Zeigereingaben und deren Rückrufen benötigt wurde. Wenn dieses Segment groß ist, kann das darauf hindeuten, dass für die Verarbeitung einer benutzerdefinierten Animation oder eines Eingabe-Callbacks zu viel Zeit benötigt wird. Die Berechnung des Zustands und der Datenabgleich beim Scrollen durch ein LazyColumn oder LazyRow erfolgen in der Regel auch in diesem Segment und sind eine häufigere Ursache für Verlangsamungen in diesem Segment.
Verschiedenes – Zeit / VSync-Verzögerung Gibt die Zeit an, die die App für die Ausführung von Vorgängen zwischen zwei aufeinanderfolgenden Frames benötigt. Dies kann ein Hinweis darauf sein, dass im UI-Thread zu viele Verarbeitungsvorgänge stattfinden, die in einen anderen Thread ausgelagert werden könnten.

Tabelle 1. Komponentenleisten in Android 6.0 und höher

Weitere Informationen zum Interpretieren der Informationen, die vom Profiling-Tool bereitgestellt werden, finden Sie unter Analyse mit Profil-GPU-Rendering durchführen.