Ek açıklamaları, doğruluk parametrelerini ve ayarları tanımlayın

Bu belgede, projenizde ek açıklamaları, doğruluk parametrelerini ve ayarları nasıl belirleyeceğiniz açıklanmaktadır.

Ek açıklamalar ve doğruluk parametreleri

Ek açıklamalar, işaret kaydedilirken oyununuzun ne yaptığına dair bağlamsal bilgiler verir. Doğruluk parametreleri, oyununuzun performansını ve grafik ayarlarını yansıtır. Bunları, Google'ın dilden bağımsız, yapılandırılmış veri değişim biçimi olan protokol arabelleklerini kullanarak tanımlarsınız. Oyununuzda protokol arabelleklerini kullanma hakkında daha fazla bilgi için Protokol arabellekleri hakkında başlıklı makaleyi inceleyin.

Oyununuz için olası ek açıklamalar ve doğruluk parametreleri, projenizin assets/tuningfork dizininde bulunan dev_tuningfork.proto adlı bir dosyada tanımlanır. Aşağıda, demo uygulamasından bir örnek verilmiştir:

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;
}

Aşağıdakileri göz önünde bulundurun:

  • Paket com.google.tuningfork olmalıdır.
  • İleti adları tam olarak Annotation ve FidelityParams olmalıdır.
  • Notlarda yalnızca bu dosyada tanımlanan enums kullanabilirsiniz.
  • Yalnızca enums, int32s veya floats öğelerini FidelityParams alanlarında kullanabilirsiniz.
  • Doğrulama aracı bu kuralları uygular.

Ayarlar

Settings mesajı tuningfork.proto tarafından tanımlanır. Tam örneği şu dosyada bulabilirsiniz:

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

Oyununuzun ayarlarını, projenizin assets/tuningfork dizininde bulunan tuningfork_settings.txt adlı bir dosyada tanımlamanız gerekir. Yalnızca aşağıdaki alanları belirtmeniz gerekir:

  • aggregation_strategy: Aşağıdakileri içeren bir mesaj:

    • method: Her n milisaniyede bir yüklemek için TIME_BASED veya her n işaretinde bir yüklemek için TICK_BASED.
    • intervalms_or_count: method alanı için n.
    • max_instrumentation_keys: Kullanılacak enstrümantasyon anahtarlarının sayısı. Android Frame Pacing kitaplığı kullanılıyorsa 4 olarak ayarlayın.
    • annotation_enum_size: Boyut, başlangıçta tanımlayıcıdan hesaplandığı için isteğe bağlı bir alandır.
  • api_key: Uç noktaya yapılan istekleri doğrulamak için kullanılan uygulamanızın Cloud projesi API anahtarı. Bu anahtarı oluşturmak için API'yi etkinleştirme başlıklı makaleyi inceleyin. logcat bölümünde bağlantı hataları görüyorsanız API anahtarının doğru olup olmadığını kontrol edin.

  • default_fidelity_parameters_filename: Başlatma sırasında kullanılan doğruluk parametresi grubu (kodunuzda training_fidelity_params değerini ayarlarsanız isteğe bağlıdır).

  • level_annotation_index: (İsteğe bağlı) Seviye numarasının açıklama alanlarınızdaki dizini.

Aşağıda, örnek bir metin gösterimi verilmiştir:

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

Notları ayarlama

Oyununuz sırasında ek açıklamaları manuel olarak ayarlamanız gerekir. Bunun bir örneğini, tüm oyun seviyelerinde otomatik olarak ilerleyen demo uygulamasında görebilirsiniz. Daha fazla bilgi için insightsdemo.cpp içindeki SetAnnotations() işlevine bakın.

Bu durumda, ek açıklamada yalnızca seviye numarası belirtilir.

message Annotation {
  Level level = 1;
}

Kalite seviyelerini tanımlama

