grafik

Android Grafik HAL simgesi

Android çerçevesi, grafik sürücülerinin üretici uygulamalarıyla etkileşime giren 2B ve 3B için çeşitli grafik işleme API'leri sunar; bu nedenle, bu API'lerin daha yüksek düzeyde nasıl çalıştığını iyi anlamak önemlidir. Bu sayfa, bu sürücülerin üzerine kurulduğu grafik donanımı soyutlama katmanını (HAL) tanıtır.

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

Android grafik bileşenleri

Oluşturma API'si geliştiricilerinin kullandığı ne olursa olsun, her şey bir yüzey üzerinde işlenir. Yüzey, genellikle SurfaceFlinger tarafından tüketilen bir arabellek kuyruğunun üretici tarafını temsil eder. Android platformunda oluşturulan her pencere bir yüzey tarafından desteklenir. Oluşturulan tüm görünür yüzeyler, SurfaceFlinger tarafından ekranda birleştirilir.

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

görüntü işleme bileşenleri

Şekil 1. Yüzeyler nasıl işlenir

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

Görüntü Akışı Yapımcıları

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

Görüntü akışı tüketicileri

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

Diğer OpenGL ES uygulamaları, kamera önizleme görüntü akışını tüketen kamera uygulaması gibi görüntü akışlarını da kullanabilir. GL dışı uygulamalar da tüketici olabilir, örneğin ImageReader sınıfı.

Donanım Besteci

Görüntü alt sistemi için donanım soyutlaması. SurfaceFlinger, OpenGL ve GPU'dan işi boşaltmak için belirli kompozisyon çalışmalarını Hardware Composer'a devredebilir. SurfaceFlinger, başka bir OpenGL ES istemcisi gibi davranır. Bu nedenle, SurfaceFlinger, örneğin bir veya iki arabelleği üçüncü bir arabellekte aktif olarak birleştirdiğinde, OpenGL ES kullanıyor. Bu, birleştirme işlemini GPU'nun tüm hesaplamaları yürütmesinden daha düşük güç yapar.

Donanım Bestecisi HAL , işin diğer yarısını yürütür ve tüm Android grafik işlemelerinin merkezi noktasıdır. Donanım Oluşturucusu, biri VSYNC (bir diğeri tak ve çalıştırHDMI desteği için çalışırken takılabilir) olan olayları desteklemelidir.

Gralloc

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

Veri akışı

Android grafik işlem hattının bir 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 arabellekleri üreten oluşturuculardır. SurfaceFlinger besteci, Hardware Composer ise bestecidir.

arabellek kuyruğu

BufferQueues, Android grafik bileşenleri arasındaki yapıştırıcıyı sağlar. Bunlar, üreticiden tüketiciye kadar sabit tampon döngüsüne aracılık eden bir çift kuyruktur. Üreticiler arabelleklerini teslim ettikten sonra, SurfaceFlinger her şeyi ekrana yerleştirmekten 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örüntüleyen kamera uygulaması gibi bir OpenGL ES akışını görüntüleyen başka bir uygulamadır.

BufferQueue, bir arabellek havuzunu bir kuyrukla birleştiren ve işlemler arasında arabellekleri iletmek için Binder IPC'yi kullanan bir veri yapısıdır. Üretici arabirimi veya grafik arabellekleri oluşturmak isteyen birine ilettiğiniz şey IGraphicBufferProducer'dır ( SurfaceTexture'ın bir parçası). BufferQueue genellikle diğer görevlerin yanı sıra bir Yüzeye işlemek ve bir GL Tüketicisi ile tüketmek için kullanılır.

BufferQueue üç farklı modda çalışabilir:

Eşzamanlı benzeri mod - BufferQueue varsayılan olarak, üreticiden gelen her arabelleğin tüketiciye gittiği eşzamanlı benzeri bir modda çalışır. Bu modda hiçbir arabellek atılmaz. Üretici çok hızlıysa ve boşaltıldıklarından daha hızlı arabellekler oluşturursa, engelleyecek ve boş arabellekleri bekleyecektir.

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

Atma modu - Son olarak, BufferQueue, hata oluşturmak veya beklemek yerine eski arabellekleri atmak için yapılandırılabilir. Örneğin, bir doku görünümüne ve çizime mümkün olan en hızlı şekilde GL oluşturma işlemi yapılıyorsa, arabellekler 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. Bu nedenle, SurfaceFlinger, örneğin bir veya iki arabelleği üçüncü bir arabellekte aktif olarak birleştirdiğinde, OpenGL ES kullanıyor.

Hardware Composer HAL, işin diğer yarısını yürütür. Bu HAL, tüm Android grafik işleme için merkezi nokta görevi görür.