Android Performance Tuner (nativ)

In diesem Thema wird beschrieben, wie Sie den Android Performance Tuner, auch bekannt als Tuning Fork-Bibliothek, integrieren, um Frametime-Daten aus nativen (C- und C++) Game-Engines aufzuzeichnen und hochzuladen.

Informationen zur Unity-Spiel-Engine finden Sie im Leitfaden für Unity.

Hintergrund

Ein wichtiger Bestandteil des Spielerlebnisses ist die Rendering-Leistung. Die Rendering-Leistung ist das Ergebnis der folgenden beiden Eingaben:

  • Framerate: Wie oft ein Frame gezeichnet wird.
  • Einstellungen für die Grafikqualität: Detaillierungsgrad, mit dem ein Frame dargestellt wird, einschließlich der Simulationsqualität und der Grafiken.

Für Spiele wird eine gute Rendering-Leistung so definiert:

  • Eine stabile, konsistente Framerate (d. h. der Prozentsatz der Frames, die mit der gewünschten Häufigkeit gerendert werden).
  • Rendern von Frames mit der höchstmöglichen Frequenz bei gleichzeitiger Aufrechterhaltung der Stabilität, in der Regel 30 oder 60 FPS, je nach Art des Spiels.
  • Maximierung des Detaillierungsgrads für einen Nutzer in Abhängigkeit von Bildschirmgröße und ‑dichte bei gleichzeitiger Beibehaltung einer gewünschten, stabilen Framerate.

Die Android Frame Pacing-Bibliothek begrenzt einen Großteil der Schwankungen bei den Frame-Zeiten und sorgt so für eine stabile Frame-Rate bei Spielen. Die verbleibende Variation der Frame-Zeiten ist auf den Detaillierungsgrad zurückzuführen, der während bestimmter Szenen im Spiel angezeigt wird, sowie auf die Grafikleistung des Geräts. Mit dem Android Performance Tuner können Sie Zeiträume während des Gameplays ermitteln, in denen die Frame Time langsamer oder schneller als Ihr Ziel ist, und diese Probleme und Optimierungsmöglichkeiten mit Folgendem in Verbindung bringen:

  • Spezifische Qualitätseinstellungen
  • Bestimmte Szenen in Ihrem Spiel
  • Bestimmte Gerätemodelle oder Gerätespezifikationen

Daten aufzeichnen und hochladen

Die Tuning Fork-Bibliothek ist darauf angewiesen, dass eine ihrer Tick-Funktionen in jedem Frame von der Android Frame Pacing-Bibliothek aufgerufen wird. In der Bibliothek werden diese Informationen in Histogramme zusammengefasst, die dann regelmäßig über einen HTTP-Endpunkt zu Google Play hochgeladen werden. Jeder Tick wird mit einem Instrumentenschlüssel und einer Annotation verknüpft. Die Definitionen dafür geben Sie in einer Protokollpufferdatei an.

Instrumentenschlüssel

Ein Instrumentschlüssel gibt an, woher der Tick im Frame stammt. Er ist eine Ganzzahl, die an jeden Tick-Funktionsaufruf übergeben werden muss. Die Android Frame Pacing-Bibliothek verwendet einen vordefinierten Satz von Instrumentierungsschlüsseln, die in swappy_common.h definiert sind. Sie können auch eigene Instrumentschlüssel definieren, wenn Sie die Frame Pacing-Bibliothek nicht verwenden.

Anmerkungen

Anmerkungen enthalten Kontextinformationen dazu, was in Ihrem Spiel passiert, wenn ein Tick aufgezeichnet wird. Eine Anmerkung kann beispielsweise Folgendes identifizieren:

  • Das aktuelle Spiellevel
  • Auf dem Bildschirm ist ein „Big Boss“ zu sehen.
  • Alle anderen relevanten Informationen zum Spielstatus

