W tym dokumencie opisujemy sposób konfigurowania adnotacji, parametrów wierności i ustawienia w projekcie.
Adnotacje i parametry wierności
Adnotacje dostarczają kontekstowych informacji o tym, co robi gra, gdy znacznik czasu jest rejestrowany. Parametry wierności odzwierciedlają wydajność i grafiki ustawieniach gry. Definiujesz je za pomocą buforów protokołów, które są To neutralny językowo uporządkowany format z wymianą danych. Więcej informacje na temat korzystania z buforów protokołów w grze, zobacz Informacje o buforach protokołów
Możliwe adnotacje i parametry wierności gry są zdefiniowane w sekcji
plik o nazwie dev_tuningfork.proto
, który znajduje się w folderze assets/tuningfork
w katalogu projektu. Oto przykład z aplikacji w wersji demonstracyjnej:
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;
}
Uwaga:
- Przesyłka musi mieć rozmiar
com.google.tuningfork
. - Nazwy wiadomości muszą zawierać dokładnie
Annotation
iFidelityParams
. - W ramach adnotacji możesz używać tylko właściwości
enums
zdefiniowanej w tym pliku. - W polach
FidelityParams
możesz użyć tylko wartościenums
,int32s
lubfloats
. - narzędzie do weryfikacji i egzekwuje te konwencje.
Ustawienia
Komunikat Settings
jest zdefiniowany przez tuningfork.proto
. Pełny przykład znajdziesz w
ten plik:
gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/tuningfork_settings.txt
Musisz określić ustawienia gry w pliku o nazwie
tuningfork_settings.txt
znajduje się w katalogu assets/tuningfork
w projektach AI. Musisz określić tylko te pola:
aggregation_strategy
: wiadomość zawierająca:method
:TIME_BASED
do przesyłania co n milisekund lubTICK_BASED
przesyłać co n znaczniki.intervalms_or_count
: n w polumethod
.max_instrumentation_keys
: liczba kluczy instrumentacji do użycia. Ustaw na4
, jeśli używana jest biblioteka Android Frame Pacing.annotation_enum_size
: pole opcjonalne, które powoduje obliczanie rozmiaru przy uruchamianiu z deskryptora.
api_key
: klucz interfejsu API projektu Cloud używany w Twojej aplikacji używany do weryfikowania żądań wysyłanych do: i punktu końcowego. Aby wygenerować ten klucz, zapoznaj się z artykułem włączyć interfejs API. Jeśli widzisz błędy połączenia wlogcat
, sprawdź, czy klucz interfejsu API jest prawidłowy.default_fidelity_parameters_filename
: zestaw parametrów wierności używany w (opcjonalnie, jeśli ustawisztraining_fidelity_params
. w kodzie).level_annotation_index
: (opcjonalnie) indeks w polach adnotacji numer poziomu.
Oto przykładowa reprezentacja tekstu:
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
Ustawianie adnotacji
W trakcie gry musisz ręcznie ustawiać adnotacje. Możesz zobaczyć różne
Przykład takiego kodu w aplikacji demonstracyjnej, ponieważ przechodzi on przez wszystkie poziomy gry
automatycznie. Aby uzyskać więcej informacji, zapoznaj się z funkcją SetAnnotations()
w artykule
insightsdemo.cpp
W tym przypadku adnotacja określa tylko numer poziomu.
message Annotation {
Level level = 1;
}
Określanie poziomów jakości
Używaj poziomów jakości do dodawania adnotacji do sesji i sprawdzania, czy urządzenia działa na zbyt wysokim poziomie jakości (co skutkuje niższą wydajnością) lub za niska (co spowoduje niepotrzebnie zmniejszenie jakości).
Musisz zdefiniować co najmniej jeden, a najlepiej kilka, poziom jakości dla swojej kampanii
tę grę. Poziom jakości odpowiada instancji FidelityParams
. Poziomy należy podawać w kolejności coraz większej.
w tym formacie nazwy pliku:
dev_tuningfork_fidelityparams_i.txt
gdzie i
jest indeksem zaczynającym się od 1 i maksymalną wartością
z 15. Pliki muszą się znajdować w katalogu assets/tuningfork
instancji
w projektach AI. W przykładowym projekcie widać przykładową strukturę w pliku
gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/
katalogu.
Bufory protokołów
Biblioteka Tuning Fork korzysta z formatu bufora protokołu Google do ustawienia, adnotacje i parametry wierności. Jest to jasno określony, wielojęzycznego protokołu do wszechstronnych, uporządkowanych danych. Aby dowiedzieć się więcej, zobacz Dokumentacja buforów protokołów.
Proto2 a proto3
Wersja formatu bufora protokołu jest określona w pierwszym wierszu pliku:
syntax="proto2";
Proto2 i proto3 to 2 najczęściej używane wersje buforów protokołu. Obie możliwości używają tego samego formatu przewodu, ale pliki definicji nie są zgodne. Klucz różnice między tymi wersjami są następujące:
- Słowa kluczowe
optional
irequired
nie są już dozwolone w proto3. - W proto3 wszystko jest w praktyce
optional
. - Rozszerzenia nie są obsługiwane w proto3.
Używaj w plikach proto3 protokołu proto3, ponieważ można je skompilować do języka C#. Proto2 działa a także ograniczony zestaw funkcji używany w bibliotece Tuning Fork.
Reprezentacje tekstowe a reprezentacje binarne
Binarny format przewodów protokołu protobuf jest dobrze zdefiniowany i stabilny w różnych
wersji protokołu (generowany kod nie.). Istnieje też format tekstowy,
pełna wersja biblioteki protokołu protobuf może być wygenerowana i odczytywana. Ten format jest
nie jest zbyt dobrze zdefiniowany, ale stabilny w przypadku ograniczonego zestawu funkcji
Biblioteka Tuning Fork. Możesz konwertować formaty binarne i tekstowe
za pomocą kompilatora protoc
. Poniższe polecenie konwertuje protobuf tekstowy na
plik binarny:
protoc --encode com.google.tuningfork.Settings tuningfork.proto < tuningfork_settings.txt > tuningfork_settings.bin
W pakiecie APK musisz umieścić pliki binarne, a nie tekstowe, ponieważ pełna biblioteka protobuf ma rozmiar kilka MB; jak powstał Tuning Fork zwiększy rozmiar gry o podobny rozmiar.
Pełne albo Lite kontra Nano
Oprócz pełnej biblioteki protobuf istnieje wersja Lite, która zmniejsza ilość kodu
zarysuj go przez usunięcie niektórych funkcji, takich jak odbicie, FileDescriptors
do i z formatów tekstowych. Ta wersja nadal wymaga kilku MB
w kodzie, więc biblioteka Tuning Fork wykorzystuje wewnętrznie funkcję
bibliotekę nanopb, Kod źródłowy
dla tej biblioteki jest dostępny w projekcie Android Open Source w projektach external/nanopb-c
oraz
jest częścią gałęzi gamesdk
. Użyj tej biblioteki w grze, jeśli rozmiar kodu
jest kwestią istotną.
W usłudze gamesdk/src/protobuf
znajdują się pliki CMake, które mogą ułatwić integrację
wszystkich 3 wersji protokołu. W próbkach wykorzystano zarówno nanopb, jak i pełny
protobuf.