สัญญาณ VSYNC จะซิงค์ไปป์ไลน์การแสดงผล จอแสดงผล ไปป์ไลน์ประกอบด้วยการแสดงผลแอป องค์ประกอบ SurfaceFlinger และฮาร์ดแวร์ Composer (HWC) ที่นำเสนอรูปภาพบนจอแสดงผล VSYNC จะซิงค์ ให้แอปตื่นเพื่อเริ่มแสดงผล เวลาที่ SurfaceFlinger ตื่นนอน และรอบการรีเฟรชการแสดงผล การซิงค์นี้ กำจัดการกระตุกและปรับปรุงประสิทธิภาพด้านการมองเห็นของกราฟิก
HWC สร้างเหตุการณ์ VSYNC และส่งเหตุการณ์ไปยัง SurfaceFlinger ผ่าน Callback คือ
typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData, hwc2_display_t display, int64_t timestamp);
SurfaceFlinger จะควบคุมว่า HWC จะสร้างเหตุการณ์ VSYNC หรือไม่
กำลังโทรหา setVsyncEnabled
เปิดใช้ SurfaceFlinger
setVsyncEnabled
เพื่อสร้างเหตุการณ์ VSYNC เพื่อให้ซิงค์ข้อมูลกับ
รอบการรีเฟรชหน้าจอ เมื่อซิงค์ข้อมูล SurfaceFlinger กับ
รอบการรีเฟรชหน้าจอ, SurfaceFlinger จะปิดใช้ setVsyncEnabled
เพื่อ
หยุด HWC ไม่ให้สร้างเหตุการณ์ VSYNC หาก SurfaceFlinger ตรวจพบ
ความแตกต่างระหว่าง VSYNC จริงกับ VSYNC ที่สร้างขึ้นก่อนหน้านี้
SurfaceFlinger เปิดใช้การสร้างเหตุการณ์ VSYNC อีกครั้งแล้ว
ออฟเซ็ต VSYNC
แอปการซิงค์และ SurfaceFlinger จะแสดงผลวนซ้ำ VSYNC สำหรับฮาร์ดแวร์ ในเหตุการณ์ VSYNC จอแสดงผลจะเริ่มแสดงเฟรม N ขณะที่ SurfaceFlinger เริ่มประกอบหน้าต่างสำหรับเฟรม N+1 แอปจะจัดการ กำลังรออินพุตและสร้างเฟรม N+2
การซิงค์กับ VSYNC ช่วยให้เกิดเวลาในการตอบสนองที่สม่ำเสมอ ช่วยลดข้อผิดพลาดในการ แอปและ SurfaceFlinger และลดจำนวนจอแสดงผลที่ลอยเข้าและออกจากระยะด้วย ระหว่างกัน โดยจะถือว่าแอปและ SurfaceFlinger ต่อเฟรม เวลาจึงอาจแตกต่างกันอย่างมาก เวลาในการตอบสนองต้องมีอย่างน้อย 2 เฟรม
ในการแก้ไข คุณสามารถใช้ออฟเซ็ต VSYNC เพื่อลดอินพุตเป็นจอแสดงผล เวลาในการตอบสนองโดยทำให้สัญญาณแอปและองค์ประกอบสัมพันธ์กับฮาร์ดแวร์ VSYNC เป็นไปได้เนื่องจากแอปและการจัดองค์ประกอบมักจะใช้เวลาน้อยกว่า กว่า 33 มิลลิวินาที
ผลลัพธ์ของออฟเซ็ต VSYNC คือสัญญาณ 3 สัญญาณที่มีช่วงเวลาและออฟเซ็ตเดียวกัน ระยะ:
HW_VSYNC_0
— จอแสดงผลจะเริ่มแสดงเฟรมถัดไปVSYNC
— แอปอ่านอินพุตและสร้างเฟรมถัดไปSF_VSYNC
— SurfaceFlinger เริ่มประกอบสำหรับเฟรมถัดไป
ด้วยออฟเซ็ต VSYNC SurfaceFlinger จะรับบัฟเฟอร์และประกอบองค์ประกอบ เฟรมได้ขณะที่แอปประมวลผลอินพุตและแสดงผลไปพร้อมๆ กัน เฟรม
DispSync
DispSync ยังคงเก็บโมเดลของเหตุการณ์ VSYNC แบบฮาร์ดแวร์เป็นระยะๆ ของ Display และใช้โมเดลนั้นเพื่อเรียกใช้ Callback ในระยะที่เจาะจง จากเหตุการณ์ VSYNC ด้วยฮาร์ดแวร์
DispSync คือลูปล็อกเฟสของซอฟต์แวร์ (PLL) ที่สร้าง สัญญาณ VSYNC และ SF_VSYNC ที่ Choreographer และ SurfaceFlinger ใช้ แม้ว่า ไม่ได้หักลบจาก VSYNC ของฮาร์ดแวร์
DispSync มีคุณสมบัติดังต่อไปนี้
- ข้อมูลอ้างอิง — HW_VSYNC_0
- เอาต์พุต — VSYNC และ SF_VSYNC
- ความคิดเห็น — เลิกใช้การประทับเวลาของสัญญาณรั้วจาก Security Composer
VSYNC/ออฟเซ็ตการเลิกใช้งาน
การประทับเวลาสัญญาณของรั้วเกษียณต้องตรงกับ HW VSYNC แม้จะเป็นอุปกรณ์ ที่ไม่ได้ใช้เฟสออฟเซ็ต มิเช่นนั้น ข้อผิดพลาดจะร้ายแรงกว่า กว่าที่เป็นอยู่ แผงอัจฉริยะมักมีเดลต้าโดยยึดรั้วถอดออก ของการเข้าถึงหน่วยความจําโดยตรง (DMA) เพื่อแสดงหน่วยความจำ แต่สวิตช์การแสดงผลที่แท้จริง และ HW VSYNC ได้เมื่อเวลาผ่านไปแล้ว
มีการตั้งค่า PRESENT_TIME_OFFSET_FROM_VSYNC_NS
ในอุปกรณ์
BoardConfig.mk
Makefile โดยอิงตามตัวควบคุมการแสดงผลและแผง
ลักษณะพิเศษ เวลาจากการประทับเวลาการเกษียณอายุถึง HW VSYNC
จะมีหน่วยเป็นนาโนวินาที
ออฟเซ็ต VSYNC และ SF_VSYNC
VSYNC_EVENT_PHASE_OFFSET_NS
และ
SF_VSYNC_EVENT_PHASE_OFFSET_NS
มีการตั้งค่าเชิงอนุเคราะห์ตาม
กรณีการใช้งานที่มีภาระงานสูง เช่น องค์ประกอบของ GPU บางส่วนในระหว่างการเปลี่ยนหน้าต่าง
หรือ Chrome ที่เลื่อนผ่านหน้าเว็บที่มีภาพเคลื่อนไหว การชดเชยเหล่านี้
ทำให้แอปใช้เวลาแสดงผลแอปได้นาน และ GPU ที่นานขึ้น
เห็นเวลาในการตอบสนองมากกว่า 1-2 มิลลิวินาที เพื่อลดเวลาในการตอบสนอง โดยไม่เพิ่มจำนวนข้อผิดพลาดอย่างเห็นได้ชัด สามารถผสานรวมข้อผิดพลาดอัตโนมัติอย่างละเอียด การทดสอบ