Definiowanie adnotacji, parametrów wierności i ustawień

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 i FidelityParams.
  • 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ści enums, int32s lub floats.
  • 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 lub TICK_BASED przesyłać co n znaczniki.
    • intervalms_or_count: n w polu method.
    • max_instrumentation_keys: liczba kluczy instrumentacji do użycia. Ustaw na 4, 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 w logcat, sprawdź, czy klucz interfejsu API jest prawidłowy.

  • default_fidelity_parameters_filename: zestaw parametrów wierności używany w (opcjonalnie, jeśli ustawisz training_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 i required 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.