Anmerkungen, Parameter zur Grafikqualität und Einstellungen definieren

In diesem Dokument wird beschrieben, wie Sie Anmerkungen, Treueparameter und Einstellungen in Ihrem Projekt festlegen.

Anmerkungen und Parameter zur Grafikqualität

Anmerkungen enthalten Kontextinformationen dazu, was in Ihrem Spiel passiert, wenn ein Tick aufgezeichnet wird. Parameter zur Grafikqualität spiegeln die Leistungs- und Grafikeinstellungen Ihres Spiels wider. Sie definieren diese mithilfe von Protokollpuffern, dem sprachneutralen, strukturierten Datenaustauschformat von Google. Weitere Informationen zur Verwendung von Protokollzwischenspeichern in Ihrem Spiel finden Sie unter Protokollzwischenspeicher.

Die möglichen Anmerkungen und Treueparameter für Ihr Spiel sind in einer Datei namens dev_tuningfork.proto definiert, die sich im Verzeichnis assets/tuningfork Ihres Projekts befindet. Das folgende Beispiel stammt aus der Demo-App:

syntax = "proto3";

package com.google.tuningfork;

enum InstrumentKey {
  CPU = 0;
  GPU = 1;
  SWAPPY_WAIT = 2;
  SWAPPY_SWAP = 3;
  CHOREOGRAPHER = 4;
}

enum Level {
  // 0 is not a valid value
  LEVEL_INVALID = 0;
  LEVEL_1 = 1;
  LEVEL_2 = 2;
  LEVEL_3 = 3;
};

message Annotation {
  Level level = 1;
}

message FidelityParams {
  int32 num_spheres = 1;
  float tesselation_percent = 2;
}

Beachten Sie Folgendes:

  • Das Paket muss com.google.tuningfork sein.
  • Die Namen der Nachrichten müssen genau Annotation und FidelityParams lauten.
  • Sie können nur enums verwenden, die in dieser Datei als Teil von Anmerkungen definiert sind.
  • Sie können nur enums, int32s oder floats in FidelityParams-Feldern verwenden.
  • Das Validierungstool erzwingt die Einhaltung dieser Konventionen.

Einstellungen

Die Nachricht Settings wird durch tuningfork.proto definiert. Ein vollständiges Beispiel finden Sie in der folgenden Datei:

gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/tuningfork_settings.txt

Sie müssen die Einstellungen für Ihr Spiel in einer Datei namens tuningfork_settings.txt definieren, die sich im Verzeichnis assets/tuningfork Ihres Projekts befindet. Sie müssen nur die folgenden Felder angeben:

  • aggregation_strategy: Eine Nachricht mit Folgendem:

    • method: TIME_BASED, um alle n Millisekunden hochzuladen, oder TICK_BASED, um alle n Ticks hochzuladen.
    • intervalms_or_count: n für das Feld method.
    • max_instrumentation_keys: Anzahl der zu verwendenden Instrumentierungsschlüssel. Legen Sie 4 fest, wenn Sie die Android Frame Pacing-Bibliothek verwenden.
    • annotation_enum_size: Ein optionales Feld, da die Größe beim Start aus dem Deskriptor berechnet wird.
  • api_key: Der API-Schlüssel des Cloud-Projekts Ihrer App, der zum Validieren von Anfragen an den Endpunkt verwendet wird. Informationen zum Generieren dieses Schlüssels finden Sie unter API aktivieren. Wenn in logcat Verbindungsfehler angezeigt werden, prüfen Sie, ob der API-Schlüssel korrekt ist.

  • default_fidelity_parameters_filename: Der bei der Initialisierung verwendete Satz von Parametern zur Grafikqualität (optional, wenn Sie training_fidelity_params in Ihrem Code festlegen).

  • level_annotation_index: (Optional) Der Index der Ebenennummer in Ihren Anmerkungsfeldern.

Hier ist ein Beispiel für eine Textdarstellung:

aggregation_strategy: {method: TIME_BASED, intervalms_or_count: 10000,
  max_instrumentation_keys: 5, annotation_enum_size: [3,4]}
api_key: "API-KEY-FROM-GOOGLE-CLOUD-CONSOLE"
default_fidelity_parameters_filename: "dev_tuningfork_fidelityparams_3.bin"
level_annotation_index: 1

Anmerkungen festlegen

Du musst Annotationen während des Spiels manuell festlegen. Ein Beispiel dafür finden Sie in der Demo-App, in der alle Spielebenen automatisch durchlaufen werden. Weitere Informationen finden Sie unter der Funktion SetAnnotations() in der insightsdemo.cpp.

