Sesi lambat (khusus game)

Sesi Lambat adalah metrik Android vitals baru di Konsol Google Play. Sesi lambat adalah sesi saat lebih dari 25% frame berjalan lambat. Frame akan berjalan lambat jika tidak ditampilkan kurang dari 50 md setelah frame sebelumnya (setara dengan 20 FPS). Android vitals juga melaporkan metrik Sesi Lambat kedua dengan target 34 md (setara dengan 30 FPS). Dengan Sesi Lambat, Anda dapat memahami performa kecepatan frame game, yang memengaruhi kelancaran dan keseruan game bagi pengguna.

Pada waktunya, Play akan mulai mengalihkan pengguna dari game yang tidak dapat mencapai 20 FPS di ponsel mereka. Perhatikan bahwa Android vitals hanya mulai memantau kecepatan frame setelah game berjalan selama satu menit.

Kunjungi Pusat Bantuan kami untuk mengetahui detail selengkapnya tentang metrik ini.

Grafik seperti diagram lingkaran yang menunjukkan jumlah frame lambat dan frame tidak lambat.
Gambar 1. Sesi lambat di Android vitals.

Cara mengukur FPS dan mendeteksi frame lambat

Perintah dumpsys surfaceflinger timestats Android menyediakan FPS rata-rata dan histogram pengaturan waktu present to present untuk semua lapisan yang sedang dirender. Waktu saat ini hingga frame adalah interval antara frame saat ini dan frame sebelumnya yang sedang digambar. Berikut langkah-langkah menggunakan perintah untuk mengumpulkan FPS game:

  1. Jalankan perintah dengan tanda enable dan clear untuk mulai mengambil informasi:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. Jika game dimainkan cukup lama, jalankan lagi perintah dengan flag dump untuk membuang informasi:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    Informasi yang dibuang memberikan total frame dan histogram presentToPresent untuk semua lapisan yang dirender oleh SurfaceFlinger. Anda harus menemukan bagian game dengan memfilter berdasarkan layerName:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    Kecepatan frame yang lambat pada sesi dapat dihitung berdasarkan informasi setiap lapisan.

    Misalnya, persentase frame lambat 20 FPS = (jumlah nilai dari 54 md hingga 1.000 md) / totalFrame x 100

    totalFrames = 274
    ...
    presentToPresent histogram is as below:
    0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0
    13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0
    24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0
    36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0
    66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0
    110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0
    150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0
    650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
    

    FPS rata-rata setiap lapisan juga ditampilkan dalam dump:

    ...
    averageFPS = 30.179
    ...
    
  3. Setelah mengumpulkan semua informasi, Anda harus menonaktifkan timestats dengan menggunakan flag disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

Penyebab dan solusi frame lambat

Ada banyak alasan mengapa frame mungkin muncul atau dirender lebih lama di layar dibandingkan target developer. Game dapat terikat CPU/GPU. Atau perangkat terlalu panas dan mengaktifkan status termal yang di-throttle. Atau ada ketidakcocokan dalam kecepatan frame game dan kecepatan refresh tampilan perangkat.

Gunakan Android Frame Pacing (Swappy), Vulkan, dan ADPF untuk mengatasi masalah ini dan meningkatkan performa game Anda.

Apa itu Swappy

Library Android Frame Pacing, yang juga dikenal sebagai Swappy, adalah bagian dari library AGDK. Swappy membantu game OpenGL dan Vulkan menghasilkan rendering yang lancar dan kecepatan frame yang benar di Android.

Kecepatan frame adalah sinkronisasi logika game dan loop rendering dengan subsistem tampilan OS dan hardware tampilan yang mendasarinya. Subsistem tampilan Android dirancang untuk menghindari artefak visual (dikenal sebagai sobek) yang dapat terjadi saat hardware tampilan beralih ke frame baru di tengah proses update. Untuk menghindari artefak ini, subsistem tampilan melakukan hal berikut:

  • Buffering melewati frame secara internal
  • Mendeteksi keterlambatan pengiriman frame
  • Mengulangi tampilan frame sebelumnya saat frame terlambat terdeteksi

Cara menggunakan Swappy di Project Native

