„Langsame Sitzungen“ ist ein neuer Android Vitals-Messwert in der Google Play Console. Eine langsame Sitzung ist eine Sitzung, bei der mehr als 25% der Frames langsam sind. Ein Frame ist langsam, wenn er nicht weniger als 50 ms nach dem vorherigen Frame präsentiert wird (entspricht 20 fps). In Android Vitals wird auch ein zweiter Messwert für langsame Sitzungen mit einem Ziel von 34 ms (entspricht 30 fps) erfasst. Mithilfe von Daten zu langsamen Sitzungen können Sie die Framerateleistung Ihres Spiels nachvollziehen, die sich darauf auswirkt, wie flüssig und ruckelfrei sich Ihr Spiel für Nutzer anfühlt.
Google Play wird früher oder später dazu übergehen, Nutzern Spiele nicht mehr zu empfehlen, die keine 20 fps auf ihren Smartphones erreichen. Hinweis: Android Vitals beginnt erst eine Minute nach dem Start Ihres Spiels, seine Framerate zu erfassen.
Weitere Informationen zu diesem Messwert finden Sie in der Hilfe.

FPS messen und langsame Frames erkennen
Der Android-Befehl dumpsys surfaceflinger timestats
liefert die durchschnittliche Framerate und ein Histogramm für die Präsentationszeit für alle Rendering-Ebenen. Die Present-to-Present-Zeit eines Frames ist das Intervall zwischen dem aktuellen Frame und dem zuvor gerenderten Frame. So erfassen Sie mit dem Befehl die FPS Ihres Spiels:
Führen Sie den Befehl mit den Flags
enable
undclear
aus, um mit der Erfassung von Informationen zu beginnen:adb shell dumpsys SurfaceFlinger --timestats -clear -enable
Wenn das Spiel lange genug gespielt wurde, führen Sie den Befehl noch einmal mit dem Flag
dump
aus, um Informationen zu dumpen:adb shell dumpsys SurfaceFlinger --timestats -dump
Die gedumpten Informationen enthalten die Gesamtzahl der Frames und das Histogramm „presentToPresent“ für alle Ebenen, die von SurfaceFlinger gerendert werden. Sie müssen den Abschnitt Ihres Spiels finden, indem Sie nach
layerName
filtern:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
Die niedrige Framerate der Sitzung kann anhand der Informationen jeder Ebene berechnet werden.
Beispiel: Prozentsatz der langsamen Frames bei 20 fps = (Summe der Werte von 54 ms bis 1.000 ms) ÷ Gesamtzahl der Frames × 100
totalFrames = 274 ... presentToPresent histogram is as below: 0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0 66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0 110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
Im Dump wird auch die durchschnittliche FPS der einzelnen Ebenen angezeigt:
... averageFPS = 30.179 ...
Nachdem Sie alle Informationen erfasst haben, sollten Sie die Zeitstatistiken mit dem Flag
disable
deaktivieren:adb shell dumpsys SurfaceFlinger --timestats -disable
Ursachen und Lösungen für langsame Frames
Es gibt viele Gründe, warum ein Frame auf dem Bildschirm länger angezeigt oder gerendert werden kann als das Ziel des Entwicklers. Das Spiel ist möglicherweise CPU-/GPU-gebunden. Möglicherweise überhitzt sich das Gerät und aktiviert einen gedrosselten thermischen Zustand. Möglicherweise stimmen die Framerate des Spiels und die Bildwiederholrate des Displays nicht überein.
Verwenden Sie Android Frame Pacing (Swappy), Vulkan und ADPF, um diese Probleme zu beheben und die Leistung Ihres Spiels zu verbessern.
Was ist Swappy?
Die Frame-Pacing-Bibliothek von Android, auch Swappy genannt, ist Teil der AGDK-Bibliotheken. Swappy ermöglicht es OpenGL- und Vulkan-Spielen, ein flüssiges Rendering und eine korrekte Framerate auf Android-Geräten zu erreichen.
Die Frame-Taktfrequenz ist die Synchronisierung der Logik und des Rendering-Loops eines Spiels mit dem Display-Subsystem eines Betriebssystems und der zugrunde liegenden Display-Hardware. Das Android-Display-Subsystem wurde entwickelt, um visuelle Artefakte (sogenanntes Tearing) zu vermeiden, die auftreten können, wenn die Displayhardware während eines Updates zu einem neuen Frame wechselt. Um diese Artefakte zu vermeiden, führt das Display-Subsystem Folgendes aus:
- Puffert vergangene Frames intern
- Erkennt verspätet eingereichte Frames
- Wiederholt die Anzeige vergangener Frames, wenn verspätete Frames erkannt werden
Hier erfahren Sie, wie Mir 2 mit Swappy die Rate langsamer Sitzungen von 40% auf 10%senken konnte.
Swappy in nativen Projekten verwenden
In den folgenden Leitfäden erfahren Sie, wie Sie die Android Frame Pacing-Bibliothek in Ihr Spiel einbinden:
- Android-Frame-Pacing in Ihren OpenGL-Renderer einbinden
- Android-Frame-Pacing in Ihren Vulkan-Renderer einbinden
Swappy in der Unity-Game Engine verwenden
Unity hat Android Frame Pacing in seine Engine integriert. Wenn Sie diese Funktion in Unity 2019.2 oder höher aktivieren möchten, setzen Sie unter Projekteinstellungen > Player > Einstellungen für Android > Auflösung und Darstellung ein Häkchen in das Kästchen „Optimiertes Frame-Pacing“:

