Yavaş Oturumlar, Google Play Console'daki yeni bir Android vitals metriğidir. Yavaş oturum, karelerin% 25'inden fazlasının yavaş olduğu oturumdur. Bir kare, önceki karedenden 50 ms'den kısa bir süre sonra sunulmazsa yavaş sayılır (20 FPS'ye karşılık gelir). Android vitals, 34 ms (30 FPS'ye eşdeğer) hedefi olan ikinci bir Yavaş Oturumlar metriği de raporlar. 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.

FPS'yi ölçme ve yavaş kareleri algılama
Android dumpsys surfaceflinger timestats
komutu, oluşturulmakta olan tüm katmanlar için ortalama FPS ve mevcuttan mevcut zamanlama histogrami sağlar. Bir karenin mevcuttan mevcuta süresi, geçerli kare ile çizilen önceki kare arasındaki aralıktır. Oyununuzun FPS'sini toplamak için komutu kullanmayla ilgili adım adım açıklamaları aşağıda bulabilirsiniz:
Bilgi toplamaya başlamak için komutu
enable
veclear
işaretleriyle çalıştırın:adb shell dumpsys SurfaceFlinger --timestats -clear -enable
Oyun yeterince uzun oynandığında, bilgileri dökmek için komutu
dump
işaretiyle tekrar çalıştırın:adb shell dumpsys SurfaceFlinger --timestats -dump
Dökümü yapılan bilgiler, SurfaceFlinger tarafından oluşturulan tüm katmanlar için toplam kare sayısını ve presentToPresent histogramını sağlar.
layerName
'e göre filtreleyerek oyununuzun bölümünü bulmanız gerekir:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
Oturumdaki 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 sayısı 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=0
Her katmanın ortalama FPS'si de dökümde gösterilir:
... averageFPS = 30.179 ...
Tüm bilgileri topladıktan sonra
disable
işaretini kullanarak zaman istatistiklerini devre dışı bırakmanız gerekir:adb shell dumpsys SurfaceFlinger --timestats -disable
Yavaş kare sayısı nedenleri ve çözümleri
Bir karenin ekranda geliştiricinin hedefinden daha uzun süre gösterilmesinin veya oluşturulmasının birçok nedeni vardır. Oyun CPU/GPU sınırına ulaşmış olabilir. Veya cihaz aşırı ısınıyor ve termal durumu kısıtlıyor. Ya da oyun kare hızıyla cihazın ekran yenileme hızında bir uyuşmazlık olabilir.
Bu sorunları gidermek ve oyununuzun performansını artırmak için Android kare hızlandırma (Swappy), Vulkan ve ADPF'yi kullanın.
Swappy nedir?
Swappy olarak da bilinen Android kare ilerleme 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 hızına ulaşmasına yardımcı olur.
Kare hızı, bir oyunun mantığının ve oluşturma döngüsünün bir işletim sisteminin ekran alt sistemi ve temel ekran donanımıyla senkronize edilmesidir. Android görüntü alt sistemi, ekran donanımı bir güncellemenin ortasında yeni bir kareye geçtiğinde ortaya çıkabilecek görsel kusurları (yırtılma olarak bilinir) önlemek için tasarlanmıştır. Görüntü alt sistemi, bu kusurları önlemek için aşağıdakileri yapar:
- Geçmiş kareleri dahili olarak arabelleğe alır.
- Geç gönderilen kareleri algılar
- Geç kareler algılandığında geçmiş karelerin görüntülenmesini 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 kare hızını OpenGL oluşturma aracınıza entegre etme
- Android kare hızlandırmayı Vulkan oluşturma aracınıza entegre etme
Swappy'yi Unity oyun motorunda kullanma
Unity, Android Frame Pacing'i motoruna entegre etmiştir. Bu özelliği Unity 2019.2 veya sonraki sürümlerde etkinleştirmek için Android > Çözünürlük ve Sunma için Proje Ayarları > Oynatıcı > Ayarlar bölümündeki Optimize Edilmiş Kare Hızı onay kutusunu işaretleyin:

Alternatif olarak, Unity'nin kare hızında daha az varyasyon olması için kareleri eşit şekilde dağıtmasına ve daha akıcı bir oyun deneyimi oluşturmasına izin vermek üzere mantık kodunuzda Optimize Edilmiş Kare Hızı seçeneğini programatik olarak etkinleştirebilirsiniz.
Swappy'yi Unreal oyun motorunda kullanma
Unreal 4.25 ve sonraki sürümler, Android Game Development Kit'in bir parçası olan Android Frame Pacing Library'yi entegre eder. Mobil kare hızlandırma makalesinde, Android kare hızlandırma kitaplığının nasıl etkinleştirileceği ve kare hızlandırmanın C++ kodundan nasıl kontrol edileceği açıklanmaktadır.
Vulkan nedir?
Vulkan, cihaz grafik donanımı ile oyununuz arasındaki soyutlama işlemini en aza indirmek için tasarlanmış modern bir platformlar arası 3D grafik API'sidir. Vulkan, Android'deki birincil düşük düzey grafik API'sidir ve OpenGL ES'in yerini almıştır. OpenGL ES, Android'de hâlâ desteklenmektedir ancak artık özellik geliştirmesi etkin değildir.
Vulkan, OpenGL ES'ye kıyasla aşağıdaki avantajlara sahiptir:
- Grafik sürücüsünde daha düşük CPU yükü olan daha verimli bir mimari
- CPU performansını artıracak yeni optimizasyon stratejileri
- OpenGL ES'de kullanılamayan yeni grafik özellikleri (ör. bağlayıcısız API'ler ve ışın izleme)
Vulkan'ı yerel Android projelerinde kullanma
Android'de Vulkan'ı kullanmaya başlama kod deneme çalışmasında, Vulkan oluşturma ardışık düzeninizi ayarlama ve ardından ekranda dokulu, dönen bir üçgen oluşturma konusunda size yol gösterilir. Oyun grafiklerinizi nasıl oluşturacağınızı öğrenmek için codelab'i kullanın.
Unity oyun motorunda Vulkan'ı kullanma
Unity'de otomatik cihaz seçimini etkinleştirmek için Auto Graphics API'yi yapılandırma adımlarını uygulayın.