In diesem Fall wird in der Anmerkung nur die Nummer der Ebene angegeben.

message Annotation {
  Level level = 1;
}

Qualitätsstufen definieren

Verwenden Sie Qualitätsstufen, um Sitzungen zu annotieren. So können Sie feststellen, ob Geräte auf einer zu hohen (was zu einer geringeren Leistung führt) oder zu niedrigen Qualitätsstufe (was zu einer unnötig reduzierten Wiedergabetreue führt) ausgeführt werden.

Sie müssen mindestens eine und vorzugsweise mehrere Qualitätsstufen für Ihr Spiel definieren. Eine Qualitätsstufe entspricht einer Instanz Ihrer FidelityParams-Nachricht. Diese Ebenen müssen in aufsteigender Reihenfolge mit dem folgenden Dateinamenformat angegeben werden:

dev_tuningfork_fidelityparams_i.txt

Dabei ist i ein Index, der bei 1 beginnt und einen Maximalwert von 15 hat. Diese Dateien müssen sich im Verzeichnis assets/tuningfork Ihres Projekts befinden. Das Beispielprojekt enthält ein Beispiel für diese Struktur im Verzeichnis gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/.

Protokollpuffer

Die Tuning Fork-Bibliothek verwendet das Protokollpufferformat von Google für Einstellungen, Anmerkungen und Fidelitätsparameter. Es handelt sich um ein wohldefiniertes, mehrsprachiges Protokoll für erweiterbare, strukturierte Daten. Weitere Informationen finden Sie in der Protocol Buffers-Dokumentation.

Proto2 im Vergleich zu Proto3

Die Version des Protokollzwischenspeicherformats wird in der ersten Zeile der Datei festgelegt:

syntax="proto2";

Proto2 und Proto3 sind zwei häufig verwendete Versionen von Protocol Buffers. Beide verwenden dasselbe Wire-Format, aber die Definitionsdateien sind nicht kompatibel. Die wichtigsten Unterschiede zwischen den beiden Versionen sind:

  • Die Keywords optional und required sind in proto3 nicht mehr zulässig.
  • In Proto3 ist alles effektiv optional.
  • Erweiterungen werden in proto3 nicht unterstützt.

Verwenden Sie proto3 in Ihren Proto-Dateien, da diese in C# kompiliert werden können. Proto2 funktioniert auch mit dem eingeschränkten Funktionsumfang der Tuning Fork-Bibliothek.

Text- und Binärdarstellungen

Das binäre Protobuf-Wire-Format ist gut definiert und stabil über verschiedene Protobuf-Versionen hinweg (der generierte Code ist es nicht). Es gibt auch ein Textformat, das von der Vollversion der Protobuf-Bibliothek generiert und gelesen werden kann. Dieses Format ist nicht so gut definiert, aber für die begrenzte Anzahl von Funktionen in der Tuning Fork-Bibliothek stabil. Mit dem protoc-Compiler können Sie zwischen Binär- und Textformaten konvertieren. Mit dem folgenden Befehl wird ein Text-Protobuf in einen binären Protobuf konvertiert:

protoc --encode com.google.tuningfork.Settings tuningfork.proto < tuningfork_settings.txt > tuningfork_settings.bin

Sie müssen Binärdateien anstelle von Textdateien in Ihr APK aufnehmen, da die vollständige Protobuf-Bibliothek mehrere MB groß ist. Wenn die Tuning Fork-Bibliothek davon abhinge, würde die Größe Ihres Spiels um einen ähnlichen Betrag zunehmen.

Full, Lite und Nano im Vergleich

Neben der vollständigen Protobuf-Bibliothek gibt es eine Lite-Version, die den Code-Footprint reduziert, indem einige Funktionen wie Reflection, FileDescriptors und Streaming in und aus Textformaten entfernt werden. Für diese Version sind weiterhin mehrere MB zusätzlicher Code erforderlich. Daher wird in der Tuning Fork-Bibliothek intern die nanopb-Bibliothek verwendet. Der Quellcode für diese Bibliothek ist im Android Open Source Project unter external/nanopb-c enthalten und gehört zum Branch gamesdk. Verwenden Sie diese Bibliothek in Ihrem Spiel, wenn die Codegröße ein Problem darstellt.

In gamesdk/src/protobuf sind CMake-Dateien verfügbar, mit denen Sie alle drei Versionen von Protobuf einbinden können. In den Beispielen wird eine Mischung aus nanopb und vollständigem Protobuf verwendet.