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
undFidelityParams
lauten. - Sie können nur
enums
verwenden, die in dieser Datei als Teil von Anmerkungen definiert sind. - Sie können nur
enums
,int32s
oderfloats
inFidelityParams
-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, oderTICK_BASED
, um alle n Ticks hochzuladen.intervalms_or_count
: n für das Feldmethod
.max_instrumentation_keys
: Anzahl der zu verwendenden Instrumentierungsschlüssel. Legen Sie4
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 inlogcat
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 Sietraining_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
undrequired
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.