Google berkomitmen untuk memajukan ekuitas ras untuk komunitas kulit hitam. Lihat bagaimana.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Grafik

Ikon Android Graphics HAL

Kerangka kerja Android menawarkan berbagai API rendering grafik untuk 2D dan 3D yang berinteraksi dengan implementasi pabrikan dari driver grafis, sehingga penting untuk memiliki pemahaman yang baik tentang bagaimana API tersebut bekerja pada level yang lebih tinggi. Halaman ini memperkenalkan lapisan abstraksi perangkat keras grafis (HAL) di mana driver tersebut dibuat.

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

Komponen grafis Android

Tidak peduli apa pun yang digunakan pengembang rendering API, semuanya dirender ke "permukaan". Permukaan mewakili sisi produsen antrian penyangga yang sering dikonsumsi oleh SurfaceFlinger. Setiap jendela yang dibuat pada platform Android didukung oleh permukaan. Semua permukaan yang terlihat dirender dikomposisikan ke layar oleh SurfaceFlinger.

Diagram berikut menunjukkan bagaimana komponen utama bekerja bersama:

komponen rendering gambar

Gambar 1. Bagaimana permukaan ditampilkan

Komponen utama dijelaskan di bawah ini:

Produsen Streaming Gambar

Produser aliran gambar dapat berupa apa saja yang menghasilkan buffer grafis untuk dikonsumsi. Contohnya termasuk OpenGL ES, Canvas 2D, dan decoder video mediaserver.

Konsumen Stream Gambar

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

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

Komposer Perangkat Keras

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

Hardware Composer HAL melakukan bagian lain dari pekerjaan dan merupakan titik sentral untuk semua rendering grafis Android. Hardware Composer harus mendukung acara, salah satunya adalah VSYNC (yang lain 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 pipa grafis Android:

aliran data grafik

Gambar 2. Alur data grafik melalui Android

Objek di sebelah kiri adalah penyaji yang menghasilkan buffer grafis, seperti layar beranda, bilah status, dan UI sistem. SurfaceFlinger adalah komposer dan Hardware Composer adalah komposer.

BufferQueue

BufferQueues menyediakan perekat antara komponen grafis Android. Ini adalah sepasang antrian yang memediasi siklus penyangga konstan dari produsen ke konsumen. Setelah produsen menyerahkan buffer mereka, SurfaceFlinger bertanggung jawab untuk mengomposisikan 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 secara bersamaan. Beberapa contoh produsen gambar adalah pratinjau kamera yang diproduksi oleh kamera HAL atau permainan 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 meneruskan buffer antar proses. Antarmuka produsen, atau apa yang Anda berikan kepada seseorang yang ingin menghasilkan buffer grafis, adalah IGraphicBufferProducer (bagian dari SurfaceTexture ). BufferQueue sering digunakan untuk menampilkan ke Permukaan dan mengkonsumsi dengan Konsumen GL, di antara tugas-tugas lainnya. BufferQueue dapat beroperasi dalam tiga mode berbeda:

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

Mode non-blocking - BufferQueue juga dapat beroperasi dalam mode non-blocking di mana ia menghasilkan kesalahan daripada menunggu buffer dalam kasus tersebut. Tidak ada buffer yang pernah dibuang dalam mode ini juga. Ini berguna untuk menghindari potensi kebuntuan dalam perangkat lunak aplikasi yang mungkin tidak memahami ketergantungan 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 dijatuhkan.

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

Hardware Composer HAL melakukan separuh pekerjaan lainnya. HAL ini bertindak sebagai titik pusat untuk semua rendering grafik Android.