HAL của Trình soạn nhạc phần cứng

HAL của Trình tổng hợp phần cứng (HWC) xác định cách hiệu quả nhất để kết hợp vùng đệm với phần cứng hiện có. 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ý 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 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 ở trên cùng và cuối cùng là truyền vùng đệm tạm thời đến 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ể.

Các chức năng của bộ xử lý hiển thị có sự khác biệt đáng kể. Số lớp phủ, liệu các lớp có thể xoay hay kết hợp hay không, cũng như các quy tắc hạn chế về vị trí và lớp phủ có thể khó thể hiện thông qua API. Để đá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 sẽ xử lý mọi ứng dụng, chuyể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ã 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ó pixel trong suốt và các lớp chồng chéo đượ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 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.