AIDL dành cho HAL (Lớp trừu tượng phần cứng) cho trình soạn thảo phần cứng

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 dành 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

Trình soạn AIDL HAL mới, có tên là android.hardware.graphics.composer3, được xác định trong IComposer.aidl. Lớp này hiển thị một API tương tự như HAL HIDL android.hardware.graphics.composer@2.4 với những 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 mang đến 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 trong IComposerClient.aidl như sau

    CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
    

    trong đó mỗi lệnh là một kiểu theo gói được nhập mạnh mẽ được xác định trong DisplayCommand.aidl. Phản hồi lệnh là các Parcelable được nhập rõ ràng được xác định trong CommandResultPayload.aidl.

  • Xoá IComposerClient.getClientTargetSupport vì không có ứng dụng nào đang hoạt động cho phương thức này.

  • Màu được biểu diễn ở dạng số thực có độ chính xác đơn thay vì byte để phù hợp hơn với ngăn xếp đồ hoạ phía trên trong Android như định nghĩa trong ASurfaceTransaction_setColor.

  • Bổ sung 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ợ tính năng làm mờ liền mạch của các lớp SDR khi một lớp HDR xuất hiện đồng thời trên màn hình.

    Trường brightness trong LayerCommand cho phép SurfaceFlinger chỉ định độ sáng theo mỗi lớp để HWC giảm độ sáng nội dung của lớp trong không gian ánh sáng tuyến tính, trái ngược với không gian gamma.

    Trường brightness trong ClientTargetPropertyWithBrightness cho phép HWC chỉ định không gian độ sáng cho cấu trúc ứng dụng và hướng dẫn RenderEngine xem có giảm độ sáng lớp SDR trong cấu trúc ứng dụng hay không.

    Trường dimmingStage cho phép HWC định cấu hình thời điểm RenderEngine làm mờ nội dung. Thuộc tính này chứa ColorModes do nhà cung cấp xác định (có thể ưu tiên làm mờ trong không gian gamma) để cho phép các tính năng nâng cao độ tương phản do nhà cung cấp xác định trong quy trình màu.

  • Bổ sung một loại thành phần kết hợp mới DISPLAY_DECORATION trong Composition.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úc DisplayDecorationSupport như được xác định trong DisplayDecorationSupport.aidl mới. Cấu trúc này mô tả các enum PixelFormatAlphaInterpretation 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.

  • Bổ sung trường expectedPresentTime mới vào DisplayCommand.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 gửi một lệnh hiện tại để triển khai trước thời hạn, cho phép SurfaceFlinger xử lý thêm công việc kết hợp.

  • Bổ sung các API mới để kiểm soát cấu hình hiển thị 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ức setBootDisplayConfig, clearBootDisplayConfiggetPreferredBootDisplayConfig sử dụng BOOT_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 hiển thị khởi động và khởi động trong 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 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 nào như vậy, nhà cung cấp nên sử dụng cấu hình hiển thị ưu tiên.

    • Bằng cách sử dụng clearBootDisplayConfig, khung 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 hiển thị ưu tiê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 cấu hình hiển thị khởi động không được hỗ trợ, các phương thức này sẽ trả về một giá trị của UNSUPPORTED.

  • Thêm các API mới để kiểm soát đồng hồ hẹn giờ ở trạng thái rảnh của màn hì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 này sử dụng setIdleTimerEnabled để kiểm soát thời gian chờ của bộ tính giờ và trong một số trường hợp, để tắt chế độ này nhằm ngă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 màn hình ở trạng thái rảnh và phong cách vsync đã 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ình vsync. Tính năng này buộc đồng bộ hoá lại vsync trong khung hình tiếp theo và học tần suất mới của vsync.

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.

Hoạt động 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.