Quản lý bộ đệm khung máy khách

Kể từ Android 13, các bộ đệm khung mới, được sử dụng trong quá trình cấu thành ứng dụng khách , sẽ được phân bổ bất cứ khi nào độ phân giải màn hình thay đổi. Việc phân bổ này được SurfaceFlinger thực hiện trong chu kỳ vô hiệu hóa tiếp theo sau khi thay đổi độ phân giải.

Quản lý bộ đệm khung trong quá trình chuyển đổi độ phân giải

Thay đổi độ phân giải xảy ra do một trong hai trường hợp sau:

  • Một sự kiện cắm nóng , do Trình soạn thảo phần cứng (HWC) khởi xướng, xảy ra khi hoán đổi từ một màn hình bên ngoài sang một màn hình bên ngoài khác có độ phân giải mặc định khác.

    Trong sự kiện cắm nóng, các thẻ điều khiển của bộ đệm khung cũ sẽ được giải phóng khi dữ liệu hiển thị cũ bị hủy phân bổ.

  • Chuyển đổi chế độ hiển thị do SurfaceFlinger khởi tạo, xảy ra khi người dùng thay đổi độ phân giải bằng cài đặt người dùng hoặc ứng dụng thay đổi độ phân giải bằng preferredDisplayModeId .

    Trong quá trình chuyển đổi chế độ hiển thị, các điều khiển cho bộ đệm khung máy khách hiện tại được SurfaceFlinger giải phóng trước khi gọi setActiveConfig hoặc setActiveConfigWithConstraints .

Để tránh các sự cố nghiêm trọng, chẳng hạn như phân mảnh bộ nhớ, trên các thiết bị không dành đủ bộ nhớ cho bộ đệm khung cũ và mới, điều quan trọng là HWC phải ngừng sử dụng bộ đệm khung cũ và giải phóng bất kỳ bộ điều khiển nào đối với các bộ đệm khung này như trong các trường hợp sau:

Việc giải phóng các tay cầm cho phép bộ nhớ bộ đệm khung được giải phóng hoàn toàn trước khi phân bổ bộ đệm khung mới mà SurfaceFlinger thực hiện trong chu kỳ vô hiệu hóa tiếp theo.

Khuyến nghị về quản lý bộ đệm khung

Nếu HWC không giải phóng kịp thời các thẻ điều khiển cho bộ đệm khung cũ thì việc phân bổ bộ đệm khung mới sẽ diễn ra trước khi hủy phân bổ bộ đệm khung cũ. Điều này có thể gây ra các vấn đề nghiêm trọng khi việc phân bổ mới không thành công do bị phân mảnh hoặc các vấn đề khác. Tệ hơn nữa, nếu HWC không giải phóng các tay cầm này thì có thể xảy ra rò rỉ bộ nhớ.

Để tránh thất bại phân bổ nghiêm trọng, hãy làm theo các khuyến nghị sau:

  • Nếu HWC cần tiếp tục sử dụng bộ đệm khung máy khách cũ cho đến khi bộ đệm khung máy khách mới được cung cấp thì điều quan trọng là phải dành đủ bộ nhớ cho cả bộ đệm khung cũ và bộ đệm khung mới, đồng thời có thể chạy các thuật toán chống phân mảnh trên không gian bộ nhớ của bộ đệm khung.

  • Phân bổ một nhóm bộ nhớ dành riêng cho bộ đệm khung tách biệt với phần còn lại của bộ nhớ đệm đồ họa. Điều này rất quan trọng vì giữa việc phân bổ lại và phân bổ lại bộ đệm khung, quy trình của bên thứ ba có thể cố gắng phân bổ bộ nhớ đồ họa. Nếu cùng một nhóm bộ nhớ đồ họa được sử dụng bởi bộ đệm khung và nếu bộ nhớ đồ họa đầy thì quy trình của bên thứ ba có thể chiếm bộ nhớ đồ họa được bộ đệm khung phân bổ trước đó, do đó không đủ bộ nhớ để phân bổ lại bộ đệm khung hoặc có thể phân mảnh không gian bộ nhớ .

Kiểm tra quản lý bộ đệm khung

OEM nên kiểm tra khả năng quản lý bộ nhớ đệm khung máy khách thích hợp trên các bộ chuyển đổi độ phân giải cho thiết bị của họ, được mô tả như sau:

  • Đối với các sự kiện cắm nóng, chỉ cần rút phích cắm và kết nối lại hai màn hình khác nhau có độ phân giải khác nhau.

  • Đối với các công tắc chế độ, hãy sử dụng bài kiểm tra Trình xác minh ModeSwitchingTestActivity CTS để bắt đầu chuyển đổi chế độ nhằm kiểm tra hoạt động của bộ nhớ đệm khung. Thử nghiệm này có thể xác định trực quan các vấn đề khó phát hiện bằng phương pháp lập trình.