Menganalisis dan mengoptimalkan performa game

Panduan ini menjelaskan proses untuk menganalisis dan mengoptimalkan performa game di perangkat Android untuk pengalaman pengguna yang lancar. Bagian ini mencakup identifikasi bottleneck performa, perbedaan antara masalah CPU dan GPU, serta verifikasi hasil pengoptimalan.

Tidak peduli seberapa seru atau menariknya sebuah game, jika tidak berjalan dengan baik di perangkat seluler, pemain tidak akan menikmatinya, dan game tersebut tidak akan sesukses yang diharapkan. Bahkan game yang menyenangkan pun dapat mengalami masalah seperti frame per detik (FPS) yang rendah atau perangkat menjadi terlalu panas. Masalah ini membuat pemain tidak senang. Oleh karena itu, meningkatkan performa game sangat penting dan Anda harus memahami cara mengoptimalkannya.

Proses pengoptimalan performa melibatkan langkah-langkah berikut:

  1. Mengukur performa keseluruhan game. Mengukur penurunan performa berdasarkan per adegan untuk menunjukkan anomali.

  2. Pemeriksaan terikat CPU dan GPU. Tentukan penyebab yang mendasarinya, apakah terikat CPU atau terikat GPU.

    Alat: Unreal Insight, Unity Profiler, Perfetto, dan Alat pengukuran performa.

  3. Pengoptimalan CPU. Perbaiki hambatan performa yang teridentifikasi.

    Alat: Unreal Insight, Unity Profiler, Perfetto, dan Simpleperf.

  4. Pengoptimalan GPU. Perbaiki hambatan performa yang teridentifikasi.

    Alat: RenderDoc, Arm Mobile Studio, AGI, Alat khusus vendor.

  5. Pengujian A/B. Lakukan pengujian A/B untuk memvalidasi secara ketat efikasi pengoptimalan yang diterapkan.

    Alat: Unreal Insight, Unity Profiler, Perfetto, dan Alat pengukuran performa, penguncian frekuensi CPU atau GPU, dan RenderDoc.

  6. Proses iteratif ini (1-5) dipertahankan hingga FPS dan parameter termal yang ditargetkan berhasil dicapai.

Prasyarat

Menganalisis performa game yang komprehensif

Anda harus memeriksa performa keseluruhan game dan mengidentifikasi penurunan performa atau anomali berbasis adegan. Sebelum mengoptimalkan game, periksa performa saat ini. Karena game mencakup banyak UI dan adegan, analisis adegan dengan penggunaan CPU atau GPU yang tinggi, atau tata letak yang berperforma tidak terduga, untuk memantau penurunan performa dan pemakaian CPU atau GPU per adegan.

  1. Menguantifikasi penurunan performa: Gunakan alat pengukuran performa untuk mengukur performa keseluruhan game. Ukur performa berdasarkan per adegan untuk mengidentifikasi area tertentu yang mengalami penurunan kualitas atau anomali.
  2. Mengidentifikasi adegan yang bermasalah: Analisis data untuk menemukan adegan dengan penggunaan CPU atau GPU yang tinggi, atau tempat tata letak layar gagal menghasilkan performa yang diharapkan.
  3. Kumpulkan data rekaman aktivitas: Gunakan alat rekaman aktivitas untuk mengumpulkan data performa mendetail untuk adegan yang teridentifikasi bermasalah.

Mengidentifikasi bottleneck CPU atau GPU

