Lớp trừu tượng phần cứng (HAL) cho trình soạn phần cứng

HAL của Trình soạn phần cứng (HWC) xác định cách hiệu quả nhất cho vùng đệm tổng hợp với phần cứng có sẵn. Là một HAL, cách triển khai của HAL này là dành riêng cho thiết bị và thường do nhà sản xuất thiết bị gốc (OEM) phần cứng hiển thị thực hiện.

Bạn có thể dễ dàng nhận ra giá trị của phương pháp này khi xem xét các lớp phủ. Lớp phủ này 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 điện thoại Android thông thường theo 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 của mỗi lớp nằm trong các vùng đệm riêng biệt. Bạn có thể xử lý cấu trúc bằng một trong các phương thức sau:

  • Kết xuất nội dung ứng dụng vào vùng đệm tạm, sau đó kết xuất thanh trạng thái lên trên, thanh điều hướng ở trên cùng và cuối cùng là truyền vùng đệm tạm vào phần cứng hiển thị.
  • Truyền cả ba 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ủ, liệu có thể xoay hay kết hợp các lớp và các hạn chế về vị trí và chồng chéo có thể khó thể hiện thông qua API hay không. Để đáp ứng các tuỳ chọn này, HWC thực hiện các phép tính sau:

  1. 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?"
  2. 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 ứng dụng.
  3. SurfaceFlinger xử lý mọi ứng dụng, truyền vùng đệm đầu ra đến HWC và cho phép 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ã ra quyết định, nên bạn có thể đạt được hiệu suất tốt nhất trên 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ì trên màn hình thay đổi. Đ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 chéo được pha trộn. 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 tổng hợp. Nếu SurfaceFlinger yêu cầu kết hợp cùng một bộ đệm, thì HWC có thể hiển thị bộ đệm ghi tạm đã kết hợp trước đó. Điều này có thể cải thiện thời lượng pin của thiết bị ở trạng thái rảnh.

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, nghĩa là số 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.