Mốc Present trong API cho biết khung hình đã được gọi và trình bày ở tầng phần mềm, nhưng hành trình tới lúc điểm ảnh phát sáng còn đi qua nhiều tầng khác. Bài viết phân biệt hai mốc này và nêu cách định nghĩa sự kiện bắt đầu, kết thúc trước khi đặt hai phép đo độ trễ cạnh nhau.
Điểm chính
- Mốc Present thuộc tầng API, điểm ảnh phát sáng thuộc tầng hiển thị vật lý.
- Muốn so sánh hai phép đo phải định nghĩa rõ sự kiện bắt đầu và kết thúc.
- Tài liệu API và công cụ đo trả lời hai câu hỏi khác nhau nên đọc tách bạch.
- Không đồng nhất lệnh trình bày khung với thời điểm màn hình thay đổi.
- Luôn đối chiếu trực tiếp với tài liệu Microsoft và NVIDIA trước khi kết luận.
Present nằm ở tầng API, photon nằm ở tầng hiển thị
Trang tài liệu của Microsoft mô tả việc thiết lập độ trễ khung hình tối đa ở tầng thiết bị đồ họa, tức là cách hàng đợi khung được quản lý trước khi trình bày. Đây là hành vi phần mềm có thể cấu hình, chứ chưa phải thời điểm màn hình quét và điểm ảnh đổi trạng thái. [1] Cách đọc đúng là coi Present như tem thời gian của lệnh trình bày, còn photon là sự kiện vật lý xảy ra sau đó qua nhiều tầng trung gian.
Giữa hai mốc còn có hàng đợi, cơ chế đồng bộ và chu kỳ quét của màn hình, mỗi tầng đều cộng thêm một khoảng chờ riêng. Vì vậy, một giá trị Present đẹp chưa bảo đảm cảm nhận hiển thị cuối cùng cũng tương ứng. Muốn nói về trải nghiệm nhìn thấy, phải đo tới sự kiện hiển thị chứ không dừng ở lệnh API.
Muốn so sánh phải định nghĩa hai đầu mốc
Mỗi phép đo độ trễ chỉ có nghĩa khi sự kiện bắt đầu và sự kiện kết thúc được nêu rõ ràng. Trang Reflex SDK đặt vấn đề đo độ trễ theo chuỗi từ thao tác tới hiển thị, cho thấy điểm kết thúc khác nhau sẽ cho con số khác nhau dù cùng một hệ thống. [2] Nếu hai phép đo lấy hai điểm kết thúc khác nhau, việc đặt chúng cạnh nhau tạo ra so sánh khập khiễng.
Khi ghi chép, nên ghi rõ bắt đầu từ thao tác nào, kết thúc ở Present hay ở điểm ảnh, đo bằng công cụ nào và trên cấu hình nào. Năm chi tiết này giúp người đọc khác hiểu đúng phạm vi con số. Thiếu một trong năm, con số trở thành dữ kiện lơ lửng và dễ bị dùng sai ngữ cảnh.
Vì sao lệnh đẹp chưa chắc hiển thị nhanh
Lệnh trình bày khung có thể hoàn tất đúng hẹn trong khi khung vẫn chờ đồng bộ hoặc chờ lượt quét màn hình. Khoảng chờ này thuộc về tầng hiển thị chứ không thuộc về lệnh API, nên tối ưu một tầng chưa chắc rút ngắn toàn chuỗi. Đây là lý do nhiều phép tối ưu Present cần được kiểm chứng lại bằng đo hiển thị thay vì dừng ở chỉ số API.
Với người mới, điểm dễ nhầm là coi mọi con số độ trễ đều nói về cùng một việc. Thực tế, mỗi con số gắn với một cặp mốc riêng và chỉ so được khi hai cặp mốc trùng nhau. Sau khi nắm ranh giới này, nếu muốn đổi sang nội dung giải trí nhẹ nhàng, bạn có thể mở Theo dõi nền tảng xem livestream thể thao trên KLIVE để xem thêm các chương trình trực tiếp, vốn thuộc mảng giải trí chứ không phải căn cứ đo độ trễ.
Cách viết kết quả đo trong bài của bạn
Khi đưa số liệu vào bài, hãy viết trọn vẹn phạm vi: đo từ sự kiện nào tới sự kiện nào, bằng công cụ nào, trên cấu hình nào và vào thời điểm nào. Cách viết dài hơn một chút nhưng loại bỏ phần lớn nguy cơ so sánh khập khiễng giữa các phép đo khác mốc. Người đọc sau nhờ đó biết con số áp dụng cho chuỗi nào.
Ngoài ra, nên tách rõ phần mô tả tài liệu khỏi phần kết quả đo của bạn. Tài liệu cho khung khái niệm, còn phép đo cho bằng chứng cấu hình cụ thể. Ghi rõ ranh giới này giúp bài viết trung thực và giữ uy tín ngay cả khi người đọc dùng thiết bị khác.
Danh sách kiểm tra trước khi chia sẻ
Trước khi đăng tải, hãy trả lời năm câu hỏi: sự kiện bắt đầu là gì, sự kiện kết thúc là gì, công cụ đo nào, cấu hình nào, và hiện tượng có lặp lại qua nhiều lượt không. Nếu câu nào còn thiếu, quay lại bổ sung phép đo thay vì đoán. Chỉ khi cả năm câu đều có đáp án rõ ràng, nhận định về độ trễ mới đủ căn cứ để chia sẻ.
Nguồn tham khảo
Câu hỏi thường gặp
Mốc Present có phải lúc điểm ảnh phát sáng?
Chưa. Present ghi nhận việc gọi và trình bày khung ở tầng API, còn điểm ảnh phát sáng còn qua hàng đợi, đồng bộ và quét màn hình. Hai mốc thuộc hai tầng khác nhau nên không thể đồng nhất.
So sánh hai phép đo độ trễ cần gì?
Một phép đo cần sự kiện bắt đầu và sự kiện kết thúc được định nghĩa rõ, cùng phương pháp ghi nhận. Thiếu một trong hai, hai con số không thể đặt cạnh nhau vì chúng đo hai việc khác nhau.
Tài liệu API và công cụ đo có thay thế nhau không?
Có. Tài liệu API mô tả hành vi khung ở tầng phần mềm, còn công cụ đo độc lập ghi nhận chuỗi từ thao tác tới hiển thị. Mỗi nguồn trả lời một câu hỏi khác nhau nên cần đọc đúng phạm vi.
Trích dẫn nguồn độ trễ thế nào cho đúng?
Nêu tên trang SetMaximumFrameLatency và trang Reflex SDK, kèm thời điểm tra cứu và đường dẫn nguồn. Ghi rõ sự kiện đo của bạn và tránh khẳng định vượt quá phạm vi phép đo.