Kể từ Android 15, 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, sử dụng các bước VSync riêng biệt.
Tính năng ARR mang lại các lợi ích sau:
Giảm mức tiêu thụ điện năng: 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, giúp giảm thiểu mức tiêu thụ điện năng không cần thiết.
Giảm hiện tượng giật: ARR giúp bạn không cần phải chuyển đổi chế độ, đây là nguyên nhân gây ra hiện tượng giật đã biế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 tần suất cố định do chế độ hiển thị đang hoạt động xác định.
Trên bảng điều khiển ARR, tốc độ VSync hiển thị và tốc độ làm mới được tách biệt, cho phép tốc độ làm mới thay đổi trong một chế độ hiển thị, dựa trên tốc độ 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à giá trị chia của hiệu ứng xé hình (TE). OEM có thể linh hoạt triển khai ARR dựa trên các lựa chọn đánh đổi năng lượng ưu tiên.
Hình sau đây là 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 ms. Khung hình có thể được hiển thị theo bất kỳ bội số nào của VSync sau minFrameIntervalNs
từ khung hình cuối cùng.
Hình 1. Ví dụ về ARR.
Triển khai
Android 15 hỗ trợ ARR bằng các API HAL của Trình tổng hợp phần cứng (HWC) mới và các thay đổi về nền tảng. Để bật ARR, nhà sản xuất thiết bị gốc (OEM) phải hỗ trợ các thay đổi về hệ thống và hạt 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 cá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ác thuộc tính màn hình, cùng với các thuộc tính sau cho ARR:
vrrConfig
không bắt buộc: Nếu được đặt, ARR sẽ được bật cho các cấu hình cụ thể. Nếu bạn đặt thànhnull
, thì chế độ hiển thị sẽ được đặt thành các chế độ không phải ARR, chẳng hạn như tốc độ làm mới nhiều lần (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 riêng biệt được hỗ trợ.Nhà cung cấp phải đặt giá trị
DisplayConfiguration.vsyncPeriod
cho tất cả thiết bị. Đối với màn hình không phải 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
bao gồm 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
: Giá trị 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 gợi ý cho một khung hình có khả năng sẽ được hiển thị, để màn hình có thể điều chỉnh thời gian tự làm mới cho phù hợp. frameIntervalNs
biểu thị tốc độ hiện tại sau expectedPresentTime
. Ví dụ: nếu notifyExpectedPresent
được gọi bằng expectedPresentTime
N và frameIntervalNs
là 16,6 ms, thì khung hình tiếp theo sẽ ở N + 16,6 ms sau thời điểm hiện tại N. Sau thời điểm hiện tại N, tốc độ khung hình là 16,6 mili giây cho đến khi có thay đổi khác.
IComposerClient.notifyExpectedPresent
chỉ được gọi khi bạn đặt DisplayConfiguration.notifyExpectedPresentConfig
và nếu một trong các điều kiện về thời gian sau đây xảy ra:
- Thời gian hiện không theo nhịp độ: Thời gian hiển thị 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.frameIntervalN
DisplayCommand.frameIntervalNs
cung cấp gợi ý về tần suất 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:
Hình 2. Ứng dụng kiểm thử TouchLatency.
Trong ứng dụng kiểm thử, hãy sử dụng thanh trượt để điều chỉnh tốc độ kết xuất theo các giá trị của tốc độ làm mới ước số của tốc độ làm mới màn hình. Quan sát cách tốc độ khung hình thay đổi đối với tốc độ được yêu cầu.