קצב רענון דינמי

החל מגרסה 15 של Android, התכונה 'תדירות רענון דינמית' (ARR) מאפשרת לתדירות הרענון של המסך להתאים את עצמה לתדירות הפריימים של התוכן, באמצעות שלבים נפרדים של VSync.

תכונת ה-ARR מציעה את היתרונות הבאים:

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

  • הפחתת תנודות: ARR מבטל את הצורך בהחלפת מצב, שזו גורם ידוע לתנודות.

סקירה כללית

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

בלוחות ARR, קצב ה-VSync של המסך וקצב הרענון שלו מופרדים, ומאפשרים לשנות את קצב הרענון במצב תצוגה אחד, על סמך קצב העדכון של התוכן. הלוחות יכולים לפעול בקצב רענון שחלקי לאפקט הקריעה (TE) של הלוח. ליצרני ציוד מקורי יש גמישות להטמיע את ARR על סמך הפשרות העדיפות שלהם בנושא צריכת חשמל.

באיור הבא מוצגת תצוגה עם vsyncPeriod של 240 Hz ו-minFrameIntervalNs (תדירות הרענון המקסימלית) של 120 Hz. VSync מתרחש כל 4.16 אלפיות השנייה. אפשר להציג פריים בכל מכפיל של VSync אחרי minFrameIntervalNs מהפריים האחרון.

arr-example

איור 1. דוגמה ל-ARR.

הטמעה

ב-Android 15 יש תמיכה ב-ARR עם ממשקי API חדשים של Hardware Composer (HWC) עם HAL ושינויי פלטפורמות. כדי להפעיל ARR, יצרני ציוד מקורי צריכים לתמוך בשינויים בליבה (kernel) והמערכת במכשירים עם Android מגרסה 15 ואילך, ולהטמיע את גרסה 3 של ממשקי ה-API של android.hardware.graphics.composer3, כפי שמפורט בסעיפים הבאים.

מידע נוסף זמין בהטמעת העזרה של Pixel של ממשקי ה-API שתומכים ב-ARR.

DisplayConfiguration.aidl

ה-API DisplayConfiguration.aidl מציין את הגדרת התצוגה באמצעות מאפייני תצוגה, יחד עם המאפיינים הבאים ל-ARR:

  • אופציונלי vrrConfig: אם ההגדרה מוגדרת, ARR מופעל בהגדרות ספציפיות. אם קובעים את הערך null, מצב התצוגה מוגדר למצבים שאינם ARR, למשל קצב רענון מרובה (MRR). בעזרת המאפיין הזה אפשר להגדיר את המסך כ-MRR או כ-ARR, אבל לא את שניהם.
  • vsyncPeriod: קצב ה-VSync של המסך. במסכים עם ARR, הערך הזה משמש ליצירת קצב הרענון המנותק הנתמך.

    ספקים חייבים להגדיר את הערך DisplayConfiguration.vsyncPeriod לכל המכשירים. במסכים שהם לא ARR, הערך DisplayConfiguration.vsyncPeriod הוא קצב הרענון של המסך. אם המכשיר תומך ב-120Hz, הערך צריך להיות 8.3 אלפיות השנייה.

    במסכים של ARR, הערך DisplayConfiguration.vsyncPeriod הוא תדירות האות של TE. אם הערך של minFrameIntervalNs במכשיר הוא 8.3ms אבל הערך של TE הוא 240Hz, הערך הזה צריך להיות 4.16ms.

VrrConfig.aidl

ה-API של VrrConfig.aidl כולל את המאפיינים הבאים:

  • minFrameIntervalNs: קצב הרענון המקסימלי שהמסך יכול לתמוך בו.
  • NotifyExpectedPresentConfig: הערך הזה נקבע לפי המועד שבו המסך דורש הודעה מראש על פריים שעומד להופיע.

IComposerClient.notifyExpectedPresent מספק רמז למסגרת שאמורה להופיע, כדי שהמסך יוכל להתאים את תקופת הרענון העצמי שלו בהתאם. הערך frameIntervalNs מייצג את הקצב הנוכחי שמגיע אחרי הערך expectedPresentTime. לדוגמה, אם notifyExpectedPresent נקרא עם expectedPresentTime N ו-frameIntervalNs של 16.6ms, אז הפריים הבא מופיע ב-N + 16.6ms אחרי הזמן הנוכחי N. אחרי הזמן הנוכחי N, קצב הפריימים הוא 16.6 אלפיות השנייה עד שיהיו שינויים נוספים.

קוראים לפונקציה IComposerClient.notifyExpectedPresent רק כשמוגדר DisplayConfiguration.notifyExpectedPresentConfig, ואם מתקיים אחד מהתנאים הבאים לתזמון:

  • זמן הצגה מחוץ לקצב: זמן הצגת המסגרת הבאה שונה מקצב הרענון הרגיל של המסך, שמוגדר על ידי frameIntervalNs.
  • זמן הקצוב פג: מרווח הזמן בין המסגרות הקודמות גדול מ-notifyExpectedPresentConfig.timeoutNs או שווה לו.

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs מספק רמז לגבי הקצב של המסגרות הבאות בננו-שניות.

בדיקה

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

משתמשים באפליקציית הבדיקה TouchLatency לבדיקה ידנית, כפי שמתואר באיור 2:

touchlatency-app

איור 2. אפליקציית הבדיקה TouchLatency.

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