Kalite seviyelerini kullanarak oturumlara açıklama ekleyin. Böylece cihazların çok yüksek (daha düşük performansla sonuçlanır) veya çok düşük (gereksiz yere azaltılmış doğrulukla sonuçlanır) bir kalite seviyesinde çalışıp çalışmadığını belirleyebilirsiniz.

Oyununuz için en az bir, tercihen birkaç kalite seviyesi tanımlamanız gerekir. Kalite düzeyi, FidelityParams mesajınızın bir örneğine karşılık gelir. Bu seviyeler, aşağıdaki dosya adı biçimiyle birlikte artan kalite sırasına göre verilmelidir:

dev_tuningfork_fidelityparams_i.txt

Burada i, 1'den başlayan ve maksimum değeri 15 olan bir dizindir. Bu dosyalar, projenizin assets/tuningfork dizininde bulunmalıdır. Örnek proje, gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/ dizininde bu yapının bir örneğini gösterir.

Protokol arabellekleri hakkında

Tuning Fork kitaplığı, ayarlar, ek açıklamalar ve ses kalitesi parametreleri için Google'ın protokol arabellek biçimini kullanır. Bu, genişletilebilir yapılandırılmış veriler için iyi tanımlanmış, çok dilli bir protokoldür. Daha fazla bilgi için Protocol Buffers belgelerine bakın.

Proto2 ve proto3 karşılaştırması

Protokol arabelleği biçiminin sürümü, dosyanın ilk satırında ayarlanır:

syntax="proto2";

Proto2 ve proto3, protokol arabelleklerinin yaygın olarak kullanılan iki sürümüdür. Her ikisi de aynı kablo biçimini kullanır ancak tanım dosyaları uyumlu değildir. İki sürüm arasındaki temel farklar şunlardır:

  • optional ve required anahtar kelimelerine artık proto3'te izin verilmiyor.
  • Proto3'te her şey etkili bir şekilde optional.
  • Uzantılar proto3'te desteklenmez.

C# diline derlenebildiği için proto dosyalarınızda proto3'ü kullanın. Proto2, Tuning Fork kitaplığında kullanılan sınırlı özellik grubuyla da çalışır.

Metin ve ikili gösterimler

İkili protobuf kablo biçimi, farklı protobuf sürümlerinde iyi tanımlanmış ve kararlıdır (oluşturulan kod kararlı değildir). Ayrıca, protobuf kitaplığının tam sürümünün oluşturup okuyabileceği bir metin biçimi de vardır. Bu biçim iyi tanımlanmamış olsa da Tuning Fork kitaplığındaki sınırlı sayıda özellik için kararlıdır. protoc derleyicisini kullanarak ikili ve metin biçimleri arasında dönüştürme yapabilirsiniz. Aşağıdaki komut, metin protobuf'u ikiliye dönüştürür:

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

Tam protobuf kitaplığı birkaç MB boyutunda olduğundan APK'nıza metin dosyaları yerine ikili dosyalar eklemeniz gerekir. Tuning Fork kitaplığının buna bağlı olması, oyununuzun boyutunu benzer bir miktarda artırır.

Full, Lite ve Nano sürümlerinin karşılaştırması

Tam protobuf kitaplığının yanı sıra, yansıtma, FileDescriptors ve metin biçimlerine ve metin biçimlerinden akış gibi bazı özellikleri kaldırarak kod ayak izini azaltan bir lite sürümü de vardır. Bu sürümde hâlâ birkaç MB ek kod alanı gerektiğinden Tuning Fork kitaplığı dahili olarak nanopb kitaplığını kullanır. Bu kitaplığın kaynak kodu, external/nanopb-c içindeki Android Açık Kaynak Projesi'nde yer alır ve gamesdk dalının bir parçasıdır. Kod boyutu sorun teşkil ediyorsa bu kitaplığı oyununuzda kullanın.

gamesdk/src/protobuf içinde, protobuf'un üç sürümünü de entegre etmenize yardımcı olabilecek CMake dosyaları vardır. Örneklerde hem nanopb hem de tam protobuf'un bir karışımı kullanılır.