VSYNC

אות ה-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 לכל פריים הזמנים אינם משתנים. זמן האחזור הוא שתי פריימים לפחות.

כדי לפתור את הבעיה הזו, אפשר להשתמש בקיזוזים של VSYNC כדי לצמצם את הערך של הקלט לתצוגה את זמן האחזור על ידי הפיכת אות הרכב ואות הרכב ביחס לחומרה VSYNC. זה מתאפשר כי יצירה של אפליקציה + הרכב בדרך כלל נמשכת פחות יותר מ-33 אלפיות השנייה.

התוצאה של היסט VSYNC היא שלושה אותות עם אותה תקופה והיסט שלב:

  • HW_VSYNC_0 – התצוגה הבאה תתחיל להופיע.
  • VSYNC – האפליקציה קוראת את הקלט ויוצרת את הפריים הבא.
  • SF_VSYNC – SurfaceFlinger מתחיל להרכיב לפריים הבא.

עם היסט VSYNC, ה-SurfaceFlinger מקבל את מאגר הנתונים הזמני ומרכיב של הפריים בזמן שהאפליקציה מעבדת בו-זמנית את הקלט והרינדור את המסגרת.

DispSync

DispSync שומר מודל של אירועי VSYNC תקופתיים מבוססי חומרה של מציגים את המודל הזה ומשתמשים בו כדי לבצע קריאות חוזרות (callback) בשלב ספציפי היסט מאירועי VSYNC של החומרה.

DispSync היא לולאת נעילת פאזה (PLL) של תוכנה שיוצרת אותות VSYNC ו-SF_VSYNC שמשמשים את הכוריאוגרף וה-SurfaceFlinger, גם אם לא יקוזז מחומרה של VSYNC.

תהליך DispSync

איור 1. תהליך DispSync

התכונות של DispSync כוללות:

  • קובץ עזר — HW_VSYNC_0.
  • פלט — VSYNC ו-SF_VSYNC.
  • משוב – חותמות הזמן של אותות מהגדר יצאו מ-Harware Composer.

קיזוז VSYNC/הוצאה משימוש

חותמת הזמן של האות של גדרות הוצאה משימוש חייבת להיות זהה ל-HW VSYNC, גם במכשירים שלא משתמשים בשלב ההיסט. אחרת, יכול להיות שהשגיאות יהיו חמורות יותר יותר ממה שהם. בלוחות חכמים יש בדרך כלל דלתא שבה גדר הפריקה הוא הקצה של גישה ישירה לזיכרון (DMA) כדי להציג את הזיכרון, אבל מתג התצוגה עצמו ו-HW VSYNC מאוחר יותר.

היעד PRESENT_TIME_OFFSET_FROM_VSYNC_NS מוגדר cookie BoardConfig.mk. הוא מבוסס על השלט רחוק והלוח של המסך למאפיינים. הזמן מחותמת הזמן של גדר הוצאה משימוש עד ל-HW VSYNC נמדד בננו-שניות.

קיזוזים של VSYNC ו-SF_VSYNC

VSYNC_EVENT_PHASE_OFFSET_NS והקבוצה הערכים SF_VSYNC_EVENT_PHASE_OFFSET_NS מוגדרים באופן שמרני על סמך תרחישים לדוגמה עם עומס גבוה, כמו הרכבה חלקית של GPU במהלך מעבר לחלון או ב-Chrome שגוללים בדף אינטרנט שמכיל אנימציות. ההיסטים האלה מאפשרים זמן רינדור ארוך של האפליקציה וזמן הרכבה ב-GPU ארוך.

ניתן להבחין בזמן אחזור של יותר מאלפית שנייה או שתיים. כדי למזער את זמן האחזור בלי להגדיל משמעותית את ספירות השגיאות, לשלב שגיאה אוטומטית יסודית. בדיקה.