Langsame Sitzungen

„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 sie nicht weniger als 50 ms nach dem vorherigen Frame angezeigt wird. (entspricht 20 fps). Android Vitals meldet außerdem eine zweite mit einem Zielwert von 34 ms (entspricht 30 fps) Bei langsamen Sitzungen die Framerate-Leistung deines Spiels verstehen kann, was sich auf reibungslos und flüssig wirkt.

Im Laufe der Zeit wird Google Play Nutzer von Spielen abbringen, die keine 20 fps auf ihren Smartphones erreichen. Android Vitals beginnt erst mit der Überwachung nachdem dein Spiel eine Minute gelaufen ist.

Weitere Informationen findest du in der YouTube-Hilfe. über den Messwert.

<ph type="x-smartling-placeholder">
</ph> Kreisdiagrammenähnliche Grafiken, die die Anzahl der langsamen und nicht langsamen Frames zeigen.
Abbildung 1: Eine langsame Sitzung in Android Vitals.

fps messen und langsame Frames erkennen

Mit dem Android-Befehl dumpsys surfaceflinger timestats erhalten Sie durchschnittliche fps und präsent, um Timing-Histogramm für alle Ebenen anzuzeigen, die gerade gerendert. Der Zeitraum heute eines Frames ist das Intervall zwischen den aktuellen und den vorherigen Frame, die gerade gezeichnet werden. Hier sind mit dem Befehl zum Erfassen des fps Ihres Spiels Schritt für Schritt:

  1. Führen Sie den Befehl mit den Flags enable und clear aus, um die Aufzeichnung zu starten Informationen:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. Wenn das Spiel lange genug gespielt wurde, führen Sie den Befehl noch einmal mit Flag dump, um Informationen auszugeben:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    Die Dump-Informationen enthalten die Summe der Frames und das „PresentToPresent“-Histogramm für alle von SurfaceFlinger gerenderten Ebenen. Sie müssen Bereich Ihres Spiels durch Filtern nach layerName:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    Die langsame Frame-Rate der Sitzung könnte anhand der Informationen auf jeder Ebene.

    Beispiel: 20 fps für langsame Frames = (Summe der Werte von 54 ms bis 1.000 ms) ÷ totalFrames x 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 jeder Ebene angezeigt:

    ...
    averageFPS = 30.179
    ...
    
  3. Nachdem Sie alle Informationen erfasst haben, sollten Sie die Timestats mithilfe des Flags disable fest:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

Gründe für langsame Frames und Lösungen

Es gibt viele Gründe, warum ein Frame auf dem Bildschirm länger angezeigt oder gerendert werden kann. als das Ziel des Entwicklers ist. Das Spiel könnte CPU/GPU-gebunden sein. Oder Das Gerät überhitzt und aktiviert einen gedrosselten Temperaturzustand. Oder die Framerate des Spiels und das Display des Geräts stimmen nicht überein. Aktualisierungsrate.

Verwenden Sie Android Frame Pacing (Swappy). Vulkan und ADPF, um die Probleme zu beheben und die Leistung Ihres Spiels zu verbessern.

Was ist Swappy?

Die Android Frame Pacing-Bibliothek, auch Swappy genannt, ist Teil der AGDK-Bibliotheken. Swappy unterstützt OpenGL- und Vulkan-Spiele reibungsloses Rendering und richtiges Frame-Taktung auf Android-Geräten.

Die Frame-Taktung ist die Synchronisierung der Logik und Rendering-Schleife eines Spiels mit das Anzeigesubsystem eines Betriebssystems und die zugrunde liegende Anzeigehardware. Das Android- Das Display-Subsystem wurde entwickelt, um visuelle Artefakte zu vermeiden (sogenannte Risse). kann auftreten, wenn die Displayhardware auf halber Strecke zu einem neuen Frame wechselt. durch ein Update. Um diese Artefakte zu vermeiden, Folgendes:

  • Führt Frames intern zwischen
  • Erkennt späte Frame-Einreichungen
  • Wiederholt die Anzeige vergangener Frames, wenn späte Frames erkannt werden

Swappy in nativen Projekten verwenden

In den folgenden Leitfäden erfahren Sie, wie Sie die Android Frame Pacing-Bibliothek einbinden. in dein Spiel einbauen:

