Yavaş oturum, karelerin% 25'inden fazlasının yavaş olduğu oturumdur. Bir kare, önceki kareden 50 ms sonra (20 FPS'ye eşdeğer) gösterilmiyorsa yavaş sayılır. Android vitals, hedefi 34 ms (30 FPS'ye eşdeğer) olan ikinci bir Yavaş Oturumlar metriği de bildirir. Yavaş oturumlar özelliğini kullanarak, oyununuzun sorunsuz ve akıcı çalışması üzerinde büyük etkide bulunan kare hızı performansı hakkında bilgi edinebilirsiniz.
Play zamanla kullanıcıları telefonlarında 20 FPS'ye ulaşamayan oyunlardan uzaklaştırmaya başlayacaktır. Android vitals'ın yalnızca oyununuz bir dakika çalıştıktan sonra kare hızını izlemeye başladığını unutmayın.
Metrik hakkında daha fazla bilgi için Yardım Merkezimizi ziyaret edin.
CanvasFPS'yi ölçme ve yavaş kareleri tespit etme
Android dumpsys surfaceflinger timestats komutu, oluşturulan tüm katmanlar için ortalama FPS ve present to present zamanlama histogramı sağlar. Bir karenin present to present süresi, çizilen mevcut kare ile önceki kare arasındaki aralıktır. Oyununuzun FPS'sini toplamak için komutu kullanmayla ilgili adım adım talimatları aşağıda bulabilirsiniz:
Bilgi yakalamaya başlamak için komutu
enableveclearişaretleriyle çalıştırın:adb shell dumpsys SurfaceFlinger --timestats -clear -enableOyun yeterince uzun süre oynandıktan sonra bilgileri boşaltmak için komutu
dumpişaretiyle tekrar çalıştırın:adb shell dumpsys SurfaceFlinger --timestats -dumpDökülen bilgiler, SurfaceFlinger tarafından oluşturulan tüm katmanlar için toplam kare sayısını ve presentToPresent histogramını sağlar. Oyununuzun bölümünü
layerName'e göre filtreleyerek bulmanız gerekir:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833Oturumun yavaş kare hızı, her katmanın bilgilerine göre hesaplanabilir.
Örneğin, 20 FPS yavaş kare yüzdesi = (54 ms ile 1.000 ms arasındaki değerlerin toplamı) / toplamKare 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=0Her katmanın ortalama FPS'si de dökümde gösterilir:
... averageFPS = 30.179 ...Tüm bilgileri topladıktan sonra
disableişaretini kullanarak zaman istatistiklerini devre dışı bırakmanız gerekir:adb shell dumpsys SurfaceFlinger --timestats -disable
Yavaş karelerin nedenleri ve çözümleri
Bir karenin ekranda geliştiricinin hedefinden daha uzun süre gösterilmesinin veya oluşturulmasının birçok nedeni olabilir. Oyun CPU/GPU sınırlı olabilir. Veya cihaz aşırı ısınıyor ve termal kısıtlama durumunu etkinleştiriyor. Veya oyunun kare hızı ile cihazın ekran yenileme hızı arasında uyuşmazlık vardır.
Bu sorunları gidermek ve oyununuzun performansını artırmak için Android Frame Pacing (Swappy), Vulkan ve ADPF'yi kullanın.
Swappy nedir?
Swappy olarak da bilinen Android Frame Pacing kitaplığı, AGDK kitaplıklarının bir parçasıdır. Swappy, OpenGL ve Vulkan oyunlarının Android'de sorunsuz oluşturma ve doğru kare aralığı elde etmesine yardımcı olur.
Kare hızını düzenleme, bir oyunun mantık ve oluşturma döngüsünün, işletim sisteminin ekran alt sistemi ve temel ekran donanımıyla senkronize edilmesidir. Android ekran alt sistemi, ekran donanımı bir güncelleme sırasında yeni bir kareye geçtiğinde oluşabilecek görsel bozulmaları (yırtılma olarak bilinir) önlemek için tasarlanmıştır. Görüntü alt sistemi, bu eserleri önlemek için aşağıdakileri yapar:
- Geçmiş kareleri dahili olarak arabelleğe alır.
- Geç kare gönderimlerini algılar
- Geç kareler algılandığında geçmiş karelerin gösterimini tekrarlar.
Mir 2'nin yavaş oturum oranını% 40'tan%10'a düşürmek için Swappy'yi nasıl kullandığını öğrenin.
Swappy'yi yerel projelerde kullanma
Android Frame Pacing kitaplığını oyununuza entegre etmek için aşağıdaki kılavuzlara göz atın:
- Android Frame Pacing'i OpenGL oluşturucunuza entegre etme
- Android Frame Pacing'i Vulkan oluşturucunuza entegre etme
Unity oyun motorunda Swappy'yi kullanma
Unity, Android Frame Pacing'i motoruna entegre etti. Bu özelliği Unity 2019.2 veya sonraki sürümlerde etkinleştirmek için Android > Çözünürlük ve Sunum için Proje Ayarları > Player > Ayarlar bölümünde Optimize Edilmiş Kare Hızı onay kutusunu işaretleyin:
Alternatif olarak, Unity'nin kareleri eşit şekilde dağıtarak kare hızında daha az varyans oluşturmasını ve daha akıcı bir oyun deneyimi sunmasını sağlamak için mantık kodunuzda Optimize edilmiş kare aralama seçeneğini programatik olarak etkinleştirebilirsiniz.
Unreal oyun motorunda Swappy'yi kullanma
Unreal 4.25 ve sonraki sürümlerde, Android Game Development Kit'in bir parçası olan Android Frame Pacing Library entegre edilmiştir. Mobile Frame Pacing (Mobil Kare Hızı) makalesinde, Android Frame Pacing Library'nin nasıl etkinleştirileceği ve kare hızının C++ kodundan nasıl kontrol edileceği açıklanmaktadır.
Vulkan nedir?
Vulkan, cihazın grafik donanımı ile oyununuz arasındaki soyutlamayı en aza indirmek için tasarlanmış modern bir platformlar arası 3D grafik API'sidir. Vulkan, Android'deki birincil düşük seviyeli grafik API'sidir ve OpenGL ES'in yerini almıştır. OpenGL ES, Android'de desteklenmeye devam etse de artık aktif özellik geliştirme kapsamında değildir.
Vulkan, OpenGL ES'ye kıyasla aşağıdaki avantajları sunar:
- Grafik sürücüsünde daha düşük CPU ek yüküyle daha verimli bir mimari
- CPU performansını artırmaya yönelik yeni optimizasyon stratejileri
- OpenGL ES'de kullanılamayan yeni grafik özellikleri (ör. bağlayıcı içermeyen API'ler ve ışın izleme)
Yerel Android projelerinde Vulkan'ı kullanma
Android'de Vulkan'ı kullanmaya başlama codelab'inde, Vulkan oluşturma ardışık düzeninizi ayarlama ve ardından ekranda dokulu, dönen bir üçgen oluşturma adımları açıklanır. Oyun grafiklerinizi nasıl oluşturacağınızı öğrenmek için bu codelab'i kullanın.
Unity oyun motorunda Vulkan'ı kullanma
Unity'de otomatik cihaz seçimini etkinleştirmek için Otomatik Grafik API'si'ni yapılandırma adımlarını uygulayın.
Alternatif olarak, Otomatik Grafik API'si'ni devre dışı bırakıp Grafik API'leri listesinde Vulkan'ı en yüksek önceliğe alarak Vulkan'ı manuel olarak etkinleştirebilirsiniz. Unity 2021.1 veya önceki bir sürümü kullanıyorsanız Vulkan'ı kullanmanın tek yolu budur.
Belirli cihazlarda oyununuzun kullanacağı grafik API'si için başlatma zamanında öneriler sunmak üzere VkQuality Unity motoru eklentisini kullanın.
Unreal oyun motorunda Vulkan'ı kullanma
Vulkan grafik API'sini etkinleştirmek için Project Settings > Platforms > Android > Build'e (Proje Ayarları > Platformlar > Android > Derleme) gidin ve Support Vulkan'ı (Vulkan'ı Destekle) seçin. Hem Vulkan'ı Destekle hem de OpenGL ES3.2'yi Destekle'yi seçtiğinizde Unreal varsayılan olarak Vulkan'ı kullanır. Cihaz Vulkan'ı desteklemiyorsa Unreal, OpenGL ES 3.2'ye geri döner.
Belirli cihazlarda kötü davrandığı bilinen belirli Vulkan özelliklerini kullanıyorsanız bu cihazları hariç tutmak için BaseDeviceProfile.ini dosyanızı özelleştirebilirsiniz. BaseDeviceProfile.ini nasıl özelleştireceğinizi öğrenmek için Customizing Device Profiles and Scalability
for Android (Android için Cihaz Profillerini Özelleştirme ve Ölçeklenebilirlik) başlıklı makaleyi inceleyin. Yeni cihaz sürücüleri, daha önce bilinen kötü cihazları düzeltebileceğinden tüm optimizasyonları almak için BaseDeviceProfile.ini dosyanızı güncel tutun.
ADPF nedir?
Android Dynamic Performance Framework (ADPF), Android'deki dinamik termal, CPU ve GPU yönetim özelliklerine göre oyunları optimize eder. Odak noktası oyunlar olsa da bu özellikleri performans gerektiren diğer uygulamalar için de kullanabilirsiniz.
ADPF, oyunların ve performansı yoğun kullanan uygulamaların Android cihazların güç ve termal sistemleriyle daha doğrudan etkileşime girmesini sağlayan bir API setidir. Bu API'ler sayesinde Android sistemlerindeki dinamik davranışı izleyebilir ve oyun performansını, cihazların aşırı ısınmasına neden olmayacak şekilde sürdürülebilir bir düzeyde optimize edebilirsiniz.
ADPF'nin temel özellikleri şunlardır:
- Termal API: Uygulamanın, iş yükünü sürdürülemez hale gelmeden önce proaktif olarak ayarlayabilmesi için cihazın termal durumunu izleyin.
- CPU Performance Hint API: Android'in iş yükü için doğru performans ayarlarını (ör. CPU çalışma noktası veya çekirdek) seçmesine olanak tanıyan performans ipuçları sağlar.
- Game Mode API ve Game State API: Kullanıcının ayarlarına ve oyuna özel yapılandırmalara göre performans veya pil ömrü özelliklerine öncelik vererek oyun oynama optimizasyonunu etkinleştirin.
- Sabit Performans Modu: Dinamik CPU saat hızından etkilenmeyen ölçümler elde etmek için karşılaştırma sırasında bir cihazda sabit performans modunu etkinleştirin.
- Güç verimliliği modu: Oturuma, Performans İpucu Oturumu'ndaki iş parçacıklarının, performansa kıyasla güç verimliliğini tercih edecek şekilde güvenli bir şekilde planlanabileceğini bildirir. Android 15'te (API düzeyi 35) kullanılabilir.
ADPF'yi yerel Android projelerinde kullanma
Integrating Adaptability Features Into Your Native Game (Uyarlanabilirlik Özelliklerini Yerel Oyununuza Entegre Etme) adlı codelab, kendi hızınızda uygulayabileceğiniz adımlarla ADPF özelliklerini oyununuza entegre etmenize yardımcı olur. Codelab'in sonunda aşağıdaki özellikleri entegre etmiş olursunuz:
- Thermal API: Cihazın ısınma durumunu dinleyin ve cihaz ısınma nedeniyle performans kısıtlaması durumuna geçmeden önce tepki verin.
- Oyun Modu API'si: Oyuncuların optimizasyon tercihlerini (performansı en üst düzeye çıkarma veya pili koruma) anlayın ve buna göre ayarlama yapın.
- Game State API: Sisteme oyununuzun durumunu (yükleme, oynama, kullanıcı arayüzü vb.) bildirin. Sistem de kaynakları buna göre ayarlayabilir (G/Ç, CPU, GPU vb. hızlandırma).
- Performance Hint API: Sistemi, iş parçacığı modeliniz ve iş yükünüz hakkında bilgilendirin. Böylece sistem, kaynakları buna göre tahsis edebilir.
Unity oyun motorunda ADPF'yi kullanma
Unity'nin uyarlanabilir performansı, oyunlarını mobil cihazlarda, özellikle de çeşitli Android ekosisteminde optimize etmek isteyen oyun geliştiriciler için bir araçtır. Uyarlanabilir Performans, oyununuzun cihazın performansına ve termal özelliklerine anlık olarak uyum sağlamasına olanak tanıyarak sorunsuz ve verimli bir oyun deneyimi sunar.
Uyarlanabilir Performans Android sağlayıcısı, ADPF'yi Unity'de uygulama adımlarında size yol gösterir.
Unreal oyun motorunda ADPF'yi kullanma
- Eklentiyi indirin.
- Eklentiyi proje eklenti klasörüne kopyalayın.
- Unreal Engine düzenleyicisinde ADPF Unreal Engine eklentisini etkinleştirin.
- Unreal Editor'ü yeniden başlatma
- Oyunu geliştirme ve hazırlama
Unreal Engine için Android Dynamic Performance Framework(ADPF) eklentisi, kararlı performans sağlar ve termal kısıtlamayı önler. Eklentiyi GitHub'dan indirin. Bu eklenti, Unreal konsol değerlerini ayarlayarak özellikleri değiştirir.