Google, Siyah topluluklar için ırksal eşitliği ilerletmeye kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Grafik

Android Grafik HAL simgesi

Android çerçevesi, 2D ve 3D için grafik sürücülerinin üretici uygulamaları ile etkileşime giren çeşitli grafik oluşturma API'leri sunar, bu nedenle bu API'lerin daha yüksek bir seviyede nasıl çalıştığı konusunda iyi bir anlayışa sahip olmak önemlidir. Bu sayfada, bu sürücülerin oluşturulduğu grafik donanımı soyutlama katmanı (HAL) tanıtılmaktadır.

Uygulama geliştiricileri görüntüleri ekrana üç şekilde çizer: Canvas , OpenGL ES veya Vulkan ile .

Android grafik bileşenleri

API geliştiricilerinin kullandığı görüntü ne olursa olsun, her şey bir "yüzeye" dönüştürülür. Yüzey, genellikle SurfaceFlinger tarafından tüketilen bir tampon kuyruğunun üretici tarafını temsil eder. Android platformunda oluşturulan her pencere bir yüzeyle desteklenir. Oluşturulan tüm görünür yüzeyler SurfaceFlinger tarafından ekrana birleştirilir.

Aşağıdaki şema temel bileşenlerin birlikte nasıl çalıştığını göstermektedir:

görüntü oluşturma bileşenleri

Şekil 1. Yüzeylerin nasıl oluşturulduğu

Ana bileşenler aşağıda açıklanmıştır:

Görüntü Akışı Üreticileri

Bir görüntü akışı üreticisi, tüketim için grafik tamponları üreten herhangi bir şey olabilir. Örnekler arasında OpenGL ES, Canvas 2D ve medya sunucusu video kod çözücüleri bulunur.

Görüntü Akışı Tüketicileri

Görüntü akışlarının en yaygın tüketicisi, halihazırda görünür olan yüzeyleri tüketen ve Pencere Yöneticisi tarafından sağlanan bilgileri kullanarak bunları ekranda birleştiren sistem hizmeti olan SurfaceFlinger'dir. SurfaceFlinger, ekranın içeriğini değiştirebilen tek hizmettir. SurfaceFlinger, bir grup yüzey oluşturmak için OpenGL ve Donanım Oluşturucusu'nu kullanır.

Kamera önizleme görüntü akışını tüketen kamera uygulaması gibi diğer OpenGL ES uygulamaları da görüntü akışlarını tüketebilir. GL olmayan uygulamalar da tüketiciler olabilir, örneğin ImageReader sınıfı.

Donanım Oluşturucusu

Ekran alt sistemi için donanım soyutlaması. SurfaceFlinger, OpenGL ve GPU'dan işi boşaltmak için belirli kompozisyon çalışmalarını Donanım Bestecisine devredebilir. SurfaceFlinger başka bir OpenGL ES istemcisi gibi davranır. Yani SurfaceFlinger aktif olarak bir veya iki tamponu üçte birine birleştirirken, örneğin OpenGL ES kullanıyor. Bu, GPU'nun tüm hesaplamaları gerçekleştirmesinden daha düşük güç birleştirme yapar.

Donanım Bestecisi HAL , işin diğer yarısını yürütür ve tüm Android grafik oluşturma için merkezi noktadır. Donanım Oluşturucusu'nun biri VSYNC (diğeri tak ve çalıştırHDMI desteği için hotplug) olan olayları desteklemelidir.

Gralloc

Görüntü üreticileri tarafından talep edilen belleği tahsis etmek için grafik bellek ayırıcısına (Gralloc) ihtiyaç vardır. Ayrıntılar için, bkz. Gralloc HAL .

Veri akışı

Android grafik hattının tasviri için aşağıdaki şemaya bakın:

grafik veri akışı

Şekil 2. Android üzerinden grafik veri akışı

Soldaki nesneler, ana ekran, durum çubuğu ve sistem kullanıcı arayüzü gibi grafik tamponları üreten oluşturuculardır. SurfaceFlinger bestecidir ve Donanım Composer bestecidir.

BufferQueue

BufferQueues, Android grafik bileşenleri arasında tutkal sağlar. Bunlar, üreticiden tüketiciye arabelleklerin sabit döngüsüne aracılık eden bir çift kuyruktur. Yapımcılar arabelleklerini teslim ettikten sonra, SurfaceFlinger her şeyi ekrana toplamaktan sorumludur.

BufferQueue iletişim süreci için aşağıdaki şemaya bakın.

BufferQueue iletişim süreci

Şekil 3. BufferQueue iletişim süreci

BufferQueue, görüntü akışı üreticilerini ve görüntü akışı tüketicilerini birbirine bağlayan mantığı içerir. Görüntü üreticilerinin bazı örnekleri, kamera HAL veya OpenGL ES oyunları tarafından üretilen kamera önizlemeleridir. Görüntü tüketicilerinin bazı örnekleri SurfaceFlinger veya kamera vizörünü gösteren kamera uygulaması gibi OpenGL ES akışını görüntüleyen başka bir uygulamadır.

BufferQueue, bir tampon havuzunu bir kuyrukla birleştiren ve arabellekleri işlemler arasında geçirmek için Binder IPC kullanan bir veri yapısıdır. Üretici arayüzü veya grafik arabellekleri oluşturmak isteyen birine ilettiğiniz şey IGraphicBufferProducer ( SurfaceTexture'ın bir parçasıdır). BufferQueue genellikle bir Yüzeyde renderleme yapmak ve diğer görevlerin yanı sıra bir GL Tüketicisi ile tüketmek için kullanılır. BufferQueue üç farklı modda çalışabilir:

Senkron benzeri mod - BufferQueue varsayılan olarak, üreticiden gelen her arabelleğin tüketicide dışarı çıktığı senkronize bir modda çalışır. Bu modda hiçbir arabellek atılmaz. Ve eğer üretici çok hızlıysa ve tahliye edildiklerinden daha hızlı tamponlar oluşturursa, serbest tamponları engelleyecek ve bekleyecektir.

Engellemeyen mod - BufferQueue, bu durumlarda bir tampon beklemek yerine bir hata oluşturduğu, engellemeyen bir modda da çalışabilir. Bu modda da hiçbir arabellek atılmaz. Bu, uygulama yazılımında grafik çerçevesinin karmaşık bağımlılıklarını anlayamayabilecek olası kilitlenmeleri önlemek için kullanışlıdır.

Silme modu - Son olarak, BufferQueue hata üretmek veya beklemek yerine eski arabellekleri atacak şekilde yapılandırılabilir. Örneğin, bir doku görünümüne GL çizimini gerçekleştiriyor ve mümkün olduğunca çabuk çizim yapıyorsanız, tamponlar bırakılmalıdır.

Bu çalışmanın çoğunu yürütmek için SurfaceFlinger başka bir OpenGL ES istemcisi gibi davranır. Yani SurfaceFlinger aktif olarak bir veya iki tamponu üçte birine birleştirirken, örneğin OpenGL ES kullanıyor.

Donanım Bestecisi HAL, işin diğer yarısını yürütür. Bu HAL, tüm Android grafik oluşturma için merkezi nokta görevi görür.