Ortalama FPS
Android cihazlarda yüksek kaliteli bir oyun deneyimi sunmak için kare hızının sorunsuz ve kararlı olması çok önemlidir. Oyun performansını ölçerken deneyim hakkında temel bir fikir edinmek için ortalama FPS'yi temel değer olarak ölçmeniz gerekir. Harika bir oyun deneyimi sunmak için oyununuzu ortalama 60 FPS kare hızına ulaşacak şekilde optimize etmeniz gerekir.
Kararlılık için P90 ve P99 FPS
Ortalama 60 FPS ile sorunsuz bir oyun, aralıklı olarak takılma, mikro titreme ve öngörülemeyen giriş gecikmesi yaşayabilir. Bu durum, oyuncu deneyiminin kötü olmasına neden olur.
Bu nedenle, kare kararlılığı, ortalama kare hızını izlemek kadar önemlidir. Tutarlı temel değer ve takılma göstergesi olarak sırasıyla P90 ve P99 kare hızı metriklerini burada ölçmeniz gerekir. Bu metrikler, oyuncu deneyiminin sorunsuzluğunu optimize etmeniz için performansın "son kısmını" yakalar.
Metrikler
- Ortalama FPS (temel): Bu temel metrik, oyununuzun performansıyla ilgili genel bir temel sağlar. Standart bir karşılaştırma ölçütü olsa da ortalama hesaplama, aralıklı kare düşmelerinin ve mikro takılmaların tespit edilemeyeceği anlamına gelir. Bu nedenle, oyuncu deneyimini tek başına temsil etmek için yeterli değildir.
- P90 FPS (10. yüzdelik dilimde tutarlı temel): Bu, karelerinizin %90'ının bu tutarlı temeli aştığını ve yalnızca en yavaş %10'luk dilimdeki karelerin oluşturulmasının daha uzun sürdüğünü gösterir. P90 kare hızınız yüksekse ve ortalamanıza yakınsa oyun, oturumun büyük bir bölümünde tutarlı bir şekilde iyi çalışıyor demektir.
- P99 FPS (1. yüzdelik dilimde takılma göstergesi): Bu metrik, karelerinizin %99'unun bu takılma göstergesini aştığını ve özellikle karelerin en yavaş %1'lik kısmını izole ettiğini gösterir. Bu metrik, mikro takılmaları, öğe yükleme gecikmelerini ve görünür aksaklıklara neden olan ani öğe yoğunluklu oluşturma artışlarını yakalamak için çok önemlidir.
Örnekler
Ortalama FPS'nizi P90 ve P99 metrikleriyle karşılaştırarak bir oyunun temel davranışını doğru bir şekilde teşhis edebilirsiniz.
1. Senaryo: Optimum Eğri (Optimize Edilmiş Oyun)
- Ortalama: 60 FPS (16,6 ms)
- P90: 58 FPS (17,2 ms)
- P99: 52 FPS (19,2 ms)
- Analiz: Metrikler birbirine çok yakın. Oyun inanılmaz derecede akıcı ve tutarlı. Mikro takılmalar yoktur ve karelerin en kötü% 1'lik kısmı bile insan gözüyle fark edilemez.
2. Senaryo: Yük darboğazı (CPU/GPU sınırlı)
- Ortalama: 45 FPS (22,2 ms)
- P90: 40 FPS (25,0 ms)
- P99: 38 FPS (26,3 ms)
- Analiz: Ortalama kare hızı daha düşük ancak tutarlı. P99, ortalamaya kıyasla önemli ölçüde düşmüyor. Bu durum, sistemin grafik ayarları veya çözünürlük kısıtlamaları nedeniyle aşırı yüklendiğini gösterir. Oyun, takılıyormuş gibi değil de yavaşlıyormuş gibi görünür. Grafik ayarlarını düşürmek genellikle bu metrikleri eşit şekilde artırır.
3. senaryo: Kararsız 60 FPS (gölgelendirici derleme / öğe akışı takılmalar)
- Ortalama: 60 FPS (16,6 ms)
- P90: 45 FPS (22,2 ms)
- P99: 15 FPS (66,6 ms)
- Analiz: Bu, en kötü durum senaryosudur. Ortalama kare hızı mükemmel görünse de %99'luk yüzdelik dilim kritik bir sorunu ortaya çıkarıyor. 66,6 ms'de P99, oyunun aynı anda birden fazla kare boyunca tamamen donduğu anlamına gelir. Bu, genellikle CPU performans sorunlarından, öğe akışı gecikmelerinden (ör. yavaş RAM veya depolama) ya da gölgelendirici derlemesinden kaynaklanan ciddi aykırı değerlere işaret eder.
Ölçüm
Ortalama FPS, P90 ve P99'u etkili bir şekilde ölçmek için Android dumpsys surfaceflinger timestats komutunu kullanabilirsiniz. Bu araç, oluşturulan tüm katmanlar için ortalama FPS ve presentToPresent zamanlama histogramı sağlar. Bir karenin presentToPresent süresi, mevcut kare ile çizilen önceki kare arasındaki aralıktır.
Oyununuz için bu metrikleri toplama ve hesaplama ile ilgili adım adım talimatları aşağıda bulabilirsiniz:
Bilgi yakalamaya başlama: Bilgi yakalamaya başlamak için aşağıdaki komutu enable ve clear işaretleriyle çalıştırın:
adb shell dumpsys SurfaceFlinger --timestats -clear -enableDöküm bilgileri: Oyun yeterince uzun süre oynandıktan sonra, bilgileri çıkarmak için komutu döküm işaretiyle tekrar çalıştırın:
adb shell dumpsys SurfaceFlinger --timestats -dumpKatmana göre filtreleme: Dökülen bilgiler, SurfaceFlinger tarafından oluşturulan tüm katmanlar için veri sağlar.
layerName'ye göre filtreleyerek oyununuza karşılık gelen bölümü bulmanız gerekir (örneğin, layerName = SurfaceView[com.example.yourgame...]).layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833Ortalama FPS'yi belirleme: Her katmanın ortalama FPS'si otomatik olarak hesaplanır ve doğrudan döküm çıktısında gösterilir (örneğin, averageFPS = 30.179).
... averageFPS = 30.179 ...P90 ve P99 FPS'yi hesaplama: P90 ve P99 metriklerini bulmak için toplam çerçeve sayısını ve dökümde sağlanan
presentToPresentzamanlama histogramını analiz etmeniz gerekir.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. Kavramsal örnek (kümülatif dağılım tablosu) Oyun oturumunuzun toplam 1.000 kare kaydettiğini varsayalım. %90'lık dilimi ve %99'luk dilimi bulmak için, en düşük milisaniye aralığından başlayarak saydığınızda toplam kare sayısının sırasıyla 900 kareye (%90) ve 990 kareye (%99) ulaştığı milisaniye eşiklerini hesaplarsınız.
Kare süresi (ms) Kare Sayısı (Histogram) Kümülatif Kare Sayısı Yüzdelik Durum / Hesaplama 16ms 850 850 %85,0 33ms 100 950 %95,0
(900 hedefinin %90'ına ulaşıldı. → 1000/33 = 30,3 FPS)50ms 35 985 %98,5 66ms 10 995 %99,5
(990 hedefinin %99'u tamamlandı! → 1000/66 = 15,1 FPS)102ms 5 1.000 %100 B. Uygulama Mantığı (Sözde Kod) Bu analizi bir Python komut dosyası veya günlük ayrıştırıcı kullanarak otomatikleştiriyorsanız P90 ve P99 değerlerini histogramdan ayıklama mantığı aşağıdaki gibi uygulanabilir:
# 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 foundVeri toplamayı durdurma: Gerekli tüm bilgileri topladıktan sonra devre dışı bırakma işaretini kullanarak zaman istatistiklerini devre dışı bırakmanız gerekir:
adb shell dumpsys SurfaceFlinger --timestats -disable
Yavaş oturumlar
Yavaş oturumlar, yaygın gerçek dünya performans sorunlarını tanımlar. Karelerin% 25'inden fazlası bir eşiğin (örneğin, 20 FPS) altına düşerse oturum "yavaş" olarak kabul edilir. Bu metrik, derlemeyle ilgili kritik sorunları tespit etmek için yararlı olsa da tek başına yüksek kaliteli ve sürdürülebilir bir deneyimi garanti edemez. Bir oyun, Slow Session (Yavaş Oturum) eşiğini aşmayabilir ancak yine de 60 FPS'lik akıcı bir deneyimi tehlikeye atan mikro takılmalardan etkilenebilir.
Kare sürelerinden türetilmiş olsalar da "Yavaş Oturum" ve "Kare Hızı" farklı amaçlara hizmet eder. Ortalama, P90 ve P99 FPS metrikleri, performansın kalitesini ve sürdürülebilirliğini ölçer. Yavaş oturum metriğinin gözden kaçırabileceği anlık düşüşleri ve tutarsız hızı tespit eder.
Sonuç
Başarılı bir performans optimizasyonu için kapsamlı bir strateji gerekir. Geliştiriciler, ciddi performans düşüşlerini yakalamak için birincil radar olarak Yavaş Oturumlar'ı kullanmalı, ardından temel nedenleri teşhis etmek ve oyunun gerçek akıcılığını doğrulamak için ortalama FPS, P90 ve P99 değerlerini incelemelidir. Bu metrikleri entegre ederek uygulamanızın sürekli olarak sürdürülebilir ve olağanüstü bir kullanıcı deneyimi sunduğundan emin olabilirsiniz.
Ek kaynaklar
Gelişmiş profil oluşturma teknikleri, Frame Pacing API'sini uygulama ve motora özel optimizasyon stratejileri hakkında daha fazla bilgi edinmek için resmi Android geliştirici belgelerine göz atın:
- Android Vitals: Yavaş oturumlar: Google Play'in, kullanıcı deneyimini doğrudan etkileyen uzun süreli yavaş oluşturma dönemlerini nasıl ölçtüğünü ve bildirdiğini öğrenin. "Yavaş oturum", karelerin% 25'inden fazlasının yavaş olduğu (örneğin, 50 ms'den uzun sürdüğü, 20 FPS'ye eşdeğer) bir kullanıcı oturumu olarak tanımlanır.
- Android Geliştiricileri: Oyun Performansını Optimize Etme: Android oyun optimizasyonu için merkezi hub'ı keşfedin. Bu kapsamlı rehberde, oyununuzun genel performansını en üst düzeye çıkarmanıza yardımcı olacak en iyi uygulamalar ve profil oluşturma araçları (AGI ve Perfetto gibi) ele alınmaktadır.