Bu siteyi iyileştirmek için kullanılabilirlik anketimize katılın .
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Grafikler

Android Graphics HAL simgesi

Android çerçevesi, grafik sürücülerinin üretici uygulamalarıyla etkileşime giren 2D ve 3D için çeşitli grafik oluşturma API'leri sunar, bu nedenle bu API'lerin daha yüksek bir düzeyde nasıl çalıştığını iyi anlamak önemlidir. Bu sayfa, bu sürücülerin üzerine inşa edildiği grafik donanımı soyutlama katmanını (HAL) tanıtmaktadı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ıkları işleme ne olursa olsun, her şey bir yüzeyde 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östermektedir:

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 tamponlar üreten herhangi bir şey olabilir. Örnekler arasında OpenGL ES, Canvas 2D ve ortam 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ülebilen yüzeyleri tüketen ve Pencere Yöneticisi tarafından sağlanan bilgileri kullanarak bunları ekranda birleştiren sistem hizmeti 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ı, bir kamera önizleme görüntü akışını tüketen kamera uygulaması gibi görüntü akışlarını da tüketebilir. GL olmayan uygulamalar da tüketici olabilir, örneğin ImageReader sınıfı.

Donanım Oluşturucu

Görüntü alt sistemi için donanım soyutlaması. SurfaceFlinger, OpenGL ve GPU'dan iş yükünü boşaltmak için belirli kompozisyon çalışmalarını Hardware Composer'a devredebilir. SurfaceFlinger, başka bir OpenGL ES istemcisi gibi davranır. Dolayısıyla, SurfaceFlinger bir veya iki tamponu aktif olarak üçte birine birleştirirken, örneğin OpenGL ES kullanıyor. Bu, birleştirme işlemini GPU'nun tüm hesaplamaları yürütmesine göre daha düşük güç yapar.

Hardware Composer 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şturucu, biri VSYNC (diğeri tak ve çalıştırHDMI desteği için çalışırken takıp çıkar) olayları desteklemelidir.

Gralloc

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

Veri akışı

Android grafik ardışık düzeninin 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ı arabirimi gibi grafik arabellekleri üreten oluşturuculardır. SurfaceFlinger, besteci ve Hardware Composer, bestecidir.

BufferQueue

BufferQueues, Android grafik bileşenleri arasındaki yapıştırıcıyı sağlar. Bunlar, üreticiden tüketiciye giden 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ışı üreticileriyle 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 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üketicisi ile birlikte kullanmak için kullanılır.

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

Eşzamanlı benzeri mod - BufferQueue, varsayılan olarak eşzamanlı benzeri bir modda çalışır, burada üreticiden gelen her arabelleğin tüketiciden çıkmasıdır. Bu modda hiçbir zaman arabellek atılmaz. Ve eğer üretici çok hızlıysa ve tamponları boşaltıldıklarından daha hızlı oluşturursa, ücretsiz tamponları bloke edecek ve bekleyecektir.

Engellemesiz mod - BufferQueue, bu durumlarda bir arabellek beklemek yerine bir hata oluşturduğu engellemesiz bir 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ımlarında olası kilitlenmelerden kaçınmak 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şturma işlemini bir doku görünümüne ve mümkün olduğunca hızlı bir şekilde çizim yapılıyorsa, tamponlar kaldırılmalıdır.

Bu işin çoğunu yürütmek için SurfaceFlinger, yalnızca başka bir OpenGL ES istemcisi gibi davranır. Dolayısıyla, SurfaceFlinger bir veya iki tamponu aktif olarak üçüncüye birleştirirken, örneğin OpenGL ES kullanıyor.

Hardware Composer 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.