grafis

Ikon HAL Grafik Android

Kerangka kerja Android menawarkan berbagai API rendering grafis untuk 2D dan 3D yang berinteraksi dengan implementasi produsen driver grafis, jadi penting untuk memiliki pemahaman yang baik tentang cara kerja API tersebut di tingkat yang lebih tinggi. Halaman ini memperkenalkan lapisan abstraksi perangkat keras grafis (HAL) di mana driver tersebut dibangun.

Pengembang aplikasi menggambar gambar ke layar dengan tiga cara: dengan Canvas , OpenGL ES , atau Vulkan .

Komponen grafis Android

Apa pun yang digunakan pengembang API rendering, semuanya dirender ke permukaan . Permukaan mewakili sisi produsen dari antrian buffer yang sering digunakan oleh SurfaceFlinger. Setiap jendela yang dibuat pada platform Android didukung oleh permukaan. Semua permukaan yang terlihat yang dirender digabungkan ke layar oleh SurfaceFlinger.

Diagram berikut menunjukkan bagaimana komponen utama bekerja bersama:

komponen rendering gambar

Gambar 1. Bagaimana permukaan dirender

Komponen utama dijelaskan di bawah ini:

Produser Aliran Gambar

Produser aliran gambar dapat berupa apa saja yang menghasilkan buffer grafis untuk konsumsi. Contohnya termasuk OpenGL ES, Canvas 2D, dan dekoder video server media.

Konsumen aliran gambar

Konsumen paling umum dari aliran gambar adalah SurfaceFlinger, layanan sistem yang menggunakan permukaan yang saat ini terlihat dan menggabungkannya ke layar menggunakan informasi yang disediakan oleh Window Manager. SurfaceFlinger adalah satu-satunya layanan yang dapat mengubah konten tampilan. SurfaceFlinger menggunakan OpenGL dan Hardware Composer untuk menyusun sekelompok permukaan.

Aplikasi OpenGL ES lainnya juga dapat menggunakan aliran gambar, seperti aplikasi kamera yang menggunakan aliran gambar pratinjau kamera. Aplikasi non-GL dapat menjadi konsumen juga, misalnya kelas ImageReader.

Komposer Perangkat Keras

Abstraksi perangkat keras untuk subsistem tampilan. SurfaceFlinger dapat mendelegasikan pekerjaan komposisi tertentu ke Hardware Composer untuk memindahkan pekerjaan dari OpenGL dan GPU. SurfaceFlinger bertindak sebagai klien OpenGL ES lainnya. Jadi, ketika SurfaceFlinger secara aktif mengomposisi satu atau dua buffer menjadi sepertiga, misalnya, ia menggunakan OpenGL ES. Ini membuat pengomposisian memiliki daya yang lebih rendah daripada membuat GPU melakukan semua komputasi.

Hardware Composer HAL melakukan separuh pekerjaan lainnya dan merupakan titik sentral untuk semua rendering grafis Android. Hardware Composer harus mendukung event, salah satunya adalah VSYNC (lainnya adalah hotplug untuk dukungan plug-and-playHDMI).

Gralloc

Pengalokasi memori grafis (Gralloc) diperlukan untuk mengalokasikan memori yang diminta oleh produsen gambar. Untuk detailnya, lihat Gralloc HAL .

Aliran data

Lihat diagram berikut untuk penggambaran pipeline grafis Android:

aliran data grafik

Gambar 2. Aliran data grafis melalui Android

Objek di sebelah kiri adalah perender yang menghasilkan buffer grafis, seperti layar beranda, bilah status, dan UI sistem. SurfaceFlinger adalah komposer dan Komposer Perangkat Keras adalah komposer.

Antrian Penyangga

BufferQueues menyediakan perekat antara komponen grafis Android. Ini adalah sepasang antrian yang memediasi siklus buffer yang konstan dari produsen ke konsumen. Setelah produsen menyerahkan buffer mereka, SurfaceFlinger bertanggung jawab untuk menggabungkan semuanya ke layar.

Lihat diagram berikut untuk proses komunikasi BufferQueue.

Proses komunikasi BufferQueue

Gambar 3. Proses komunikasi BufferQueue

BufferQueue berisi logika yang mengikat produsen aliran gambar dan konsumen aliran gambar bersama-sama. Beberapa contoh produsen gambar adalah preview kamera yang dihasilkan oleh kamera game HAL atau OpenGL ES. Beberapa contoh konsumen gambar adalah SurfaceFlinger atau aplikasi lain yang menampilkan aliran OpenGL ES, seperti aplikasi kamera yang menampilkan jendela bidik kamera.

BufferQueue adalah struktur data yang menggabungkan kumpulan buffer dengan antrian dan menggunakan Binder IPC untuk melewatkan buffer antar proses. Antarmuka produser, atau yang Anda berikan kepada seseorang yang ingin membuat buffer grafis, adalah IGraphicBufferProducer (bagian dari SurfaceTexture ). BufferQueue sering digunakan untuk merender ke Permukaan dan mengkonsumsi dengan Konsumen GL, di antara tugas-tugas lainnya.

BufferQueue dapat beroperasi dalam tiga mode berbeda:

Mode mirip sinkron - BufferQueue secara default beroperasi dalam mode mirip sinkron, di mana setiap buffer yang masuk dari produsen keluar di konsumen. Tidak ada buffer yang dibuang dalam mode ini. Dan jika produser terlalu cepat dan membuat buffer lebih cepat daripada yang dikuras, itu akan memblokir dan menunggu buffer gratis.

Mode non-blocking - BufferQueue juga dapat beroperasi dalam mode non-blocking yang menghasilkan kesalahan daripada menunggu buffer dalam kasus tersebut. Tidak ada buffer yang dibuang dalam mode ini juga. Ini berguna untuk menghindari kemungkinan kebuntuan dalam perangkat lunak aplikasi yang mungkin tidak memahami dependensi kompleks dari kerangka kerja grafis.

Buang mode - Akhirnya, BufferQueue dapat dikonfigurasi untuk membuang buffer lama daripada menghasilkan kesalahan atau menunggu. Misalnya, jika melakukan rendering GL ke tampilan tekstur dan menggambar secepat mungkin, buffer harus dihilangkan.

Untuk melakukan sebagian besar pekerjaan ini, SurfaceFlinger hanya bertindak sebagai klien OpenGL ES lainnya. Jadi, ketika SurfaceFlinger secara aktif mengomposisi satu atau dua buffer menjadi sepertiga, misalnya, ia menggunakan OpenGL ES.

Komposer Perangkat Keras HAL melakukan separuh pekerjaan lainnya. HAL ini bertindak sebagai titik sentral untuk semua rendering grafis Android.