Jika game tidak mencapai target FPS, tentukan apakah game tersebut terikat CPU atau terikat GPU. Menganalisis perilaku CPU dan GPU sangat penting untuk menemukan peluang pengoptimalan, bahkan saat perangkat menjadi panas atau menggunakan terlalu banyak daya selama gameplay. Anda dapat menggunakan berbagai metode untuk mengetahui apakah sistem terikat CPU atau terikat GPU.

  1. Menganalisis data rekaman aktivitas: Gunakan alat pilihan Anda untuk menganalisis data rekaman aktivitas:

    • Unreal Insight (Unreal Engine): Analisis rekaman aktivitas untuk melihat pengaturan waktu untuk GameThread, RenderThread, dan RHIThread.
      • Jika GameThread atau RenderThread melampaui batas waktu frame (misalnya, 33,3 md untuk 30 FPS), game tersebut terikat CPU.
      • Jika RHIThread menunjukkan eksekusi yang berkepanjangan atau menyumbang sebagian besar waktu frame, game tersebut terikat GPU.
    Linimasa rekaman aktivitas Unreal Insight yang menunjukkan waktu eksekusi GameThread, RenderThread, dan RHIThread
    Gambar 2. Rekaman aktivitas insight Unreal dengan GameThread, RenderThread, dan RHIThread (klik untuk memperbesar).
    • Unity Profiler (Unity): Jika thread utama menggunakan banyak waktu pada penanda seperti Gfx.WaitForPresentOnGfxThread, sementara thread render menampilkan Gfx.PresentFrame atau <GraphicsAPIName>.WaitForLastPresent, game tersebut terikat GPU.
    Linimasa Unity Profiler yang menunjukkan Thread Utama menunggu Gfx.WaitForPresentOnGfxThread
    Gambar 3. Contoh terikat GPU untuk Unity Profiler (klik untuk memperbesar).
    • Perfetto: Analisis penetapan inti CPU dan detail eksekusi thread. Analisis ini memfasilitasi identifikasi hambatan performa melalui peninjauan mendetail informasi eksekusi thread.
    • Overhead CPU: Rekaman aktivitas menunjukkan bahwa workload pada GameThread dan RenderThread, bersama dengan VSync, menyebabkan penundaan pada QueuePresent Thread RHI, sehingga menandakan skenario yang terikat CPU.

      Rekaman aktivitas Perfetto yang menunjukkan waktu eksekusi untuk GameThread, RenderThread, dan RHIThread
      Gambar 4. Rekaman aktivitas Perfetto dengan detail eksekusi CPU (klik untuk memperbesar).
    • Overhead GPU: Jika waktu penyelesaian GPU melebihi batas waktu render frame, misalnya, 25 md, game akan terikat GPU. Rekaman aktivitas menunjukkan bahwa penyelesaian GPU melebihi 25 md, yang menandakan skenario terikat GPU.

      Rekaman aktivitas Perfetto yang menampilkan blok penyelesaian GPU yang menunggu penyelesaian GPU
      Gambar 5. Detail rekaman aktivitas Perfetto dengan overhead GPU (klik untuk memperbesar).
  2. Menggunakan perintah stat Unreal Engine:

    • stat unit: Membandingkan waktu yang dialokasikan untuk thread Game, Draw, dan RHI. Jika waktu Game dan Draw rendah, tetapi waktu RHI secara konsisten melebihi batas waktu frame, game tersebut terikat GPU. Misalnya, jika FPS yang diperlukan adalah 30 (setara dengan 33,33 md per frame), dan thread Game dan Draw secara konsisten tetap berada dalam rentang 10-15 md, tetapi RHI secara konsisten melebihi 30 md, hal ini menunjukkan skenario yang terikat GPU.
    Overlay unit statistik yang menampilkan waktu eksekusi Frame, Game, Draw, GPU, dan RHIT
    Gambar 6. Unit statistik memfasilitasi estimasi kondisi terikat GPU.
    • stat VulkanRHI: Periksa durasi Pengiriman Antrean dan Penyajian Antrean.
    Overlay Stat VulkanRHI yang menampilkan penghitung siklus untuk Queue Submit dan Queue Present
    Gambar 7. Stat VulkanRHI memfasilitasi estimasi kondisi terikat GPU (klik untuk memperbesar).
    • stat slow: Periksa waktu yang dialokasikan untuk thread Game, Render, dan RHI untuk menunjukkan hambatan.
  3. Periksa metrik performa: Gunakan hasil dari analisis performa game komprehensif. Di Android:

    • Terikat CPU: Penggunaan CPU (dinormalisasi) lebih dari 15%, dengan penggunaan GPU rendah dan FPS rendah.
    • Terikat GPU: Penggunaan GPU lebih dari 90%.

    Biasanya, jika FPS dan penggunaan GPU rendah, sedangkan penggunaan CPU melebihi 15%, situasi tersebut dapat dianggap terikat CPU.

    Tabel metrik performa yang menandai skenario terikat CPU dan terikat GPU
    Gambar 8. Metrik performa dengan penggunaan CPU dan GPU.

Mengoptimalkan performa CPU

Jika analisis menunjukkan bahwa game terikat CPU, selidiki lebih lanjut untuk menentukan thread atau API tertentu yang menyebabkan hambatan.

Untuk panduan mendetail, lihat Tips Pengoptimalan CPU dan GPU untuk Android.

Mengoptimalkan performa GPU

Jika analisis menunjukkan bahwa game terikat GPU, selidiki lebih lanjut menggunakan debugger frame untuk menganalisis pipeline render dan panggilan gambar.

Untuk panduan mendetail, lihat Tips Pengoptimalan CPU dan GPU untuk Android.

Memverifikasi efektivitas pengoptimalan

  1. Lakukan pengujian A/B: Buat build dengan pengoptimalan yang diterapkan.
  2. Ukur performa: Gunakan alat dan metode yang sama dari analisis awal untuk mengukur performa build yang dioptimalkan.
  3. Bandingkan hasil: Bandingkan data performa baru dengan data awal untuk mengonfirmasi bahwa hambatan yang teridentifikasi telah diatasi dan target FPS serta termal telah terpenuhi.
  4. Ulangi: Ulangi langkah-langkah analisis dan pengoptimalan hingga performa tercapai.

Lihat juga