Anmerkungen werden durch die com.google.tuningfork.Annotation-Protokollpuffer-Nachricht definiert. Um die aktuelle Annotation festzulegen, übergeben Sie eine Serialisierung der von Ihnen definierten Nachricht an TuningFork_setCurrentAnnotation(). Alle nachfolgenden Tick-Daten werden dann dieser Anmerkung zugeordnet, bis eine andere Anmerkung festgelegt wird. Hier sehen Sie ein Beispiel für eine Proto-Definition für Anmerkungen:

import "tuningfork.proto"
enum Level {
  INVALID_LEVEL = 0;
  Level_1 = 1;
  Level_2 = 2;
  Level_3 = 3;
}
message Annotation {
  optional Level level = 1;
}

Parameter zur Grafikqualität

Die Parameter zur Grafikqualität beeinflussen die Leistung und die Grafikqualität Ihres Spiels, z. B. den Detaillierungsgrad des Gitters, die Texturauflösung und die Antialiasing-Methode. Wie Anmerkungen werden auch Treueparameter mit der Protokollpuffernachricht com.google.tuningfork.FidelityParams definiert. Im Folgenden sehen Sie ein Beispiel für eine Proto-Definition für Parameter zur Grafikqualität:

import "tuningfork.proto"
message FidelityParams {
  int32 texture_quality_level = 1;
  int32 shadow_resolution = 2;
  float terrain_details_percent = 3;
  int32 post_processing_effects_level = 4;
}

Bei der Initialisierung von Tuning Fork übergeben Sie eine Serialisierung der Parameter, die das Spiel verwendet. Sie können diese Parameter ändern, wenn der Nutzer beispielsweise die Einstellungen für das Rendern des Spiels ändert und die nachfolgend hochgeladenen Daten mit den neuen Parametern verknüpft werden.

Damit Google Play die von Ihnen definierten Anmerkungen und Treueparameter verstehen kann, muss die Protokollpufferdatei mit diesen Definitionen zusammen mit den Initialisierungseinstellungen im APK des Spiels enthalten sein. Sie müssen auch Standardwerte für gängige Kombinationen von Treueparametern in Ihrem APK angeben, damit Ihre Daten in der Google Play-Benutzeroberfläche nach diesen segmentiert werden. Weitere Informationen finden Sie unter Qualitätsstufen definieren.

Arbeitsspeicher- und CPU-Overhead

Der gesamte von der Tuning Fork-Bibliothek verwendete Arbeitsspeicher wird bei der Initialisierung zugewiesen, um Überraschungen während des Spiels zu vermeiden. Die Größe der Daten hängt von der Anzahl der Instrumentschlüssel, der Anzahl der möglichen Anmerkungen und der Anzahl der Buckets in jedem Histogramm ab. Sie ist ein Vielfaches dieser Werte, multipliziert mit vier Byte pro Bucket. Außerdem gibt es zwei Kopien aller Histogramme, damit sie im Double-Buffer-Verfahren übermittelt werden können.

Die Übermittlung erfolgt in einem separaten Thread und blockiert keine Tick-Aufrufe. Wenn keine Upload-Verbindung verfügbar ist, wird die Einreichung für den späteren Upload in die Warteschlange gestellt.

Der Aufruf einer Tick-Funktion verursacht nur geringen Verarbeitungsaufwand: Es wird lediglich ein Index in das Array der Histogramm-Buckets berechnet und ein ganzzahliger Zähler inkrementiert.

Tuning Fork-Bibliothek einbinden

Diese Anleitung zur Integration ist in zwei Teile unterteilt. Im ersten Teil wird beschrieben, wie Sie einen End-to-End-Test mit einer Demo-App und der Google Play Console ausführen. Im zweiten Teil wird beschrieben, wie Sie die Tuning Fork-Bibliothek in Ihre Toolchain einbinden und die von der Bibliothek bereitgestellten Funktionen verwenden. Klicken Sie unten auf den Link Weiter, um zu beginnen.