Alternativ können Sie die Option Optimiertes Frame-Pacing programmatisch in Ihrem Logikcode aktivieren, damit Unity Frames gleichmäßig verteilt und so für weniger Schwankungen bei der Framerate und ein flüssigeres Gameplay sorgt.
Swappy in der Unreal-Game-Engine verwenden
In Unreal 4.25 und höher ist die Android Frame Pacing Library integriert, die Teil des Android Game Development Kits ist. Im Artikel Frame-Pacing für Mobilgeräte wird beschrieben, wie du die Android Frame Pacing Library aktivierst und das Frame-Pacing über C++-Code steuerst.
Was ist Vulkan?
Vulkan ist eine moderne plattformübergreifende 3D-Grafik-API, die die Abstraktion zwischen der Grafikhardware des Geräts und Ihrem Spiel minimiert. Vulkan ist die primäre Low-Level-Grafik-API auf Android und ersetzt OpenGL ES. OpenGL ES wird weiterhin auf Android unterstützt, die Entwicklung von Funktionen ist jedoch eingestellt.
Vulkan bietet gegenüber OpenGL ES folgende Vorteile:
- Eine effizientere Architektur mit geringerem CPU-Overhead im Grafiktreiber
- Neue Optimierungsstrategien zur Verbesserung der CPU-Leistung
- Neue Grafikfunktionen, die in OpenGL ES nicht verfügbar sind, z. B. bindless APIs und Raytracing
Vulkan in nativen Android-Projekten verwenden
Im Codelab Einstieg in Vulkan auf Android erfahren Sie, wie Sie Ihre Vulkan-Rendering-Pipeline einrichten und dann ein texturiertes, rotierendes Dreieck auf dem Bildschirm rendern. In diesem Codelab erfahren Sie, wie Sie Ihre Spielgrafiken rendern.
Vulkan in der Unity-Spielengine verwenden
Wenn Sie die automatische Geräteauswahl in Unity aktivieren möchten, folgen Sie der Anleitung zum Konfigurieren der Auto Graphics API.

Alternativ können Sie Vulkan manuell aktivieren, indem Sie die Auto Graphics API deaktivieren und Vulkan in der Liste der Graphics APIs die höchste Priorität zuweisen. Wenn Sie Unity 2021.1 oder eine frühere Version verwenden, ist dies die einzige Möglichkeit, Vulkan zu verwenden.

Mit dem VkQuality Unity-Engine-Plug-in können Sie Empfehlungen für die Grafik-API für Ihr Spiel bei der Markteinführung für bestimmte Geräte bereitstellen.
Vulkan in der Unreal-Game-Engine verwenden
Wenn Sie die Vulkan-Grafik-API aktivieren möchten, gehen Sie zu Projekteinstellungen > Plattformen > Android > Build und wählen Sie Vulkan unterstützen aus. Wenn Sie sowohl Vulkan unterstützen als auch OpenGL ES 3.2 unterstützen auswählen, verwendet Unreal standardmäßig Vulkan. Wenn das Gerät Vulkan nicht unterstützt, wechselt Unreal zu OpenGL ES 3.2.

