
Android çerçevesi, üreticinin grafik sürücüleri uygulamalarıyla etkileşime giren 2D ve 3D 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 sayfada, bu sürücülerin üzerine kurulduğ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
Oluşturma API'si geliştiricilerinin kullandığı şey ne olursa olsun, her şey bir yüzey üzerinde oluşturulur. 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 desteklenmektedir. Oluşturulan tüm görünür yüzeyler SurfaceFlinger tarafından ekranda birleştirilir.
Aşağıdaki şemada temel bileşenlerin birlikte nasıl çalıştığı gösterilmektedir:

Şekil 1. Yüzeyler nasıl oluşturulur?
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 arabellekleri üreten herhangi bir şey olabilir. Örnekler arasında OpenGL ES, Canvas 2D ve mediaserver video kod çözücüleri yer alır.
Görüntü akışı tüketicileri
Görüntü akışlarının en yaygın tüketicisi, mevcut 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'dır. 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.
Kamera ön izleme görüntü akışını tüketen kamera uygulaması gibi diğer OpenGL ES uygulamaları da görüntü akışlarını tüketebilir. ImageReader sınıfı gibi GL dışı uygulamalar da tüketici olabilir.
Donanım Oluşturucu
Görüntü alt sistemi için donanım soyutlaması. SurfaceFlinger, işi OpenGL ve GPU'dan boşaltmak için belirli kompozisyon çalışmalarını Donanım Oluşturucuya devredebilir. SurfaceFlinger, başka bir OpenGL ES istemcisi gibi davranır. Dolayısıyla, SurfaceFlinger aktif olarak bir veya iki arabelleği üçüncüde birleştirirken, OpenGL ES kullanıyor. Bu, birleştirme işlemini GPU'nun tüm hesaplamayı yürütmesinden daha düşük güç haline getirir.
Donanım Oluşturucu HAL, işin diğer yarısını yürütür ve tüm Android grafik oluşturma işlemlerinin merkezi noktasıdır. Donanım Oluşturucusu, biri VSYNC olan (diğeri tak ve çalıştır HDMI desteği için çalışırken takılabilen) olayları desteklemelidir.
Gralloc
Görüntü üreticilerinin talep ettiği 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 işlem hattının bir tasviri için aşağıdaki şemaya bakın:

Ş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 bestecidir ve Hardware Composer bestecidir.
Tampon Kuyruğu
BufferQueues, Android grafik bileşenleri arasında birleştirici görevi görür. Bunlar, üreticiden tüketiciye kadar sürekli tampon döngüsüne aracılık eden bir çift kuyruktur. Üreticiler arabelleklerini teslim ettikten sonra SurfaceFlinger her şeyin ekranda birleştirilmesinden sorumludur.
BufferQueue iletişim süreci için aşağıdaki şemaya bakın.

Ş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üketicilerine örnek olarak SurfaceFlinger veya kamera vizörünü görüntüleyen kamera uygulaması gibi OpenGL ES akışını görüntüleyen başka bir uygulama verilebilir.
BufferQueue, arabellek havuzunu bir kuyrukla birleştiren ve işlemler arasında arabellekleri geçirmek için Binder IPC'yi kullanan bir veri yapısıdır. Üretici arayüzü veya grafik arabellekleri oluşturmak isteyen birine ilettiğiniz şey IGraphicBufferProducer'dır ( SurfaceTexture'ın bir parçası). BufferQueue, diğer görevlerin yanı sıra genellikle bir Yüzeye işlemek ve bir GL Tüketici 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 çıktığı eşzamanlı benzeri bir modda çalışır. Bu modda hiçbir zaman arabellek atılmaz. Üretici çok hızlıysa ve boşaltıldığından daha hızlı arabellekler oluşturursa, engelleyecek ve boş arabellekleri bekleyecektir.
Engellemesiz mod - BufferQueue, bu durumlarda arabellek beklemek yerine hata ürettiği engellemesiz modda da çalışabilir. Bu modda da hiçbir zaman 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 atacak şekilde yapılandırılabilir. Örneğin, GL oluşturmayı bir doku görünümüne ve çizime mümkün olduğu kadar hızlı bir şekilde gerçekleştiriyorsanız, ara belleklerin bırakılması gerekir.
Bu işin çoğunu yürütmek için SurfaceFlinger, başka bir OpenGL ES istemcisi gibi davranır. Dolayısıyla, SurfaceFlinger aktif olarak bir veya iki arabelleği üçüncüde birleştirirken, 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şlemlerinin merkezi noktası görevi görür.