AIDL cho HAL của Trình tổng hợp phần cứng

Kể từ Android 13, HAL Trình tổng hợp phần cứng (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 đã ngừng hoạt động.

Trang này mô tả sự khác biệt giữa các HAL AIDL và HIDL cho HWC, cũng như cách triển khai và kiểm thử HAL AIDL.

Vì AIDL mang lại nhiều lợi ích, nên nhà cung cấp có thể triển khai HAL trình tổng hợp AIDL kể 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 các HAL AIDL và HIDL

HAL trình tổng 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ư HAL HIDL 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 tích cú pháp được nhập mạnh thay vì các lệnh được tuần tự hoá 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 trong IComposerClient.aidl:

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

    Mỗi lệnh là một loại có thể phân tích cú pháp được nhập mạnh xác định trong DisplayCommand.aidl. Các phản hồi lệnh là các đối tượng có thể phân tích cú pháp được nhập mạnh xác định trong CommandResultPayload.aidl.

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

  • Biểu diễn màu dưới dạng số thực thay vì byte để căn chỉnh với ngăn xếp đồ họa 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 HAL AIDL, 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 trong LayerCommand 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 trong ClientTargetPropertyWithBrightness cho phép HWC chỉ định không gian độ sáng cho thành phần ứng dụng và hướng dẫn RenderEngine 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ểm RenderEngine làm mờ nội dung. Điều này phù hợp với ColorModes do nhà cung cấp xác định, có thể ưu tiên làm mờ trong không gian gamma để bật 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 của họ.

  • Thêm loại thành phần DISPLAY_DECORATION trong Composition.aidl cho các thành phần 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à 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.getDisplayDecorationSupportvà trả về cấu trúc DisplayDecorationSupport như được xác định trong DisplayDecorationSupport.aidl. Cấu trúc này mô tả các PixelFormatAlphaInterpretation enum 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ào DisplayCommand.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 hiển thị đến quá trình triển khai trước thời hạn, cho phép nó đưa nhiều công việc thành phần vào quy trình.

  • 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ức setBootDisplayConfig, clearBootDisplayConfiggetPreferredBootDisplayConfig sử dụng BOOT_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 màn hình 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 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, 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 ưu tiên của họ.

    • Khi sử dụng clearBootDisplayConfig, khung này sẽ thông báo cho 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ờ không hoạt động của màn hình:

    • Khi sử dụng DISPLAY_IDLE_TIMER, nhà cung cấp có thể chỉ định rằng bộ hẹn giờ không hoạt động được nhà cung cấp triển khai 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ụng setIdleTimerEnabled để 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 việc chuyển đổi tốc độ làm mới không mong muốn khi không hoạt động.

    • Khi sử dụng lệnh gọi lại IComposerCallback.onVsyncIdle, nền tảng sẽ cho biết rằng màn hình không hoạt động và nhịp vsync đã thay đổi. Nền tảng này phản hồi lệnh gọi lại này bằng cách đặt lại mô hình vsync. Nền tảng này buộc phải đồng bộ lại vsync trên khung 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 HAL AIDL cho Android 13. Tuy nhiên, nhà cung cấp nên triển khai HAL trình tổng hợp AIDL thay vì phiên bản HIDL để sử dụng chức năng và API của HAL trình tổng 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 HAL HWC AIDL.

Thử nghiệm

Để kiểm thử quá trình triển khai, hãy chạy VtsHalGraphicsComposer3_TargetTest.