Tốc độ làm mới thích ứng

Android 15 giới thiệu tính năng tốc độ làm mới thích ứng (ARR), cho phép tốc độ làm mới màn hình thích ứng với tốc độ khung hình nội dung bằng cách sử dụng các bước VSync riêng biệt.

Tính năng ARR mang lại những lợi ích sau:

  • Giảm mức tiêu thụ điện: Theo mặc định, ARR cho phép các thiết bị hoạt động ở tốc độ thấp hơn tốc độ làm mới tối đa, chỉ chuyển sang tốc độ cao hơn khi cần thiết cho trải nghiệm người dùng, nhờ đó giảm thiểu mức tiêu thụ điện không cần thiết.
  • Giảm hiện tượng giật: ARR giúp loại bỏ nhu cầu chuyển đổi chế độ, đây là một nguyên nhân gây ra hiện tượng giật.

Tổng quan

Trên các bảng điều khiển không phải ARR, màn hình sẽ làm mới theo một nhịp cố định do chế độ hiển thị đang hoạt động xác định.

Trên các bảng ARR, tốc độ VSync và tốc độ làm mới của màn hình được tách rời, cho phép tốc độ làm mới thay đổi trong một chế độ hiển thị dựa trên nhịp độ cập nhật nội dung. Các bảng điều khiển có thể chạy ở tốc độ làm mới là các số chia của hiệu ứng xé hình (TE) của bảng điều khiển. Nhà sản xuất thiết bị gốc có thể triển khai ARR dựa trên sự đánh đổi về nguồn điện mà họ ưu tiên.

Hình sau đây cho thấy một màn hình có vsyncPeriod là 240 Hz và minFrameIntervalNs (tốc độ làm mới tối đa) là 120 Hz. VSync xảy ra sau mỗi 4,16 mili giây. Một khung hình có thể xuất hiện ở bất kỳ bội số nào của VSync sau minFrameIntervalNs của khung hình cuối cùng.

arr-example

Hình 1. Ví dụ về ARR.

Triển khai

Android 15 hỗ trợ ARR bằng các API HAL Hardware Composer (HWC) mới và các thay đổi về nền tảng. Để bật ARR, các OEM phải hỗ trợ các thay đổi về hệ thống và nhân trên các thiết bị chạy Android 15 trở lên, đồng thời triển khai phiên bản 3 của API android.hardware.graphics.composer3, như được liệt kê trong các phần sau.

Hãy xem chế độ triển khai tham chiếu của Pixel đối với các API hỗ trợ ARR để biết thêm thông tin.

DisplayConfiguration.aidl

API DisplayConfiguration.aidl chỉ định cấu hình màn hình bằng cách sử dụng các thuộc tính màn hình, cùng với các thuộc tính sau cho ARR:

  • Không bắt buộc vrrConfig: Nếu được đặt, ARR sẽ được bật cho các cấu hình cụ thể. Nếu được đặt thành null, chế độ hiển thị sẽ được đặt thành các chế độ không phải ARR, chẳng hạn như nhiều tốc độ làm mới (MRR). Với thuộc tính này, bạn có thể định cấu hình một màn hình dưới dạng MRR hoặc ARR, nhưng không thể định cấu hình cả hai.
  • vsyncPeriod: Tốc độ VSync của màn hình. Trên màn hình ARR, giá trị này được dùng để lấy tốc độ làm mới rời rạc được hỗ trợ.

    Nhà cung cấp phải đặt giá trị DisplayConfiguration.vsyncPeriod cho tất cả các thiết bị. Đối với màn hình không có ARR, DisplayConfiguration.vsyncPeriod là tốc độ làm mới màn hình. Nếu thiết bị hỗ trợ 120 Hz, thì giá trị này phải là 8,3 ms.

    Đối với màn hình ARR, DisplayConfiguration.vsyncPeriod là tần số tín hiệu TE. Nếu một thiết bị có minFrameIntervalNs là 8,3 ms nhưng TE là 240 Hz, thì giá trị này phải là 4,16 ms.

VrrConfig.aidl

API VrrConfig.aidl có các thuộc tính sau:

  • minFrameIntervalNs: Tốc độ làm mới tối đa mà màn hình có thể hỗ trợ.
  • NotifyExpectedPresentConfig: Điều này được xác định bằng thời điểm màn hình yêu cầu thông báo trước về một khung hình sắp tới.

IComposerClient.notifyExpectedPresent cung cấp một gợi ý cho khung hình có khả năng được trình chiếu, để màn hình có thể điều chỉnh khoảng thời gian tự làm mới cho phù hợp. frameIntervalNs biểu thị nhịp điệu hiện tại diễn ra sau expectedPresentTime. Ví dụ: nếu notifyExpectedPresent được gọi bằng expectedPresentTime N và frameIntervalNs là 16,6 mili giây, thì khung hình tiếp theo sẽ ở N + 16,6 mili giây sau thời gian hiện tại N. Sau thời gian hiện tại N, tốc độ khung hình là 16,6 mili giây cho đến khi có những thay đổi khác.

IComposerClient.notifyExpectedPresent chỉ được gọi khi DisplayConfiguration.notifyExpectedPresentConfig được đặt và nếu một trong các điều kiện về thời gian sau đây xảy ra:

  • Thời gian trình bày không theo nhịp: Thời gian trình bày dự kiến của khung hình tiếp theo khác với tốc độ làm mới thông thường của màn hình do frameIntervalNs xác định.
  • Đã hết thời gian chờ: Khoảng thời gian giữa các khung hình trước lớn hơn hoặc bằng notifyExpectedPresentConfig.timeoutNs.

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs cung cấp một gợi ý về nhịp điệu cho các khung hình sắp tới (tính bằng nano giây).

Thử nghiệm

Sử dụng onRefreshRateChangedDebug để gỡ lỗi. Phương thức này thông báo cho ứng dụng rằng tốc độ làm mới của màn hình đã thay đổi.

Sử dụng ứng dụng kiểm thử TouchLatency để kiểm thử thủ công như minh hoạ trong Hình 2:

touchlatency-app

Hình 2. Ứng dụng kiểm thử TouchLatency.

Trong ứng dụng thử nghiệm, hãy dùng thanh trượt để điều chỉnh tốc độ kết xuất thành nhiều giá trị của tốc độ làm mới số chia của tốc độ làm mới màn hình. Quan sát cách tốc độ khung hình thay đổi dựa trên tốc độ được yêu cầu.