Gunakan fungsi dalam topik ini untuk mengintegrasikan library Tuning Fork ke dalam kode game Anda.
File header di include/tuningfork/tuningfork.h
berisi antarmuka inti untuk library Tuning Fork. File di
include/tuningfork/tuningfork_extra.h
berisi fungsi utilitas.
Beberapa fungsi melakukan serialisasi buffering protokol. Untuk informasi selengkapnya cara menggunakan buffering protokol dalam game, lihat Tentang buffering protokol.
Parameter fungsi dan nilai return dijelaskan dalam header dan dokumentasi API referensi.
Fungsi siklus proses Android Performance Tuner
Gunakan fungsi berikut untuk mengontrol siklus proses instance Tuning Fork.
Lakukan inisialisasi
TFErrorCode TuningFork_init(const TFSettings* settings, JNIEnv* env, jobject
context);
Anda harus memanggil fungsi ini satu kali saat memulai, biasanya dari dalam kode native yang dieksekusi oleh metode onCreate()
aplikasi. Langkah ini mengalokasikan data yang dibutuhkan oleh
library Tuning Fork.
Anda harus memiliki file tuningfork_settings.bin
di assets/tuningfork
dalam aplikasi Anda, yang berisi setelan histogram dan anotasi. Untuk mengonversi file teks ke biner, lihat Representasi teks versus biner.
Kolom yang Anda isi di settings
menentukan cara library melakukan inisialisasi sendiri.
/**
* @brief Initialization settings
* Zero any values that are not being used.
*/
struct TFSettings {
/**
* Cache object to be used for upload data persistence.
* If unset, data is persisted to /data/local/tmp/tuningfork
*/
const TFCache* persistent_cache;
/**
* The address of the Swappy_injectTracers function.
* If this is unset, you need to call TuningFork_tick explicitly.
* If it is set, telemetry for 4 instrument keys is automatically recorded.
*/
SwappyTracerFn swappy_tracer_fn;
/**
* Callback
* If set, this is called with the fidelity parameters that are downloaded.
* If unset, you need to call TuningFork_getFidelityParameters explicitly.
*/
ProtoCallback fidelity_params_callback;
/**
* A serialized protobuf containing the fidelity parameters to be uploaded
* for training.
* Set this to nullptr if you are not using training mode. Note that these
* are used instead of the default parameters loaded from the APK, if they
* are present and there are neither a successful download nor saved parameters.
*/
const CProtobufSerialization* training_fidelity_params;
/**
* A null-terminated UTF-8 string containing the endpoint that Tuning Fork
* will connect to for parameter, upload, and debug requests. This overrides
* the value in base_uri in the settings proto and is intended for debugging
* purposes only.
*/
const char* endpoint_uri_override;
/**
* The version of Swappy that swappy_tracer_fn comes from.
*/
uint32_t swappy_version;
/**
* The number of each metric that is allowed to be allocated at any given
* time. If any element is zero, the default for that metric type is used.
* Memory for all metrics is allocated up-front at initialization. When all
* metrics of a given type are allocated, further requested metrics are not
* added and data is lost.
*/
TuningFork_MetricLimits max_num_metrics;
};
Jika Anda meneruskan fungsi Swappy_injectTracer()
(OpenGL,
Vulkan)
dari Frame Pacing API saat inisialisasi, library Tuning Fork
akan otomatis merekam waktu render frame tanpa Anda memanggil fungsi tick
secara eksplisit. Hal ini dilakukan di aplikasi demo:
void InitTf(JNIEnv* env, jobject activity) {
SwappyGL_init(env, activity);
swappy_enabled = SwappyGL_isEnabled();
TFSettings settings {};
if (swappy_enabled) {
settings.swappy_tracer_fn = &SwappyGL_injectTracer;
settings.swappy_version = Swappy_version();
}
...
}
Hancurkan
TFErrorCode TuningFork_destroy();
Anda dapat memanggil fungsi ini saat mematikan. Fungsi ini mencoba mengirimkan semua data histogram yang disimpan saat ini untuk diupload kemudian, sebelum membatalkan alokasi semua memori yang digunakan oleh library Tuning Fork.
Flush
TFErrorCode TuningFork_flush();
Fungsi ini membersihkan histogram yang direkam (misalnya, saat game dikirim ke latar belakang atau latar depan). Fitur ini tidak akan menghapus data jika periode upload minimum, yang memiliki durasi default satu menit, tidak berlalu sejak upload sebelumnya.
Menyetel parameter fidelitas
TFErrorCode TuningFork_setFidelityParameters(const CProtobufSerialization*
params);
Fungsi ini mengganti parameter fidelitas saat ini yang terkait dengan data frame yang dikaitkan. Anda harus memanggil fungsi ini saat pemain mengubah setelan kualitas game secara manual.
Anotasi
TFErrorCode TuningFork_setCurrentAnnotation(const CProtobufSerialization*
annotation);
Fungsi ini menyetel anotasi untuk dikaitkan dengan tick berikutnya. Fungsi ini menampilkan TFERROR_INVALID_ANNOTATION
jika terjadi error saat mendekode anotasi dan TFERROR_OK
jika tidak ada error.
Fungsi per frame
TFErrorCode TuningFork_frameTick(TFInstrumentKey key);
Fungsi ini merekam waktu antara tick sebelumnya dengan key
yang ditentukan
dan waktu saat ini dalam histogram yang terkait dengan key
dan anotasi
saat ini.
TFErrorCode TuningFork_frameDeltaTimeNanos(TFInstrumentKey key, TFDuration
dt);
Fungsi ini merekam durasi dalam histogram yang terkait dengan key
dan
anotasi saat ini.
TFErrorCode TuningFork_startTrace(TFInstrumentKey key, TraceHandle* handle);
Fungsi ini menyetel handle ke handle rekaman aktivitas yang terkait dengan key
yang ditentukan.
TFErrorCode TuningFork_endTrace(TraceHandle handle);
Fungsi ini merekam interval waktu sejak panggilan
TuningFork_startTrace()
terkait dalam histogram yang terkait dengan key
yang digunakan dan anotasi
saat ini.
Fungsi siklus proses aplikasi
typedef enum TuningFork_LifecycleState {
TUNINGFORK_STATE_UNINITIALIZED = 0,
TUNINGFORK_STATE_ONCREATE = 1,
TUNINGFORK_STATE_ONSTART = 2,
TUNINGFORK_STATE_ONSTOP = 3,
TUNINGFORK_STATE_ONDESTROY = 4,
} TuningFork_LifecycleState;
TFErrorCode TuningFork_reportLifecycleEvent(TuningForkLifecycleState state);
Panggil fungsi ini dari metode siklus proses yang sesuai dalam Aktivitas utama game Anda, dengan meneruskan enum yang sesuai. Dengan merekam peristiwa siklus proses game, APT dapat lebih memahami kapan game Anda mungkin mengalami error atau kapan pengguna berhenti (misalnya, saat peristiwa pemuatan yang lama).
Fungsi lanjutan
Fungsi berikut tersedia di tuningfork_extra.h
.
Menemukan dan memuat file dalam APK
Fungsi ini memuat fidelityParams
dari direktori assets/tuningfork
di
APK dengan nama file yang ditentukan. fidelityParams
harus berupa serialisasi pesan FidelityParams
. Untuk informasi selengkapnya, lihat Menentukan tingkat kualitas.
Kepemilikan serialisasi diteruskan ke pemanggil, yang harus memanggil CProtobufSerialization_Free
untuk membatalkan semua memori yang ditahan.
Mendownload parameter fidelitas pada thread terpisah
Mengaktifkan thread download untuk mengambil parameter fidelitas. Thread akan mengulangi permintaan hingga terjadi download parameter atau waktu tunggu. Parameter yang didownload disimpan secara lokal. Saat dimulai ulang, aplikasi akan menggunakan parameter yang didownload ini, bukan parameter default.
Menyimpan dan menghapus parameter fidelitas yang disimpan di perangkat
Fungsi ini hanya diperlukan dalam mode pakar dengan parameter fidelitas
yang didownload dari server. Ini akan menyimpan atau menghapus (jika fidelity_params
adalah null) file yang disimpan secara lokal yang digunakan saat server tidak dapat dijangkau.
Permintaan web
Library membuat jenis permintaan berikut ke endpoint server:
- Permintaan
generateTuningParameters
dibuat saat inisialisasi. - Selama gameplay, permintaan
uploadTelemetry
secara berkala dibuat untuk mengirim data ke server. - APK Debug juga dapat mengirim permintaan
debugInfo
, yang menginformasikan server debug tentang setelan, parameter fidelitas default, dan strukturdev_tuningfork.proto
.
Pemain offline
Jika tidak ada koneksi yang tersedia saat inisialisasi, permintaan akan dicoba lagi beberapa kali dengan waktu back-off yang meningkat.
Jika tidak ada koneksi saat upload dilakukan, upload akan di-cache. Anda dapat menyediakan mekanisme caching sendiri dengan meneruskan objek TFCache
saat inisialisasi. Jika Anda tidak menyediakan cache sendiri, upload akan disimpan sebagai file dalam penyimpanan sementara.