Alternatif olarak, Auto Graphics API'yi devre dışı bırakarak Vulkan'ı manuel olarak etkinleştirebilir ve Vulkan'ı Graphics APIs listesinde en yüksek önceliğe koyabilirsiniz. Unity 2021.1 veya önceki bir sürümü kullanıyorsanız Vulkan'ı kullanmanın tek yolu budur.

Oyununuzun belirli cihazlarda kullanacağı grafik API'si için başlatma zamanında öneriler sağlamak üzere VkQuality Unity motor eklentisini kullanın.
Unreal oyun motorunda Vulkan'ı kullanma
Vulkan grafik API'sini etkinleştirmek için Proje Ayarları > Platformlar > Android > Derleme'ye gidin ve Vulkan'ı destekle'yi 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ü performans gösterdiği bilinen belirli Vulkan özelliklerini kullanıyorsanız BaseDeviceProfile.ini
dosyanızı bu cihazları hariç tutacak şekilde özelleştirebilirsiniz. BaseDeviceProfile.ini
'yi nasıl özelleştireceğinizi öğrenmek için Android için Cihaz Profillerini Özelleştirme ve Ölçeklenebilirlik başlıklı makaleyi inceleyin. Yeni cihaz sürücüleri, daha önce bilinen hatalı cihazları düzeltebileceğinden tüm optimizasyonlardan yararlanmak için BaseDeviceProfile.ini dosyanızı güncel tutun.
ADPF nedir?
Android Dinamik Performans Çerçevesi (ADPF), oyunları Android'deki dinamik termal, CPU ve GPU yönetim özelliklerine göre optimize eder. Odak noktası oyunlar olsa da bu özellikleri performans açısından yoğun olan diğer uygulamalarda da kullanabilirsiniz.
ADPF, oyunların ve performans açısından yoğun uygulamaların Android cihazların güç ve termal sistemleriyle daha doğrudan etkileşime girmesine olanak tanıyan bir API grubudur. Bu API'ler sayesinde Android sistemlerindeki dinamik davranışı izleyebilir ve oyun performansını, cihazların aşırı ısınmasına neden olmayacak sürdürülebilir bir düzeyde optimize edebilirsiniz.
ADPF'nin başlıca özellikleri şunlardır:
- Termal API: Uygulamanın sürdürülemez hale gelmeden önce iş yükünü proaktif olarak ayarlayabilmesi için cihazın termal durumunu izleyin.
- CPU Performans İpucu API'si: Android'in iş yükü için doğru performans ayarlarını (ör. CPU çalışma noktası veya çekirdeği) seçmesine olanak tanıyan performans ipuçlarını sağlayın.
- Game Mode API ve Game State API: Kullanıcı ayarlarına ve oyuna özgü yapılandırmalara göre performansa veya pil ömrü özelliklerine öncelik vererek oyun oynama optimizasyonunu etkinleştirin.
- Sabit Performans Modu: Dinamik CPU saati tarafından değiştirilmeyen ölçümler elde etmek için karşılaştırma sırasında cihazda sabit performans modunu etkinleştirin.
- Enerji Verimliliği Modu: Oturuma, Performans İpucu Oturumundaki iş parçacıklarının performans yerine enerji 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
Uyumluluk özelliklerini yerel oyununuza entegre etme kod deneme çalışması, kendi hızınızda uygulayabileceğiniz adımlarla ADPF özelliklerini oyununuza entegre etme konusunda size yol gösterir. Bu kod laboratuvarının sonunda aşağıdaki özellikleri entegre etmiş olacaksınız:
- Termal API: Cihazın termal durumunu dinleyin ve cihaz termal kısıtlama durumuna girmeden önce tepki verin.
- Oyun Modu API'si: Oyuncu optimizasyon tercihlerini (performansı en üst düzeye çıkarma veya pili koruma) anlayın ve buna göre ayarlayın.
- Game State API: Sistemin oyununuzun durumunu (yükleme, oynama, kullanıcı arayüzü vb.) bilmesini sağlayın. Böylece sistem kaynakları buna göre ayarlayabilir (G/Ç, CPU veya GPU'yu artırabilir).
- Performans İpucu API'si: Sistemin kaynakları buna göre ayırabilmesi için sistemle iş parçacığı modelinizi ve iş yükünüzü paylaşın.
ADPF'yi Unity oyun motorunda kullanma
Unity'nin Uyarlanabilir Performansı, oyunlarını mobil cihazlarda, özellikle de çeşitli Android ekosisteminde optimize etmek isteyen oyun geliştiricileri 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 eklentisi klasörüne kopyalayın
- Unreal düzenleyicisinde ADPF Unreal Engine eklentisini etkinleştirme
- Unreal düzenleyiciyi yeniden başlatma
- Oyunu oluşturma ve pişirme
Unreal Engine için Android Dinamik Performans Çerçevesi(ADPF) eklentisi, kararlı performans sağlar ve termal kısıtlamayı önler. GitHub'dan eklentiyi indirin. Bu eklenti, Unreal konsol değerleri ayarlayarak özellikleri değiştirir.