Swappy olarak da bilinen Android Frame Pacing kitaplığı Android Game SDK'nın bir parçasıdır. OpenGL ve Vulkan oyunlarının sorunsuz şekilde oluşturulmasına yardımcı olur ve doğru kare hızında gösterilebilir.
Kare hızı, bir oyunun mantığı ve oluşturma döngüsünü, işletim sisteminin görüntülü reklam alt sistemi ve temel ekran donanımı. Android ekranı alt sistem, yırtılma gibi bazı görsel kusurları önleyecek şekilde tasarlanmıştır. İlgili içeriği oluşturmak için kullanılan görüntülü reklam alt sistemi, şunları yaparak yırtılmayı önler:
- Geçmiş kareleri dahili olarak arabelleğe alma
- Geç kare gönderimlerini algılama
- Geç kare algılandığında geçerli kareyi göstermeye devam etme
Tutarsız kare görüntüleme süreleri, oyunun oluşturma döngüsünün şu hızda çalışmasından kaynaklanır: ve bunun için yerel ekran donanımının desteklediğinden farklı bir hız gerekir. Sorunlar ortaya çıkıyor Bir oyunun oluşturma döngüsü, temel ekran donanımı için çok yavaş çalıştığında görüntüleme sürelerinde tutarsızlığa neden olur. Örneğin, 30 fps, yerel olarak 60 fps'yi destekleyen bir cihazda oluşturmaya çalışır. Oyunun oluşturma döngüsü, ekranda tekrar eden bir karenin ekstra 16 ms. Bu tür bir ayrılma, kare süreleri arasında önemli tutarsızlıklar 33 ms, 16 ms, 49 ms vb. gibi. Aşırı karmaşık sahneler daha da karmaşık karelerin eksik olmasına yol açtığından dolayı bu soruna neden olabilir.
Kare İlerleme Hızı kitaplığı şu görevleri gerçekleştirir:
- Kısa oyun çerçeveleri nedeniyle oluşan takılmayı telafi eder.
- Karelerin zamanında sunulması için değil de zamanında sunulması için sunum zaman damgaları ekler. gerekiyor.
- Sunu zaman damgası uzantıları
EGL_ANDROID_presentation_time
veVK_GOOGLE_display_timing
kullanılır.
- Takılmaya ve gecikmeye neden olan uzun karelerde senkronizasyon parmaklıkları kullanır.
- Yerleştirme işlemleri uygulamada bekler. Bunlar, görüntülü reklam ardışık düzeninin bu adımları uygulamanız gerekir.
- Senkronize parmaklıkları (
EGL_KHR_fence_sync
veVkFence
) kullanır.
- Esneklik ve sorunsuz bir sunum sağlamak için yenileme hızı seçer, Cihazınız birden fazla yenileme hızını destekliyorsa.
- Frame'i kullanarak hata ayıklama ve profil çıkarmayla ilgili istatistikler sağlar istatistikler bölümüne bakın.
Kitaplığı, verilere göre farklı modlarda çalışacak şekilde nasıl yapılandıracağınızı Desteklenen çalışma modları başlıklı makaleyi inceleyin.
OpenGL oluşturucu veya Vulkan oluşturucu kullanarak uygulamak için bkz.
- Android Çerçeve İlerleme Hızı'nı OpenGL oluşturucunuza entegre etme
- Android Frame Pacing'i Vulkan oluşturucunuza entegre etme
Daha fazla bilgi için Uygun kare hızına ulaşma konusuna bakın.
Saniyedeki kare sayısı kısıtlama müdahalesi
Saniyedeki kare sayısı (FPS) kısıtlama müdahalesi, oyunların uygun bir FPS'de ilerlemesini sağlar. yalnızca platform tarafını kullanarak geliştiricilerin herhangi bir işlem yapması gerekmeden bölümü.
FPS kısıtlama müdahalesinin uygulanması için aşağıdaki bileşenler kullanılır:
Oyun Yöneticisi Hizmeti
GameManagerService bileşeni, tüm kullanıcı başına ve
oyun modu ve oyun müdahalesi hakkında oyun başına bilgi. FPS bilgileri
GameManagerService'in yanı sıra çözünürlüğünü küçültme faktörü gibi diğer müdahale bilgilerini
Her kullanıcı profili için <PACKAGE_NAME, Interventions>
eşlemesinde.
Oyun modu değiştirildiğinde veya müdahale güncellendiğinde FPS bilgilerine erişilir. CEVAP
UID
, her PACKAGE_NAME
ve kullanıcıya özeldir ve daha fazla çevrilebilir
SurfaceFlinger'a göndermek üzere bir <UID, Frame Rate>
çiftine dönüştürebilir.
Yüzey Fırlatıcı
SurfaceFlinger bileşeni zaten şunları destekliyor: kare hızı ekran yenileme hızının bir bölümü olduğu sürece bir uygulamanın FPS'sini kısıtlama. SurfaceFlinger, bir vsync durumunda, kısıtlanan için vsync'in geçerliliğini kontrol eder. vsync zaman damgasının bir uygulamadır. Kare hızı vsync ile aynı kadrajda değilse SurfaceFlinger devam eder.
Aşağıdaki şekilde GameManagerService ile SurfaceFlinger arasındaki etkileşim açıklanmaktadır:
![GameManagerService ile SurfaceFlinger arasındaki etkileşim](https://source.android.google.cn/static/docs/core/graphics/images/fps-throttling-flow.png?authuser=4&hl=tr)
Şekil 1. GameServiceManager ile SurfaceFlinger arasındaki etkileşim
SurfaceFinger, yeni bir değer ayarlamak için <UID, Frame Rate>
çifti eşlemesine sahiptir
kare hızı kısıtlama önceliği. UID
, kullanıcılar ve oyunlar arasında benzersizdir.
kullanıcı tek bir cihazdaki aynı oyundaki farklı kare hızı ayarlarına sahip olabilir.
GameServiceManager bir oyunun kare hızını geçersiz kılmak için SurfaceFlinger'ı çağırarak
UID. Bu mekanizmayla, SurfaceFlinger herhangi bir zamanda eşlemeyi günceller.
oyun modu değiştirildiğinde veya müdahale güncellendiğinde. SurfaceFlinger FPS değişikliğini uygular
tamponları buna göre kilitleyin.
FPS kısıtlama hakkında daha fazla bilgi edinmek için bkz. FPS kısıtlama tanıtımı.