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 (Lớp trừu tượng phần cứng) cho Trình soạn phần cứng (HWC) được định nghĩa 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 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ư triển khai và thử nghiệm AIDL HAL.

nhược điểm mà AIDL mang lại, nhà cung cấp nên triển khai Lớp trừu tượng phần cứng (HAL) cho trình soạn AIDL bắt đầu Android 13 thay vì phiên bản HIDL. Xem Triển khai để biết thêm thông tin.

Sự khác biệt giữa AIDL và HIDL HAL

Nhà soạn nhạc 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á Hàng đợi tin nhắn nhanh (FMQ) trong ưu tiên các lệnh theo gói.

    AIDL HAL xác định giao diện lệnh dựa trên được nhập mạnh các loại theo gói thay vì các lệnh được chuyển đổi tuần tự qua FMQ trong HIDL. Chiến dịch này cung cấp giao diện ổn định cho các lệnh và định nghĩa dễ đọc hơn về cách tải trọng lệnh sẽ được diễn giải.

    executeCommands được xác định trong IComposerClient.aidl dưới dạng

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

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

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

  • Các màu được biểu diễn dưới dạng số thực thay vì byte để phù hợp hơn với ngăn xếp đồ hoạ phía trên trong Android như xác định 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á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 trong LayerCommand cho phép SurfaceFlinger chỉ định độ sáng trên 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 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 khách và hướng dẫn RenderEngine liệu có làm mờ lớp SDR trong cấu trúc ứng dụng khách hay không.

    dimmingStage trường này cho phép HWC định cấu hình thời điểm RenderEngine nên làm mờ nội dung. Chiến dịch này phù hợp với ColorModes do nhà cung cấp xác định. Chế độ này có thể ưu tiên làm mờ trong gamma để cho phép tính năng nâng cao độ tương phản do nhà cung cấp xác định trong hệ thống màu sắc của họ.

  • Bổ sung loại cấu trúc mới DISPLAY_DECORATION trong Composition.aidl cho việc 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á quá trình vẽ mặt nạ alpha làm mịn các góc 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 để trả về cấu trúc DisplayDecorationSupport như được xác định trong chế độ xem mới DisplayDecorationSupport.aidl. Cấu trúc này mô tả PixelFormatAlphaInterpretation enum mà thiết bị yêu cầu. Trong quá trình 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 kiểu cấu trúc mới tận dụng phần cứng chuyên dụng.

  • Thêm một expectedPresentTime mới sang DisplayCommand.aidl.

    Trường expectedPresentTime cho phép SurfaceFlinger đặt giá trị dự kiến thời điểm hiện tại khi nội dung hiện tại phải được hiển thị trên màn hình. Bằng cách này SurfaceFlinger gửi một lệnh hiện tại để triển khai trước để dành thời gian xử lý nhiều công việc sáng tác hơn.

  • Bổ sung các API mới để kiểm soát cấu hình hiển thị 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ợ. Chiến lược phát hành đĩa đơn setBootDisplayConfig! clearBootDisplayConfig! và getPreferredBootDisplayConfig các phương thức sử dụng BOOT_DISPLAY_CONFIG như sau:

    • Bằng cách sử dụng setBootDisplayConfig, khung này 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 hiển thị khởi động và khởi động trong cấu hình này vào lần tiếp theo khởi động lại. 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 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ó config của bạn đã tồn tại, thì nhà cung cấp sẽ dùng cấu hình hiển thị họ ưu tiên.

    • Bằng cách sử dụng clearBootDisplayConfig, khung này thông báo cho nhà cung cấp để xoá cấu hình hiển thị khởi động, và khởi động trong cấu hình hiển thị ưa thích của họ 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.

    • Bằng cách sử dụng DISPLAY_IDLE_TIMER, có thể chỉ định rằng nhà cung cấp triển khai bộ tính giờ không hoạt động cho màn hình này. Khi ở trạng thái rảnh, chức năng này sẽ thay đổi tốc độ làm mới thành thấp hơn để duy trì 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 nó để để 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.

    • Sử dụng IComposerCallback.onVsyncIdle lệnh gọi lại cho nền tảng biết màn hình ở trạng thái rảnh và vsync tần suất đã 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 Kiểu máy vsync. Phương thức này buộc đồng bộ hoá lại vsync trên khung hình tiếp theo và học Tần suất vsync.

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, họ nên triển khai AIDL trình soạn thảo HAL thay vì phiên bản HIDL để sử dụng chức năng và API mới.

Cách triển khai tệp tham chiếu cho AIDL HWC HAL được triển khai trong trình mô phỏng Android.

Thử nghiệm

Để kiểm thử kết quả triển khai, hãy chạy VtsHalGraphicsComposer3_TargetTest.