Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

VSYNC

Tín hiệu VSYNC đồng bộ hóa đường ống hiển thị. Quy trình hiển thị bao gồm kết xuất ứng dụng, thành phần SurfaceFlinger và Trình soạn phần cứng (HWC) trình bày hình ảnh trên màn hình. VSYNC đồng bộ hóa thời gian ứng dụng thức dậy để bắt đầu hiển thị, thời gian SurfaceFlinger thức dậy để tổng hợp màn hình và chu kỳ làm mới màn hình. Đồng bộ hóa này giúp loại bỏ tình trạng giật hình và cải thiện hiệu suất trực quan của đồ họa.

HWC tạo các sự kiện VSYNC và gửi các sự kiện đến SurfaceFlinger thông qua lệnh gọi lại:

typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData,
        hwc2_display_t display, int64_t timestamp);

Điều khiển SurfaceFlinger hay không HWC tạo Vsync sự kiện bằng cách gọi đến setVsyncEnabled . SurfaceFlinger phép setVsyncEnabled để tạo Vsync sự kiện để nó có thể đồng bộ với chu kỳ refresh của màn hình. Khi SurfaceFlinger được đồng bộ hóa với chu kỳ hiển thị refresh, SurfaceFlinger disable setVsyncEnabled để ngăn chặn sự HWC từ tạo Vsync sự kiện. Nếu SurfaceFlinger phát hiện ra sự khác biệt giữa VSYNC thực tế và VSYNC, nó đã thiết lập SurfaceFlinger trước đó sẽ bật lại tạo sự kiện VSYNC.

VSYNC bù đắp

Ứng dụng đồng bộ hóa và SurfaceFlinger kết xuất các vòng lặp với VSYNC phần cứng. Trên một sự kiện Vsync, màn hình bắt đầu hiển thị khung N trong khi SurfaceFlinger bắt đầu hợp lại cửa sổ cho khung N + 1. Việc xử lý ứng dụng cấp phát đầu vào và tạo ra khung N + 2.

Đồng bộ hóa với VSYNC mang lại độ trễ nhất quán. Nó làm giảm các lỗi trong ứng dụng và SurfaceFlinger và giảm thiểu các màn hình bị trôi vào và lệch pha với nhau. Điều này giả định rằng thời gian ứng dụng và SurfaceFlinger trên mỗi khung hình không khác nhau nhiều. Độ trễ ít nhất là hai khung hình.

Để khắc phục điều này, bạn có thể sử dụng hiệu số VSYNC để giảm độ trễ đầu vào đến màn hình bằng cách tạo tín hiệu ứng dụng và thành phần so với VSYNC phần cứng. Điều này có thể thực hiện được vì ứng dụng cộng với thành phần thường mất ít hơn 33 mili giây.

Kết quả của độ lệch VSYNC là ba tín hiệu có cùng chu kỳ và pha bù:

  • HW_VSYNC_0 - Hiển thị bắt đầu cho thấy khung tiếp theo.
  • VSYNC - App đọc đầu vào và tạo ra khung tiếp theo.
  • SF_VSYNC - SurfaceFlinger bắt đầu hợp lại cho khung tiếp theo.

Với VSYNC offset, SurfaceFlinger nhận bộ đệm và ghép khung hình trong khi ứng dụng đồng thời xử lý đầu vào và hiển thị khung hình.

DispSync

DispSync duy trì một mô hình về các sự kiện VSYNC dựa trên phần cứng định kỳ của một màn hình và sử dụng mô hình đó để thực hiện các lệnh gọi lại ở các khoảng lệch pha cụ thể từ các sự kiện VSYNC phần cứng.

DispSync là một vòng lặp khóa pha phần mềm (PLL) tạo ra các tín hiệu VSYNC và SF_VSYNC được sử dụng bởi Biên đạo múa và SurfaceFlinger, ngay cả khi không được bù trừ từ VSYNC phần cứng.

Luồng DispSync

Dòng chảy Hình 1. DispSync

DispSync có những phẩm chất sau:

  • Tài liệu tham khảo - HW_VSYNC_0.
  • Output - Vsync và SF_VSYNC.
  • Phản hồi - Retire timestamps hàng rào tín hiệu từ phần cứng Composer.

VSYNC / Độ lệch nghỉ hưu

Dấu thời gian tín hiệu của hàng rào nghỉ hưu phải khớp với HW VSYNC, ngay cả trên các thiết bị không sử dụng pha bù. Nếu không, các lỗi có vẻ nghiêm trọng hơn chúng. Bảng điều khiển thông minh thường có một vùng đồng bằng nơi hàng rào nghỉ hưu là điểm kết thúc của truy cập bộ nhớ trực tiếp (DMA) để hiển thị bộ nhớ, nhưng việc chuyển đổi hiển thị thực tế và HW VSYNC là một thời gian sau.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS được thiết lập trong của thiết bị BoardConfig.mk makefile. Nó dựa trên bộ điều khiển hiển thị và các đặc điểm của bảng điều khiển. Thời gian từ dấu thời gian hàng rào nghỉ hưu đến tín hiệu HW VSYNC được đo bằng nano giây.

Hiệu số VSYNC và SF_VSYNC

VSYNC_EVENT_PHASE_OFFSET_NSSF_VSYNC_EVENT_PHASE_OFFSET_NS được thiết lập cách thận trọng dựa trên trường hợp sử dụng tải cao, chẳng hạn như thành phần GPU một phần trong quá trình chuyển đổi cửa sổ hoặc Chrome di chuyển qua một trang web chứa hình ảnh động. Các hiệu số này cho phép thời gian hiển thị ứng dụng lâu hơn và thời gian cấu thành GPU dài.

Độ trễ hơn một hoặc hai phần nghìn giây là đáng chú ý. Để giảm thiểu độ trễ mà không làm tăng đáng kể số lỗi, hãy tích hợp tính năng kiểm tra lỗi tự động kỹ lưỡng.