Lihat panduan berikut untuk mengintegrasikan library Android Frame Pacing ke dalam game:

Cara menggunakan Swappy di game engine Unity

Unity telah mengintegrasikan Android Frame Pacing ke dalam mesin mereka. Untuk mengaktifkan fitur ini di Unity 2019.2 atau yang lebih baru, centang kotak Optimized Frame Pacing di bagian Project Settings > Player > Settings untuk Android > Resolution and Presentation:

Dialog setelan project.
Gambar 2. Aktifkan Frame Pacing di Unity Engine.

Atau, aktifkan opsi Frame Pacing yang Dioptimalkan secara terprogram dalam kode logika agar Unity dapat mendistribusikan frame secara merata untuk mengurangi varian kecepatan frame, sehingga menciptakan gameplay yang lebih lancar.

Cara menggunakan Swappy di game engine Unreal

Unreal 4.25 dan yang lebih tinggi mengintegrasikan Library Android Frame Pacing, yang merupakan bagian dari Android Game Development Kit. Artikel Mobile Frame Pacing menjelaskan cara mengaktifkan Library Frame Pacing Android dan cara mengontrol kecepatan frame dari kode C++.

Apa itu Vulkan

Vulkan adalah API grafis 3D lintas platform modern yang dirancang untuk meminimalkan abstraksi antara hardware grafis perangkat dan game Anda. Vulkan adalah API grafis tingkat rendah utama di Android, yang menggantikan OpenGL ES. OpenGL ES masih didukung di Android, tetapi tidak lagi dikembangkan secara aktif.

Vulkan menawarkan keunggulan berikut dibandingkan OpenGL ES:

  • Arsitektur yang lebih efisien dengan overhead CPU yang lebih rendah di driver grafis
  • Strategi pengoptimalan baru untuk meningkatkan performa CPU
  • Fitur grafis baru yang tidak tersedia di OpenGL ES, seperti API tanpa ikatan dan pelacakan sinar

Cara menggunakan Vulkan dalam project Android native

Codelab Mulai menggunakan Vulkan di Android memandu Anda menyiapkan pipeline rendering Vulkan, lalu merender segitiga bertekstur dan berputar di layar. Gunakan codelab untuk mempelajari cara merender grafis game.

Cara menggunakan Vulkan di game engine Unity

Untuk mengaktifkan pemilihan perangkat otomatis di Unity, ikuti langkah-langkah untuk mengonfigurasi Auto Graphics API.

Dialog setelan project.
Gambar 3. Aktifkan Unity Auto Graphics API.

Atau, Anda dapat mengaktifkan Vulkan secara manual dengan menonaktifkan Auto Graphics API, dan menempatkan Vulkan di prioritas tertinggi dalam daftar Graphics API. Jika Anda menggunakan Unity 2021.1 atau versi sebelumnya, ini adalah satu-satunya cara untuk menggunakan Vulkan.

Dialog setelan project.
Gambar 4. Pilih Vulkan secara manual sebagai Graphics API utama di Unity.

Gunakan plugin mesin VkKualitas Unity untuk memberikan rekomendasi waktu peluncuran API grafis untuk game Anda agar dapat digunakan di perangkat tertentu.

Cara menggunakan Vulkan di game engine Unreal

Untuk mengaktifkan API grafis Vulkan, buka Project Settings > Platforms > Android > Build, lalu pilih Support Vulkan. Jika Anda memilih Support Vulkan dan Support OpenGL ES3.2, Unreal akan menggunakan Vulkan secara default. Jika perangkat tidak mendukung Vulkan, Unreal akan kembali ke OpenGL ES 3.2.

Dialog setelan project.
Gambar 5. Aktifkan Vulkan di Unreal Engine.

Jika menggunakan fitur Vulkan tertentu yang diketahui berperilaku buruk di perangkat tertentu, Anda dapat menyesuaikan file BaseDeviceProfile.ini untuk mengecualikan perangkat tersebut. Lihat Menyesuaikan Profil Perangkat dan Skalabilitas untuk Android guna mempelajari cara menyesuaikan BaseDeviceProfile.ini. Karena driver perangkat baru dapat memperbaiki perangkat buruk yang sebelumnya diketahui, terus update file BaseDeviceProfile.ini untuk mendapatkan semua pengoptimalan.

