Phần cứng Composer HAL

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

Giá trị của phương pháp này rất dễ nhận ra khi bạn xem xét các mặt phẳng lớp phủ , kết hợp nhiều bộ đệm trong phần cứng màn hình 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 của mỗi lớp nằm trong các bộ đệm riêng biệt. Bạn có thể xử lý bố cục bằng một trong các phương pháp sau:

  • Hiển thị nội dung ứng dụng vào vùng đệm đầu, sau đó hiển thị thanh trạng thái trên đó, thanh điều hướng ở trên đó và cuối cùng chuyển bộ đệm đầu vào phần cứng hiển thị.
  • Chuyển cả ba bộ đệm tới phần cứng màn hình và hướng dẫn nó đọc dữ liệu từ các bộ đệm khác nhau cho các phần khác nhau của màn hình.

Cách tiếp cận thứ hai có thể hiệu quả hơn đáng kể.

Khả năng của bộ xử lý hiển thị thay đổi đáng kể. Số lượng lớp phủ, liệu các lớp có thể được xoay hay trộn lẫn hay không, cũng như các hạn chế về vị trí và chồng chéo có thể khó thể hiện thông qua API. Để đáp ứng các tùy chọn này, HWC thực hiện các tính toán 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 máy khách.
  3. SurfaceFlinger sẽ chăm sóc mọi máy khách, chuyển bộ đệm đầu ra cho HWC và để HWC xử lý phần còn lại.

Vì các nhà cung cấp phần cứng có thể tùy chỉnh mã ra quyết định phù hợp nên mọi thiết bị đều có thể đạt được hiệu suất tốt nhất.

Các mặt phẳng lớp phủ có thể kém hiệu quả hơn bố cục 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 trộn lẫ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 bộ đệm tổng hợp. Nếu SurfaceFlinger yêu cầu tổng hợp cùng một bộ đệm, HWC có thể hiển thị bộ đệm vết xước được tổng hợp trước đó. Điều này có thể cải thiện tuổi thọ pin của thiết bị không hoạt động.

Các thiết bị Android thường hỗ trợ bốn mặt phẳng 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ể có tác động có thể đo lường được đến mức tiêu thụ điện năng và hiệu suất.