İstemci çerçeve arabelleği yönetimi

Android 13 sürümünden itibaren yeni çerçeve arabellekleri, istemci bileşimleri, ekran çözünürlüğü her değiştiğinde ayrılır. Bu SurfaceFlinger tarafından bir sonraki inverify döngüsünde ayırma işlemi gerçekleştirilir tespit edebilirsiniz.

Çözünürlük geçişleri sırasında çerçeve arabelleği yönetimi

Çözünürlük değişiklikleri aşağıdakilerden biri nedeniyle gerçekleşir iki senaryo vardır:

  • Bir hotplug etkinliği, Donanım Oluşturucu (HWC) tarafından başlatılır ve harici bir cihazdan farklı bir varsayılan çözünürlüğe sahip farklı bir harici ekrana görüntüleyin.

    Bir hotspot etkinliği sırasında eski çerçeve arabelleklerinin tutma yerleri serbest bırakılır eski görüntülü reklam verileri ayrıldığında.

  • SurfaceFlinger tarafından başlatılan bir görüntü modu geçişi. Bu geçiş, Kullanıcı, kullanıcı ayarlarıyla çözünürlüğü değiştirirse veya bir uygulama preferredDisplayModeId ile çözünürlüğü değiştirir.

    Görüntüleme modu geçişi sırasında, mevcut istemci çerçeve arabelleklerine yönelik tutma yerleri setActiveConfig çağrılmadan önce SurfaceFlinger tarafından serbest bırakılır veya setActiveConfigWithConstraints.

Şu özelliklere sahip cihazlarda, bellek bölünmesi gibi ciddi sorunları önlemek için: eski ve yeni çerçeve arabellekleri için yeterli bellek ayırmadığından, ve HWC'nin eski kare arabelleklerini kullanmayı bıraktığını ve aşağıdaki durumlarda gösterildiği gibi, bu framebuffer'lara işler:

Herkese açık kullanıcı adlarının serbest bırakılması, çerçeve arabelleği belleğinin tamamen ayrılmasına olanak tanır. SurfaceFlinger'ın gerçekleştirdiği yeni çerçeve arabelleklerinin ayrılmasından önce sırasındaki geçersiz kılma döngüsünde geçerlidir.

Çerçeve arabelleği yönetimi için öneriler

HWC, herkese açık kullanıcı adlarını eski çerçeve arabelleklerine zamanında vermezse yeni çerçeve arabelleği ayırma, eski çerçeve arabelleğinden önce gerçekleşir satış konumu. Bu, yeni ayırma işlemi başarısız olduğunda önemli sorunlara yol açabilir başka nedenler olabilir. Daha da kötüsü HWC bu tutma yerlerini hiç serbest bırakmaz. Bellek sızıntısı meydana gelir.

Ciddi ayırma hatalarını önlemek için aşağıdaki önerileri uygulayın:

  • HWC'nin, yeni oluşturulana kadar eski çerçeve arabelleklerini kullanmaya devam etmesi çerçeve arabellekleri sağlandığında yeterli bellek ayırmak hem eski hem de yeni çerçeve arabelleğine almalısınız ve başka algoritmalar da ekleyebilir.

  • grafik arabelleğinin geri kalanına ulaşın. Bu önemlidir çünkü çerçeve arabelleklerin ayrılması ve yeniden paylaştırılması gibi, üçüncü taraf bir süreç ayırmaya çalışın. Aynı grafik bellek havuzu çerçeve arabelleği tarafından kullanılır ve grafik belleği doluysa üçüncü taraf işlemi, daha önce bir çerçeve arabelleği tarafından ayrılmış grafik belleğini işgal edebilir çerçeve arabelleğinin yeniden ayrılması için yetersiz bellek bırakır veya parçalamaya çalışın.

Çerçeve arabelleği yönetimini test edin

OEM'lerin aşağıdaki şekilde açıklandığı gibi ekran çözünürlüğünü değiştirin:

  • Hotplug etkinlikleri için iki farklı ekranı çıkarıp tekrar bağlamak için kullanılmasını sağlar.

  • Mod anahtarları için ModeSwitchingTestActivity CTS'yi kullanın Framebuffer bellek davranışını test etmek için bir mod anahtarı başlatmaya yönelik doğrulayıcı testi. Bu test, tespit edilmesi zor sorunları görsel olarak belirleyebilir. daha fazla bilgi edindiniz.