FPS Rata-Rata
Kecepatan frame yang lancar dan stabil sangat penting untuk memberikan pengalaman bermain game berkualitas tinggi di perangkat Android. Saat mengukur performa game, Anda harus mengukur FPS rata-rata sebagai dasar pengukuran untuk memberikan pemahaman dasar tentang pengalaman tersebut. Anda harus mengoptimalkan game untuk memenuhi kecepatan frame rata-rata 60 FPS guna memastikan pengalaman bermain game yang luar biasa.
FPS P90 dan P99 untuk stabilitas
Dengan rata-rata 60 FPS yang lancar, game masih dapat mengalami gangguan sesekali, micro-stuttering, dan input lag yang tidak dapat diprediksi, sehingga menghasilkan pengalaman pemain yang buruk.
Jadi, stabilitas frame sama pentingnya dengan melacak kecepatan frame rata-rata. Di sinilah Anda harus mengukur metrik kecepatan frame P90 dan P99 sebagai dasar pengukuran yang konsisten dan indikator stutter. Metrik ini menangkap "ujung ekor" performa agar Anda dapat mengoptimalkan kelancaran pengalaman pemain.
Metrik
- FPS Rata-Rata (dasar pengukuran): Metrik mendasar ini memberikan dasar pengukuran umum performa game Anda. Meskipun merupakan tolok ukur standar, penghitungan rata-rata berarti penurunan frame sesekali dan micro-stuttering tidak dapat terdeteksi, sehingga tidak cukup untuk mewakili pengalaman pemain.
- FPS P90 (dasar pengukuran konsisten pada persentil 10%): Hal ini menunjukkan bahwa 90% frame Anda melebihi dasar pengukuran yang konsisten ini, dan hanya 10% frame yang paling lambat yang membutuhkan waktu lebih lama untuk dirender. Jika kecepatan frame P90 Anda tinggi dan mendekati rata-rata, game akan berjalan dengan baik secara konsisten untuk sebagian besar sesi.
- FPS P99 (indikator stutter pada persentil 1%): Hal ini menunjukkan bahwa 99% frame Anda melebihi indikator stutter ini, yang secara khusus mengisolasi 1% frame yang paling lambat. Metrik ini penting untuk menangkap micro-stutter, penundaan pemuatan aset, dan lonjakan rendering berat aset yang tiba-tiba yang menyebabkan gangguan yang terlihat.
Contoh
Dengan membandingkan FPS rata-rata dengan metrik P90 dan P99, Anda dapat mendiagnosis perilaku game yang mendasarinya secara akurat.
Skenario 1: Kurva Optimal (Game yang Dioptimalkan)
- Rata-rata: 60 FPS (16,6 md)
- P90: 58 FPS (17,2 md)
- P99: 52 FPS (19,2 md)
- Analisis: Metrik dikelompokkan secara ketat. Game terasa sangat lancar dan konsisten. Tidak ada micro-stutter, dan bahkan 1% frame terburuk hampir tidak terlihat oleh mata manusia.
Skenario 2: Bottleneck Pemuatan (CPU/GPU Terikat)
- Rata-rata: 45 FPS (22,2 md)
- P90: 40 FPS (25,0 md)
- P99: 38 FPS (26,3 md)
- Analisis: Kecepatan frame rata-rata lebih rendah, tetapi konsisten. P99 tidak turun secara drastis dibandingkan dengan rata-rata. Hal ini menunjukkan bahwa sistem pada dasarnya kewalahan dengan setelan grafis atau batasan resolusi. Game tidak akan terasa stuttering, tetapi lambat. Menurunkan setelan grafis biasanya akan meningkatkan metrik ini secara seragam.
Skenario 3: 60 FPS yang tidak stabil (Kompilasi Shader / Stutter Streaming Aset)
- Rata-rata: 60 FPS (16,6 md)
- P90: 45 FPS (22,2 md)
- P99: 15 FPS (66,6 md)
- Analisis: Ini adalah skenario terburuk. Meskipun kecepatan frame rata-rata tampak sangat baik, P99 mengungkapkan masalah penting. P99 pada 66,6 md berarti game benar-benar membeku untuk beberapa frame sekaligus. Hal ini menunjukkan nilai ekstrem yang parah—biasanya disebabkan oleh bottleneck CPU, penundaan streaming aset (misalnya, RAM atau penyimpanan yang lambat), atau gangguan yang disebabkan oleh kompilasi shader.
Pengukuran
Untuk mengukur FPS Rata-Rata, P90, dan P99 secara efektif, Anda dapat menggunakan perintah Android
dumpsys surfaceflinger timestats. Alat ini menyediakan FPS rata-rata dan histogram waktu presentToPresent untuk semua lapisan yang dirender. Waktu presentToPresent frame adalah interval antara frame saat ini dan frame sebelumnya yang digambar.
Berikut adalah petunjuk langkah demi langkah untuk mengumpulkan dan menghitung metrik ini untuk game Anda:
Mulai merekam: Jalankan perintah berikut dengan flag enable dan clear untuk mulai merekam informasi:
adb shell dumpsys SurfaceFlinger --timestats -clear -enableInformasi dump: Setelah game dimainkan cukup lama, jalankan kembali perintah dengan flag dump untuk menampilkan informasi:
adb shell dumpsys SurfaceFlinger --timestats -dumpFilter menurut lapisan: Informasi yang di-dump menyediakan data untuk semua lapisan yang dirender oleh SurfaceFlinger. Anda harus menemukan bagian yang sesuai dengan game Anda dengan memfilter berdasarkan
layerName(misalnya, layerName = SurfaceView[com.example.yourgame...]).layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833Identifikasi FPS rata-rata: FPS Rata-Rata untuk setiap lapisan dihitung secara otomatis dan ditampilkan langsung dalam output dump (misalnya, averageFPS = 30.179).
... averageFPS = 30.179 ...Hitung FPS P90 dan P99: Untuk menemukan metrik P90 dan P99, Anda harus menganalisis totalFrames dan histogram waktu
presentToPresentyang disediakan dalam dump.totalFrames = 1000 ... 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=850 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=100 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=35 54ms=0 58ms=0 62ms=0 66ms=10 70ms=0 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=5 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=0A. Contoh Konseptual (Tabel Distribusi Kumulatif) Asumsikan sesi game Anda mencatat jumlah totalFrames 1.000. Untuk menemukan P90 dan P99, Anda menghitung nilai minimum milidetik saat jumlah frame kumulatif mencapai 900 frame (90%) dan 990 frame (99%), yang dihitung dari bucket milidetik terendah.
Waktu Render Frame (md) Jumlah Frame (Histogram) Jumlah Frame Kumulatif Status / Penghitungan Persentil 16 md 850 850 85,0% 33 md 100 950 95,0%
(Target P90 900 Tercapai! → 1000/33 = 30,3 FPS)50 md 35 985 98,5% 66 md 10 995 99,5%
(Target P99 990 Tercapai! → 1000/66 = 15,1 FPS)102 md 5 1.000 100% B. Logika Penerapan (Pseudocode) Jika Anda mengotomatiskan analisis ini menggunakan skrip Python atau parser log, logika untuk mengekstrak nilai P90 dan P99 dari histogram dapat diterapkan sebagai berikut:
# Define target thresholds based on total frame count p90_target = totalFrames * 0.90 p99_target = totalFrames * 0.99 cumulative_frames = 0 p90_fps = None p99_fps = None # Iterate through the parsed SurfaceFlinger histogram data (sorted by millisecond) for ms_bucket, frame_count in present_to_present_histogram: cumulative_frames += frame_count # Capture P90 when cumulative frames cross the 90% threshold if p90_fps is None and cumulative_frames >= p90_target: p90_fps = 1000 / ms_bucket # Capture P99 when cumulative frames cross the 99% threshold if p99_fps is None and cumulative_frames >= p99_target: p99_fps = 1000 / ms_bucket break # Optimization: stop iterating once both targets are foundHentikan perekaman: Setelah mengumpulkan semua informasi yang diperlukan, Anda harus menonaktifkan timestats menggunakan flag disable:
adb shell dumpsys SurfaceFlinger --timestats -disable
Sesi Lambat
Sesi Lambat mengidentifikasi masalah performa dunia nyata yang meluas. Sesi dianggap "lambat" jika lebih dari 25% frame turun di bawah nilai minimum (misalnya, 20 FPS). Meskipun berguna untuk menemukan masalah build penting, metrik ini saja tidak dapat menjamin pengalaman yang berkualitas tinggi dan berkelanjutan. Game mungkin menghindari nilai minimum Sesi Lambat, tetapi masih mengalami micro-stuttering yang mengganggu pengalaman 60 FPS yang lancar.
Meskipun berasal dari waktu render frame, 'Sesi Lambat' dan 'Kecepatan Frame' memiliki peran yang berbeda. Metrik FPS Rata-Rata, P90, dan P99 mengukur kualitas dan keberlanjutan performa, mendeteksi penurunan instan dan kecepatan yang tidak konsisten yang mungkin diabaikan oleh metrik Sesi Lambat.
Kesimpulan
Pengoptimalan performa yang berhasil memerlukan strategi yang komprehensif. Developer harus menggunakan Sesi Lambat sebagai radar utama untuk menangkap penurunan performa yang parah, lalu memeriksa FPS rata-rata, P90, dan P99 untuk mendiagnosis penyebab yang mendasarinya dan memverifikasi kelancaran gameplay yang sebenarnya. Dengan mengintegrasikan metrik ini, Anda dapat memastikan aplikasi Anda memberikan pengalaman pengguna yang konsisten, berkelanjutan, dan luar biasa.
Referensi lainnya
Untuk mempelajari lebih lanjut teknik pembuatan profil lanjutan, penerapan Frame Pacing API, dan strategi pengoptimalan khusus mesin, lihat dokumentasi developer Android resmi:
- Android Vitals: Sesi lambat: Pahami cara Google Play mengukur dan melaporkan periode rendering lambat yang berkelanjutan, yang secara langsung memengaruhi pengalaman pengguna. "Sesi lambat" didefinisikan sebagai sesi pengguna saat lebih dari 25% frame lambat (misalnya, membutuhkan waktu lebih dari 50 md, setara dengan 20 FPS).
- Developer Android: Mengoptimalkan Performa Game: Jelajahi hub pusat untuk pengoptimalan game Android. Panduan komprehensif ini mencakup praktik terbaik, alat pembuatan profil (seperti Android Performance Analyzer(APA) dan Perfetto) untuk membantu Anda memaksimalkan performa game secara keseluruhan.