Kể từ Android 13, HAL của Trình tổng hợp phần cứng (HWC) được xác định trong AIDL và các phiên bản HIDL từ android.hardware.graphics.composer@2.1
đến android.hardware.graphics.composer@2.4
không còn đượ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.
Do các lợi thế mà AIDL mang lại, nhà cung cấp nên triển khai HAL trình soạn nhạc AIDL bắt đầu từ Android 13 thay vì phiên bản HIDL. Hãy xem phần Triển khai để biết thêm thông tin.
Sự khác biệt giữa AIDL và HIDL HAL
HAL trình soạn AIDL mới, có tên là android.hardware.graphics.composer3
, được xác định trong IComposer.aidl
.
API này hiển thị một API tương tự như HIDL HAL android.hardware.graphics.composer@2.4
với các thay đổi sau:
Xoá Fast Message Queue (FMQ) (hàng đợi tin nhắn nhanh) để ưu tiên các lệnh có thể phân phối.
HAL AIDL xác định giao diện lệnh dựa trên các loại có thể phân đoạn được nhập mạnh, trái ngược với 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 diễn giải tải trọng lệnh.
Phương thức
executeCommands
được xác định trongIComposerClient.aidl
như sauCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
trong đó mỗi lệnh là một loại có thể phân phối được định kiểu mạnh được xác định trong
DisplayCommand.aidl
. Phản hồi lệnh là các gói có thể đóng gói được xác định trongCommandResultPayload.aidl
.Xoá
IComposerClient.getClientTargetSupport
vì không có ứng dụng nào đang hoạt động cho phương thức này.Biểu thị màu dưới dạng số thực thay vì byte để phù hợp hơn với ngăn xếp đồ hoạ trên trong Android như được xác định trong
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 tục các lớp SDR khi một lớp HDR đồng thời xuất hiện trên màn hình.
Trường
brightness
trongLayerCommand
cho phép SurfaceFlinger chỉ định độ sáng cho mỗi lớ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, có thể thích làm mờ trong không gian gamma để cho phép các tính năng tăng cường độ tương phản do nhà cung cấp xác định trong quy trình xử lý màu.Thêm một loại thành phần mới
DISPLAY_DECORATION
trongComposition.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ượt các góc bo tròn và phần 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
để trả về cấu trúcDisplayDecorationSupport
như được xác định trongDisplayDecorationSupport.aidl
mới. Cấu trúc này mô tả các enumPixelFormat
vàAlphaInterpretation
mà thiết bị yêu cầu. Khi triển khai, 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 mới tận dụng phần cứng chuyên dụng.Thêm trường
expectedPresentTime
mới vàoDisplayCommand.aidl
.Trường
expectedPresentTime
cho phép SurfaceFlinger đặt thời gian hiện tại dự kiến thành thời điểm nội dung hiện tại phải hiển thị trên màn hình. Với tính năng này, SurfaceFlinger sẽ gửi lệnh hiện tại đến quá trình triển khai trước thời hạn, cho phép quá trình này chuyển tiếp 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.
Khi 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:Bằng cách sử dụng
setBootDisplayConfig
, khung này sẽ thông báo cho các 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 trong cấu hình này khi khởi động lại lần tiếp theo. Nếu thiết bị không thể khởi động ở cấu hình này, nhà cung cấp phải tìm một cấu hình khớ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 như vậy, nhà cung cấp nên sử dụng cấu hình hiển thị ưu tiên của họ.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 trong cấu hình màn hình ưu tiên của họ trong lần khởi động lại tiếp theo.Khi sử dụng
getPreferredBootDisplayConfig
, khung này sẽ truy vấn chế độ khởi động ưu tiên của nhà cung cấp.
Khi cấu hình màn hình khởi động không được hỗ trợ, 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ờ khi màn hình ở trạng thái rảnh.
Khi 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 ở trạng thái rảnh, 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 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 chặn việc chuyển đổi tốc độ làm mới không mong muốn khi ở trạng thái rảnh.Việc sử dụng lệnh gọi lại
IComposerCallback.onVsyncIdle
cho nền tảng biết rằng màn hình đang ở trạng thái rảnh và tốc độvsync
đã thay đổi. Nền tảng 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ộc phải đồng bộ hoá lạivsync
trên khung hình tiếp theo và tìm hiểu nhịp độvsync
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, bạn nên triển khai HAL trình tổng hợp AIDL thay vì phiên bản HIDL để sử dụng các API và chức năng mới.
Quy trình triển khai tham chiếu cho AIDL HWC HAL được triển khai trong trình mô phỏng Android.
Thử nghiệm
Để kiểm thử cách triển khai, hãy chạy VtsHalGraphicsComposer3_TargetTest
.