Ringkasan Android Performance Tuner (native)

Topik ini menjelaskan cara mengintegrasikan Android Performance Tuner, yang juga dikenal sebagai library Tuning Fork, untuk merekam dan mengupload data waktu render frame dari mesin game native (C dan C++).

Untuk mesin game Unity, lihat panduan untuk Unity.

Latar belakang

Komponen utama pengalaman game adalah performa rendering. Performa rendering adalah hasil dari dua input berikut:

  • Kecepatan frame: Seberapa sering frame dibuat.
  • Setelan kualitas grafis: Tingkat fidelitas saat frame disajikan, termasuk fidelitas simulasi dan grafis.

Untuk game, performa rendering yang baik ditetapkan sebagai berikut:

  • Memberikan kecepatan frame yang stabil dan konsisten (yaitu, persentase frame yang dirender pada frekuensi yang diinginkan).
  • Merender frame dengan frekuensi tertinggi sekaligus mempertahankan stabilitas, biasanya 30 atau 60 FPS, tergantung pada jenis game.
  • Memaksimalkan tingkat detail untuk pengguna sesuai dengan kepadatan dan ukuran layarnya sekaligus tetap mencapai kecepatan frame yang stabil dan diinginkan.

Library Android Frame Pacing membatasi banyak variasi dalam waktu render frame, yang menyediakan kecepatan frame yang stabil untuk game. Variasi lainnya dalam waktu render frame disebabkan oleh tingkat detail yang ditampilkan selama scene tertentu dalam gameplay dan kemampuan grafis perangkat. Menggunakan Android Performance Tuner, Anda dapat menentukan waktu selama gameplay saat waktu render frame lebih lambat atau lebih cepat dari target, dan menghubungkan masalah dan peluang ini dengan:

  • Setelan kualitas tertentu
  • Scene tertentu dalam game Anda
  • Model perangkat atau spesifikasi perangkat tertentu

Merekam dan mengupload data

Library Tuning Fork bergantung pada salah satu fungsi tick yang dipanggil setiap frame oleh library Android Frame Pacing. Dalam library, informasi titik skala ini digabungkan menjadi histogram yang kemudian diupload secara berkala ke Google Play melalui endpoint HTTP. Setiap titik skala direkam sebagai terkait dengan kunci instrumen dan anotasi, definisi yang Anda tentukan dalam file buffering protokol.

Kunci instrumen

Kunci instrumen menunjukkan asal titik skala frame, dan merupakan bilangan bulat yang harus diteruskan ke setiap panggilan fungsi titik skala. Library Android Frame Pacing menggunakan kumpulan kunci instrumen yang telah ditentukan, yang ditentukan di swappy_common.h. Anda juga dapat menentukan kunci instrumen sendiri jika tidak menggunakan library Frame Pacing.

Anotasi

Anotasi memberikan informasi kontekstual tentang apa yang dilakukan game Anda saat tick direkam. Contoh, anotasi dapat mengidentifikasi salah satu dari hal berikut:

  • Level game saat ini
  • "Bos besar" ada di layar
  • Informasi status game relevan lainnya

Anotasi ditentukan oleh pesan buffering protokol com.google.tuningfork.Annotation. Untuk menyetel anotasi saat ini, Anda meneruskan serialisasi pesan yang Anda tentukan ke TuningFork_setCurrentAnnotation(). Semua data titik skala berikutnya kemudian dikaitkan dengan anotasi ini hingga anotasi lain disetel. Berikut adalah contoh definisi proto untuk anotasi:

import "tuningfork.proto"
enum Level {
  INVALID_LEVEL = 0;
  Level_1 = 1;
  Level_2 = 2;
  Level_3 = 3;
}
message Annotation {
  optional Level level = 1;
}

Parameter fidelitas

Parameter fidelitas memengaruhi performa dan fidelitas grafis game, seperti level mesh-detail, resolusi tekstur, dan metode antialias. Seperti anotasi, parameter fidelitas ditentukan menggunakan pesan buffering protokol com.google.tuningfork.FidelityParams. Berikut adalah contoh definisi proto untuk parameter fidelitas:

import "tuningfork.proto"
message FidelityParams {
  int32 texture_quality_level = 1;
  int32 shadow_resolution = 2;
  float terrain_details_percent = 3;
  int32 post_processing_effects_level = 4;
}

Pada inisialisasi Tuning Fork, Anda meneruskan serialisasi parameter yang digunakan game. Anda dapat mengubah parameter ini jika, misalnya, pengguna mengubah setelan rendering game, dan data yang diupload berikutnya dikaitkan dengan parameter baru.

Agar Google Play dapat memahami anotasi dan parameter fidelitas yang Anda tentukan, file buffering protokol yang menyimpan definisi tersebut harus dipaketkan dalam APK game, bersama dengan setelan inisialisasi. Anda juga harus memberikan nilai default untuk kombinasi parameter fidelitas umum di APK agar data tersegmentasi olehnya di UI Google Play. Untuk informasi selengkapnya, lihat Menentukan tingkat kualitas.

Overhead memori dan CPU

Semua memori yang digunakan oleh library Tuning Fork dialokasikan pada inisialisasi untuk menghindari kejutan selama bermain game. Ukuran data bergantung pada jumlah kunci instrumen, jumlah kemungkinan anotasi, dan jumlah bucket di setiap histogram; semua ini dikalikan empat byte ini untuk setiap bucket. Terdapat juga dua salinan dari semua histogram untuk memungkinkan pengiriman dalam mode buffering ganda.

Pengiriman terjadi di thread terpisah dan tidak memblokir panggilan tick. Jika tidak ada koneksi upload, pengiriman akan dimasukkan ke antrean untuk diupload di lain waktu.

Terdapat sedikit overhead untuk memanggil fungsi titik skala: ini hanya menghitung indeks ke dalam array bucket histogram dan meningkatkan jumlah bilangan bulat.

Mengintegrasikan library Tuning Fork

Panduan integrasi ini dibagi menjadi dua bagian. Bagian pertama menjelaskan cara menjalankan pengujian end-to-end menggunakan aplikasi demo dan Konsol Google Play. Bagian kedua menjelaskan cara mengintegrasikan library Tuning Fork ke dalam toolchain dan cara menggunakan fungsi yang disediakan library. Klik link Berikutnya di bawah untuk memulai.