Wenn Sie bestimmte Vulkan-Funktionen verwenden, die auf bestimmten Geräten bekanntlich zu Problemen führen, können Sie Ihre BaseDeviceProfile.ini
-Datei so anpassen, dass diese Geräte ausgeschlossen werden. Weitere Informationen zum Anpassen von BaseDeviceProfile.ini
finden Sie unter Geräteprofile und Skalierbarkeit für Android anpassen. Da neue Gerätetreiber möglicherweise Probleme mit zuvor als fehlerhaft erkannten Geräten beheben, sollten Sie die Datei BaseDeviceProfile.ini auf dem neuesten Stand halten, um alle Optimierungen zu erhalten.
Was ist ADPF?
Das Android Dynamic Performance Framework (ADPF) optimiert Spiele anhand der dynamischen Funktionen zur Temperatur-, CPU- und GPU-Verwaltung unter Android. Der Schwerpunkt liegt auf Spielen, aber Sie können die Funktionen auch für andere leistungsintensive Apps verwenden.
ADPF ist eine Reihe von APIs, mit denen Spiele und leistungsintensive Apps direkter mit den Energie- und Temperatursystemen von Android-Geräten interagieren können. Mit diesen APIs können Sie das dynamische Verhalten auf Android-Systemen im Blick behalten und die Spieleleistung auf einem nachhaltigen Niveau optimieren, das Geräte nicht überhitzt.
Die wichtigsten Funktionen der ADPF:
- Thermo API: Überwacht den thermischen Zustand eines Geräts, damit die Anwendung die Arbeitslast proaktiv anpassen kann, bevor sie nicht mehr tragbar ist.
- CPU Performance Hint API: Bietet Leistungshinweise, mit denen Android die richtigen Leistungseinstellungen (z. B. CPU-Betriebspunkt oder -Kern) für die Arbeitslast auswählen kann.
- Game Mode API und Game State API: Sie können die Optimierung des Gameplays aktivieren, indem Sie die Leistung oder Akkulaufzeit basierend auf den Einstellungen des Nutzers und den spielspezifischen Konfigurationen priorisieren.
- Modus mit fester Leistung: Aktivieren Sie den Modus mit fester Leistung auf einem Gerät während des Benchmarkings, um Messungen zu erhalten, die nicht durch die dynamische CPU-Taktfrequenz verändert werden.
- Energiesparmodus: Hiermit wird der Sitzung mitgeteilt, dass die Threads in der Sitzung mit Leistungshinweis sicher so geplant werden können, dass die Energieeffizienz gegenüber der Leistung bevorzugt wird. Verfügbar in Android 15 (API-Level 35).
ADPF in nativen Android-Projekten verwenden
Im Codelab Adaptive Play Features in Ihr natives Spiel einbinden erfahren Sie, wie Sie ADPF-Funktionen in Ihr Spiel einbinden. Die Schritte können Sie in Ihrem eigenen Tempo durchgehen. Am Ende des Codelabs haben Sie die folgenden Funktionen integriert:
- Thermal API: Überwacht die thermische Belastung des Geräts und reagiert, bevor es zu einer thermischen Drosselung kommt.
- Game Mode API: Sie können die Optimierungseinstellungen der Spieler (Leistung maximieren oder Akku schonen) ermitteln und entsprechend anpassen.
- Game State API: Hiermit können Sie dem System den Status Ihres Spiels mitteilen (Laden, Spielen, Benutzeroberfläche usw.). Das System kann dann die Ressourcen entsprechend anpassen (I/O, CPU, GPU usw.).
- Leistungshinweis-API: Hiermit können Sie dem System Ihr Threadmodell und Ihre Arbeitslast mitteilen, damit es die Ressourcen entsprechend zuweisen kann.
ADPF in der Unity-Game Engine verwenden
Die adaptive Leistung von Unity ist ein Tool für Spieleentwickler, die ihre Spiele auf Mobilgeräten optimieren möchten, insbesondere für das vielfältige Android-Ökosystem. Mit der adaptiven Leistung kann sich Ihr Spiel in Echtzeit an die Leistung und die thermischen Eigenschaften des Geräts anpassen und so für ein reibungsloses und effizientes Spielerlebnis sorgen.
In der Anleitung für den Anbieter für adaptive Leistung unter Android erfahren Sie, wie Sie ADPF in Unity implementieren.

ADPF in der Unreal-Game-Engine verwenden

- Plug-in herunterladen
- Kopieren Sie das Plug-in in den Plug-in-Ordner des Projekts.
- ADPF Unreal Engine-Plug-in im Unreal-Editor aktivieren
- Unreal-Editor neu starten
- Spiel erstellen und kompilieren
Das Android Dynamic Performance Framework(ADPF)-Plug-in für die Unreal Engine sorgt für eine stabile Leistung und verhindert eine thermische Drosselung. Laden Sie das Plug-in von GitHub herunter. Dieses Plug-in ändert Funktionen, indem Unreal-Konsolenwerte festgelegt werden.