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

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

היתרונות של התכונה 'הכנסה חוזרת שנתית':

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

סקירה כללית

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

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

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

arr-example

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

הטמעה

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

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

DisplayConfiguration.aidl

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

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

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

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

VrrConfig.aidl

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

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

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

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

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

DisplayCommand.frameIntervalNs

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

בדיקה

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

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

touchlatency-app

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

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