HAL Trình kết hợp phần cứng (HWC) xác định cách kết hợp các vùng đệm hiệu quả nhất bằng phần cứng hiện có. Là một HAL, việc triển khai HAL này dành riêng cho thiết bị và thường do OEM phần cứng màn hình thực hiện.
Giá trị của phương pháp này rất dễ nhận biết khi bạn xem xét các lớp phủ, kết hợp nhiều vùng đệm trong phần cứng hiển thị thay vì GPU. Ví dụ: hãy xem xét một chiếc điện thoại Android thông thường ở hướng dọc, với thanh trạng thái ở trên cùng, thanh điều hướng ở dưới cùng và nội dung ứng dụng ở mọi nơi khác. Nội dung cho mỗi lớp nằm trong các vùng đệm riêng biệt. Bạn có thể xử lý thành phần bằng một trong các phương thức sau:
- Kết xuất nội dung ứng dụng vào một vùng đệm tạm thời, sau đó kết xuất thanh trạng thái lên trên, thanh điều hướng lên trên nữa và cuối cùng chuyển vùng đệm tạm thời đến phần cứng màn hình.
- Truyền cả 3 vùng đệm đến phần cứng hiển thị và hướng dẫn phần cứng này đọc dữ liệu từ các vùng đệm khác nhau cho các phần khác nhau của màn hình.
Phương pháp sau có thể hiệu quả hơn đáng kể.
Khả năng của bộ xử lý hiển thị có sự khác biệt đáng kể. Số lượng lớp phủ, việc các lớp có thể xoay hoặc kết hợp hay không, cũng như các quy tắc hạn chế về vị trí và mức độ chồng chéo có thể khó thể hiện thông qua API. Để đáp ứng các lựa chọn này, HWC sẽ thực hiện các phép tính sau:
- SurfaceFlinger cung cấp cho HWC danh sách đầy đủ các lớp và hỏi: "Bạn muốn xử lý việc này như thế nào?"
- HWC phản hồi bằng cách đánh dấu từng lớp là thành phần thiết bị hoặc thành phần ứng dụng.
- SurfaceFlinger sẽ xử lý mọi ứng dụng, truyền vùng đệm đầu ra đến HWC và để HWC xử lý phần còn lại.
Vì các nhà cung cấp phần cứng có thể tuỳ chỉnh mã đưa ra quyết định, nên bạn có thể khai thác hiệu suất tốt nhất của mọi thiết bị.
Các lớp phủ có thể kém hiệu quả hơn so với thành phần GL khi không có gì thay đổi trên màn hình. Điều này đặc biệt đúng khi nội dung lớp phủ có các pixel trong suốt và các lớp chồng lên nhau được kết hợp. Trong những trường hợp như vậy, HWC có thể yêu cầu thành phần GLES cho một số hoặc tất cả các lớp và giữ lại vùng đệm được kết hợp. Nếu SurfaceFlinger yêu cầu kết hợp cùng một nhóm bộ đệm, thì HWC có thể cho thấy bộ đệm tạm thời đã kết hợp trước đó. Điều này có thể giúp cải thiện thời lượng pin của thiết bị ở trạng thái chờ.
Các thiết bị Android thường hỗ trợ 4 lớp phủ. Việc cố gắng kết hợp nhiều lớp hơn lớp phủ sẽ khiến hệ thống sử dụng thành phần GLES cho một số lớp, tức là số lượng lớp mà ứng dụng sử dụng có thể ảnh hưởng đáng kể đến mức tiêu thụ điện năng và hiệu suất.