Swappy in der Unity-Spiel-Engine verwenden

Unity hat Android Frame Pacing in seine Engine integriert. Um diese Funktion zu aktivieren in Unity 2019.2 aktivieren Sie unter Projekteinstellungen > Player > Einstellungen für Android > Auflösung und Präsentation:

<ph type="x-smartling-placeholder">
</ph> Dialogfeld „Projekteinstellungen“.
Abbildung 2: Frame-Pacing in Unity Engine aktivieren

Alternativ können Sie die Option für optimierte Frame-Pacing in Ihrem Logikcode programmatisch aktivieren, damit Unity gleichmäßig verteilt Frames werden so verteilt, dass sich die Framerate weniger stark verändert, was für ein flüssigeres Gameplay sorgt.

So verwendest du Swappy in der Unreal-Spiel-Engine

In Unreal 4.25 und höher ist die Android Frame Pacing Library integriert, die Teil der Android-Entwicklungskit für Spiele. Im Artikel Mobile Frame Pacing wird erläutert, wie Sie die Android-Einstellung Frame Pacing Library und wie die Frametaktung über C++ Code gesteuert werden kann.

Was ist Vulkan

Vulkan ist ein modernes, plattformübergreifendes 3D- Grafik-API zur Minimierung der Abstraktion zwischen der Grafikhardware des Geräts und Ihr Spiel zu finden. Vulkan ist die primäre Low-Level-Grafik-API unter Android. ersetzt OpenGL ES. OpenGL ES wird unter Android noch unterstützt, ist aber nicht mehr als aktive Funktion verfügbar Entwicklung.

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 Strahlenverfolgung

Vulkan in nativen Android-Projekten verwenden

Im Codelab zu Erste Schritte mit Vulkan auf Android erfährst du, wie du deiner Vulkan-Rendering-Pipeline ein und renderst dann ein texturiertes, rotierendes Dreieck auf dem Bildschirm. Im Codelab erfährst du, wie du die Grafik deines Spiels renderst.

Vulkan in der Unity-Spiel-Engine verwenden

Wenn Sie die automatische Geräteauswahl auf Unity aktivieren möchten, folgen Sie den Schritten zur Konfiguration Auto Graphics API.

<ph type="x-smartling-placeholder">
</ph> Dialogfeld „Projekteinstellungen“.
Abbildung 3: Unity Auto Graphics API aktivieren

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

<ph type="x-smartling-placeholder">
</ph> Dialogfeld „Projekteinstellungen“.
Abbildung 4: Wähle Vulkan in Unity manuell als Hauptgrafik-API aus.

Das VkQuality Unity-Engine-Plug-in verwenden um Empfehlungen zum Startzeitpunkt der Grafik-API für dein Spiel bereitzustellen auf bestimmten Geräten.

Vulkan in der Unreal-Spiel-Engine verwenden

Gehe zu Projekteinstellungen > Vulkan Graphics API, um die Vulkan Graphics API zu aktivieren. Plattformen > Android > Erstellen und wählen Sie Vulkan unterstützen aus. Wenn Sie sowohl Support als auch Vulkan und Unterstützung von OpenGL ES3.2, Unreal verwendet standardmäßig Vulkan. Wenn das Gerät Vulkan nicht unterstützt, greift Unreal auf OpenGL ES 3.2 zurück.

<ph type="x-smartling-placeholder">
</ph> Dialogfeld „Projekteinstellungen“.
Abbildung 5: Vulkan in Unreal Engine aktivieren.

Wenn du bestimmte Vulkan-Elemente verwendest, die sich auf bestimmte Geräte können Sie die BaseDeviceProfile.ini-Datei so anpassen, dass sie für diese Geräte. Weitere Informationen finden Sie unter Geräteprofile und Skalierbarkeit anpassen für Android, um zu erfahren, wie Sie BaseDeviceProfile.ini anpassen. Da neue Gerätetreiber möglicherweise als schädliche Geräte erkannt werden, aktualisieren Sie die Datei BaseDeviceProfile.ini, um alle die Optimierungen.

Was ist ADPF?

Das Android Dynamic Performance Framework (ADPF) optimiert Spiele basierend auf dynamischen Thermo-, CPU- und GPU-Verwaltungsfunktionen für Android. Der Schwerpunkt liegt auf Spielen, aber du kannst die Funktionen auch für andere Apps mit hohem Leistungsbedarf.

