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
veFidelityParams
olmalıdır. - Notlarda yalnızca bu dosyada tanımlanan
enums
kullanabilirsiniz. - Yalnızca
enums
,int32s
veyafloats
öğeleriniFidelityParams
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çinTIME_BASED
veya her n işaretinde bir yüklemek içinTICK_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ıyorsa4
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 (kodunuzdatraining_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
verequired
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.