Apa itu ADPF

Android Dynamic Performance Framework (ADPF) mengoptimalkan game berdasarkan fitur pengelolaan termal, CPU, dan GPU dinamis di Android. Fokusnya adalah game, tetapi Anda juga dapat menggunakan fitur-fitur untuk aplikasi lain yang memerlukan performa intensif.

ADPF adalah sekumpulan API yang memungkinkan game dan aplikasi yang membutuhkan performa tinggi untuk berinteraksi lebih langsung dengan sistem daya dan termal perangkat Android. Dengan API ini, Anda dapat memantau perilaku dinamis di sistem Android dan mengoptimalkan performa game pada tingkat yang berkelanjutan dan tidak membuat perangkat terlalu panas.

Berikut adalah fitur utama ADPF:

  • Thermal API: Memantau status termal perangkat sehingga aplikasi dapat menyesuaikan beban kerja secara proaktif sebelum menjadi tidak berkelanjutan.
  • CPU Performance Hint API: Memberikan petunjuk performa yang memungkinkan Android memilih setelan performa yang tepat (misalnya, titik operasi atau core operasi CPU) untuk beban kerja.
  • Game Mode API dan Game State API: Mengaktifkan pengoptimalan gameplay dengan memprioritaskan karakteristik performa atau masa pakai baterai, berdasarkan setelan pengguna dan konfigurasi khusus game.
  • Mode Performa Tetap: Mengaktifkan mode performa tetap di perangkat selama benchmark untuk mendapatkan pengukuran yang tidak diubah oleh clock CPU dinamis.
  • Mode Efisiensi Daya: Memberi tahu sesi bahwa thread di Sesi Petunjuk Performa dapat dijadwalkan dengan aman untuk lebih memilih efisiensi daya daripada performa. Tersedia di Android 15 (leve API 35).

Cara menggunakan ADPF dalam project Android native

Codelab Mengintegrasikan Fitur Adaptasi ke dalam Game Native Anda memandu Anda untuk mengintegrasikan fitur ADPF ke dalam game dengan langkah-langkah yang dapat Anda ikuti sesuai kemampuan. Di akhir codelab, Anda akan mengintegrasikan fitur-fitur berikut:

  • Thermal API: Memantau kondisi termal perangkat dan bereaksi sebelum perangkat beralih ke status throttling termal.
  • Game Mode API: Pahami preferensi pengoptimalan pemain (maksimalkan performa atau hemat baterai) dan lakukan penyesuaian.
  • Game State API: Memberi tahu sistem status game Anda (memuat, memainkan, UI, dll.), dan sistem dapat menyesuaikan resource sebagaimana mestinya (meningkatkan I/O, atau CPU, GPU, dll.).
  • Performance Hint API: Beri tahu sistem tentang model threading dan beban kerja Anda agar sistem dapat mengalokasikan resource sebagaimana mestinya.

Cara menggunakan ADPF di game engine Unity

Performa Adaptif Unity adalah alat untuk developer game yang ingin mengoptimalkan game mereka di perangkat seluler, khususnya untuk ekosistem Android yang beragam. Performa Adaptif memungkinkan game Anda beradaptasi dengan performa dan karakteristik termal perangkat secara real time, memastikan pengalaman bermain game yang lancar dan efisien.

Penyedia Android Performa Adaptif akan memandu Anda melakukan langkah-langkah untuk menerapkan ADPF di Unity.

Dialog setelan project.
Gambar 6. Integrasikan ADPF di Unity Engine.

Cara menggunakan ADPF di game engine Unreal

Dialog setelan project.
Gambar 7. Integrasikan ADPF di Unreal Engine.
  1. Download plugin
  2. Menyalin plugin ke folder plugin project
  3. Mengaktifkan plugin ADPF Unreal Engine di editor Unreal
  4. Luncurkan ulang editor Unreal
  5. Membuat dan memasak game

Plugin Android Dynamic Performance Framework(ADPF) untuk Unreal Engine memberikan performa yang stabil dan mencegah throttling termal. Download plugin dari GitHub. Plugin ini mengubah fitur dengan menetapkan nilai konsol Unreal.