ADPF umfasst eine Reihe von APIs, mit denen Spiele und leistungsintensive Apps direkter mit Strom- und Wärmesystemen von Android-Geräten interagieren. Mit können Sie das dynamische Verhalten von Android-Systemen Die Spieleleistung wird nachhaltig optimiert, ohne die Geräte zu überhitzen.

Dies sind die wichtigsten ADPF-Funktionen:

  • Thermal API: Überwachen Sie den Überhitzungszustand eines Geräts, damit die Anwendung die Arbeitslast proaktiv anpassen kann, bevor sie unhaltbar wird.
  • CPU Performance Hint API: Geben Sie Leistungshinweise, damit Android die richtigen Leistungseinstellungen für die Arbeitslast auswählen kann (z. B. CPU-Betriebspunkt oder Kern).
  • Game Mode API und Game State API: Ermöglichen Sie die Spieloptimierung, indem Sie je nach Nutzereinstellungen und spielspezifischen Konfigurationen die Leistung oder Akkulaufzeit priorisieren.
  • Modus mit fester Leistung: Aktivieren Sie auf einem Gerät während des Benchmarkings den Modus mit fester Leistung, um Messungen zu erhalten, die durch dynamisches CPU-Takting nicht verändert werden.
  • Energiesparmodus: Teilt der Sitzung mit, dass die Threads in der Leistungs-Hinweissitzung sicher geplant werden können, um Energieeffizienz gegenüber Leistung zu bevorzugen. Verfügbar in Android 15 (API-Version 35).

ADPF in nativen Android-Projekten verwenden

Im Codelab zum Integrieren von Anpassungsfähigkeitsfunktionen in Ihr natives Spiel erfahren Sie, wie Sie ADPF-Funktionen in Ihr mit Schritten, die du in deinem eigenen Tempo befolgen kannst. Am Ende des Codelab haben Sie die folgenden Funktionen integriert:

  • Thermal API: Hören Sie auf den Wärmezustand des Geräts und reagieren Sie, bevor das Gerät in den thermischen Drosselungszustand übergeht.
  • Game Mode API: Verstehen Sie die Optimierungseinstellungen der Spieler (Leistung maximieren oder Akku schonen), und nehmen Sie entsprechende Anpassungen vor.
  • Game State API: Teilen Sie dem System den Status Ihres Spiels (z. B. Laden, Spielen oder UI) mit, damit das System die Ressourcen entsprechend anpassen kann (Boost-E/A, CPU, GPU usw.).
  • Performance Hint API: Teilen Sie dem System Ihr Threading-Modell und Ihre Arbeitslast mit, damit das System die Ressourcen entsprechend zuweisen kann.

ADPF in der Unity-Spiel-Engine verwenden

Unity's Adaptive Performance ist ein ein Tool für Spieleentwickler, das ihre Spiele für Mobilgeräte optimieren möchte, insbesondere für das vielfältige Android-Ökosystem. Die Funktion „Adaptive Performance“ ermöglicht an die Leistung und die Temperatur des Geräts anpassen, und sorgt so für ein reibungsloses und effizientes Spielerlebnis.

Adaptive Performance Android-Anbieter führt Sie durch die Schritte zur Implementierung des ADPF in Unity.

<ph type="x-smartling-placeholder">
</ph> Dialogfeld „Projekteinstellungen“.
Abbildung 6: Binden Sie ADPF in die Unity Engine ein.

ADPF in der Unreal-Game-Engine verwenden

<ph type="x-smartling-placeholder">
</ph> Dialogfeld „Projekteinstellungen“.
Abbildung 7: Integrieren Sie ADPF in die Unreal Engine.
  1. Laden Sie das Plug-in herunter.
  2. Plug-in in den Plug-in-Ordner des Projekts kopieren
  3. ADPF Unreal Engine-Plug-in im Unreal-Editor aktivieren
  4. Unreal-Editor neu starten
  5. Spiel erstellen und kochen

Das Plug-in Android Dynamic Performance Framework(ADPF) für die Unreal Engine bietet und verhindert thermische Drosselung. Plug-in herunterladen von GitHub. Dieses Plug-in ändert Funktionen durch Einstellung Unrealistische Konsolenwerte: