Android 13 bổ sung một cấu hình mới có tên AutoSingleLayer
để chốt bộ đệm chưa được báo hiệu. Cấu hình này cho phép SurfaceFlinger chốt bộ đệm không được báo hiệu khi chỉ có một lớp duy nhất đang cập nhật và không dành cho các trường hợp xảy ra trên các lớp, chẳng hạn như thay đổi hình học hoặc giao dịch đồng bộ hóa.
Trước Android 13, cờ debug.sf.latch_unsignaled
trong AOSP cho phép SurfaceFlinger chốt tất cả các bộ đệm chưa được ký hiệu, bất kể trường hợp sử dụng. Khi bật cấu hình này, sẽ có các tác dụng phụ không mong muốn, chẳng hạn như phá vỡ các giao dịch đồng bộ hóa và đóng băng toàn bộ màn hình trong khi chờ đợi trên bộ đệm không đầy đủ.
Với chế độ AutoSingleLayer
, chỉ một vùng đệm của một bề mặt được cập nhật trong một khung. Chế độ này cho phép trò chơi và các ứng dụng toàn màn hình khác tận dụng lợi ích của việc chốt bộ đệm không được đánh dấu và giảm tải ứng dụng trong khi vẫn không bị ảnh hưởng bởi màn hình treo.
Cài đặt chế độ AutoSingleLayer
Trong Android 13, AutoSingleLayer
là chế độ mặc định cho tính năng bộ đệm không báo hiệu chốt. Chế độ này được điều khiển bởi thuộc tính hệ thống debug.sf.auto_latch_unsignaled
.
SurfaceFlinger đọc LatchUnsignaledConfig
khi khởi động. Dưới đây là các cấu hình có thể:
LatchUnsignaledConfig::AutoSingleLayer
Trong chế độ mặc định AOSP này, việc chốt các bộ đệm không được báo hiệu được cho phép khi một lớp duy nhất được cập nhật trong một khung và bản cập nhật chỉ bao gồm một bản cập nhật bộ đệm mà không có giao dịch đồng bộ hóa hoặc thay đổi hình học. Ở chế độ này,
debug.sf.auto_latch_unsignaled
được đặt thànhtrue
theo mặc định.LatchUnsignaledConfig::Disabled
Chế độ này vô hiệu hóa hành vi chốt không được báo hiệu và chỉ chốt các giao dịch được báo hiệu. Chế độ này cũng vô hiệu hóa chế độ
AutoSingleLayer
. Để định cấu hình chế độ này, hãy đặtdebug.sf.latch_unsignaled
vàdebug.sf.auto_latch_unsignaled
thànhfalse
.LatchUnsignaledConfig::Always
Trong chế độ này, tất cả các bộ đệm được chốt không được báo hiệu. Để định cấu hình chế độ này, hãy đặt
debug.sf.latch_unsignaled
thànhtrue
.
Kiểm tra AutoSingleLayer
Để kiểm tra xem bộ đệm có được chốt không được đánh dấu hay không, hãy tìm các dấu vết sau từ SurfaceFlinger trong Perfetto :
Hình 1. Dấu vết của bộ đệm không báo hiệu được chốt trong Perfetto