Kể từ Android 13, HAL Hardware Composer (HWC) được xác định trong AIDL. Các phiên bản HIDL từ android.hardware.graphics.composer@2.1
đến android.hardware.graphics.composer@2.4
không được dùng nữa.
Trang này mô tả sự khác biệt giữa AIDL và HIDL HAL cho HWC, cũng như cách triển khai và kiểm thử AIDL HAL.
Vì AIDL mang lại nhiều lợi ích, nên các nhà cung cấp có thể triển khai HAL trình kết hợp AIDL bắt đầu từ Android 13 thay vì phiên bản HIDL. Để biết thêm thông tin, hãy xem phần Triển khai.
Sự khác biệt giữa AIDL và HIDL HAL
HAL trình kết hợp AIDL mới có tên là android.hardware.graphics.composer3
, được xác định trong IComposer.aidl
. API này tương tự như HIDL HAL android.hardware.graphics.composer@2.4
, nhưng có những thay đổi sau:
Xoá Hàng đợi tin nhắn nhanh (FMQ) để chuyển sang các lệnh có thể phân tích cú pháp.
HAL AIDL xác định giao diện lệnh dựa trên các loại có thể phân chia được nhập mạnh thay vì các lệnh được chuyển đổi tuần tự qua FMQ trong HIDL. Điều này cung cấp một giao diện ổn định cho các lệnh và định nghĩa dễ đọc hơn về cách hệ thống diễn giải tải trọng lệnh.
Phương thức
executeCommands
5 được xác định trongIComposerClient.aidl
:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
Mỗi lệnh là một loại có thể phân chia được nhập mạnh mẽ được xác định trong
DisplayCommand.aidl
. Các phản hồi lệnh là các đối tượng có thể chuyển đổi thành gói được nhập mạnh mẽ, được xác định trongCommandResultPayload.aidl
.Xoá
IComposerClient.getClientTargetSupport
vì không có máy khách đang hoạt động nào sử dụng phương thức này.Biểu thị màu sắc dưới dạng số thực thay vì byte để căn chỉnh với ngăn xếp đồ hoạ trên trong Android, như được xác định bởi
ASurfaceTransaction_setColor
.Thêm các trường mới để kiểm soát nội dung HDR.
Trong AIDL HAL, các ngăn xếp lớp SDR/HDR hỗn hợp hỗ trợ làm mờ liền mạch các lớp SDR khi lớp HDR xuất hiện trên màn hình cùng lúc.
Trường
brightness
trongLayerCommand
cho phép SurfaceFlinger chỉ định độ sáng cho mỗi lớp. Điều này cho phép HWC làm mờ nội dung của lớp trong không gian ánh sáng tuyến tính thay vì không gian gamma.Trường
brightness
trongClientTargetPropertyWithBrightness
cho phép HWC chỉ định không gian độ sáng cho thành phần ứng dụng và hướng dẫnRenderEngine
có làm mờ các lớp SDR trong thành phần ứng dụng hay không.Trường
dimmingStage
cho phép HWC định cấu hình thời điểmRenderEngine
làm mờ nội dung. Điều này phù hợp vớiColorModes
do nhà cung cấp xác định. Nhà cung cấp có thể muốn làm mờ trong không gian gamma để bật các tính năng cải tiến độ tương phản do nhà cung cấp xác định trong quy trình xử lý màu của họ.Thêm một loại thành phần,
DISPLAY_DECORATION
, vàoComposition.aidl
để trang trí màn hình.Một số thiết bị có phần cứng chuyên dụng để tối ưu hoá việc vẽ mặt nạ alpha giúp làm mịn các góc bo tròn và vết cắt trên màn hình. Các thiết bị có phần cứng như vậy phải triển khai
IComposerClient.getDisplayDecorationSupport
và trả về cấu trúcDisplayDecorationSupport
như được xác định trongDisplayDecorationSupport.aidl
. Cấu trúc này mô tả các enumPixelFormat
vàAlphaInterpretation
mà thiết bị yêu cầu. Sau khi triển khai này, Giao diện người dùng hệ thống sẽ đánh dấu lớp mặt nạ alpha làDISPLAY_DECORATION
, một loại thành phần tận dụng phần cứng chuyên dụng.Thêm trường
expectedPresentTime
vàoDisplayCommand.aidl
.Trường
expectedPresentTime
cho phép SurfaceFlinger đặt thời gian hiển thị dự kiến cho thời điểm nội dung hiện tại phải xuất hiện trên màn hình. Với tính năng này, SurfaceFlinger sẽ gửi lệnh trình bày đến quá trình triển khai trước thời hạn, cho phép tính năng này tạo đường dẫn cho nhiều công việc kết hợp hơn.Thêm các API mới để kiểm soát cấu hình màn hình khởi động.
Bằng cách sử dụng
BOOT_DISPLAY_CONFIG
, nhà cung cấp có thể chỉ định rằng cấu hình màn hình khởi động được hỗ trợ. Các phương thứcsetBootDisplayConfig
,clearBootDisplayConfig
vàgetPreferredBootDisplayConfig
sử dụngBOOT_DISPLAY_CONFIG
như sau:Khi sử dụng
setBootDisplayConfig
, khung này sẽ thông báo cho nhà cung cấp về cấu hình hiển thị thời gian khởi động. Nhà cung cấp phải lưu vào bộ nhớ đệm trong cấu hình màn hình khởi động và khởi động ở cấu hình này vào lần khởi động lại tiếp theo. Nếu thiết bị không thể khởi động trong cấu hình này, thì nhà cung cấp phải tìm một cấu hình phù hợp với độ phân giải và tốc độ làm mới của cấu hình này. Nếu không có cấu hình nào như vậy, nhà cung cấp phải sử dụng cấu hình màn hình mà họ ưu tiên.Khi sử dụng
clearBootDisplayConfig
, khung này sẽ thông báo cho các nhà cung cấp xoá cấu hình màn hình khởi động và khởi động ở cấu hình màn hình mà họ muốn trong lần khởi động lại tiếp theo.Bằng cách sử dụng
getPreferredBootDisplayConfig
, khung sẽ truy vấn chế độ khởi động ưu tiên của nhà cung cấp.
Khi không hỗ trợ cấu hình màn hình khởi động, các phương thức này sẽ trả về giá trị
UNSUPPORTED
.Thêm các API mới để kiểm soát bộ hẹn giờ ở trạng thái chờ của màn hình:
Bằng cách sử dụng
DISPLAY_IDLE_TIMER
, nhà cung cấp có thể chỉ định rằng nhà cung cấp sẽ triển khai bộ hẹn giờ không hoạt động cho màn hình này. Khi không hoạt động, tính năng này sẽ thay đổi tốc độ làm mới thành chế độ cài đặt thấp hơn để tiết kiệm pin. Nền tảng này sử dụngsetIdleTimerEnabled
để kiểm soát thời gian chờ của bộ hẹn giờ và trong một số trường hợp, để tắt bộ hẹn giờ nhằm ngăn các hoạt động chuyển đổi tốc độ làm mới không mong muốn khi không hoạt động.Việc sử dụng lệnh gọi lại
IComposerCallback.onVsyncIdle
cho biết với nền tảng rằng màn hình đang ở trạng thái rảnh và nhịpvsync
đã thay đổi. Nền tảng sẽ phản hồi lệnh gọi lại này bằng cách đặt lại mô hìnhvsync
. Thao tác này buộcvsync
đồng bộ hoá lại trên khung hình tiếp theo và tìm hiểu nhịpvsync
mới.
Triển khai
Nhà cung cấp không bắt buộc phải triển khai AIDL HAL cho Android 13. Tuy nhiên, các nhà cung cấp nên triển khai HAL trình kết hợp AIDL thay vì phiên bản HIDL để sử dụng chức năng và API của HAL trình kết hợp AIDL.
Trình mô phỏng Android bao gồm một phương thức triển khai tham chiếu cho AIDL HWC HAL.
Thử nghiệm
Để kiểm tra việc triển khai, hãy chạy VtsHalGraphicsComposer3_TargetTest
.