הגדרת OpenGLRenderer

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

מאפייני OpenGLRenderer‏ (libhwui)

במסמך הזה מפורטים כל המאפיינים שאפשר להשתמש בהם כדי לשלוט בצינור עיבוד הנתונים של Android לעיבוד גרפי דו-מימדי שמשופר באמצעות חומרה. מגדירים את המאפיינים האלה ב-device.mk בתור PRODUCT_PROPERTY_OVERRIDES.

נכסים לכל הגרסאות של Android

נכס סוג ערך ברירת מחדל תיאור
ro.zygote.disable_gl_preload boolean false משמש להפעלה או להשבתה של טעינה מראש של מנהלי EGL/GL ב-Zygote בזמן האתחול. כשהמאפיין הזה מוגדר כ-false, Zygote יאתחלל מראש את מנהלי ה-GL באמצעות קריאה ל-eglGetDisplay(EGL_DEFAULT_DISPLAY). המטרה היא לטעון את הקוד של הספריות הדינמיות ב-Zygote כדי לשתף אותו עם כל שאר התהליכים. אם אין תמיכה בשיתוף של הנהג, צריך להגדיר את המאפיין הזה כ-true.

מאפיינים ל-Android מגרסה 8.0 ומטה

נכס סוג ערך ברירת מחדל תיאור
ro.hwui.disable_scissor_opt boolean false

משמש להפעלה או להשבתה של אופטימיזציית Scissor. הערכים הקבילים הם true ו-false. כשאופטימיזציית scissor מופעלת, OpenGLRenderer מנסה לצמצם את השימוש ב-scissoring על ידי הפעלה וסגירה סלקטיביות של בדיקת ה-GL scissor.

כשהאופטימיזציה מושבתת, OpenGLRenderer משאיר את בדיקת ה-GL scissor מופעלת ומשנה את scissor rect לפי הצורך. בחלק ממעבד הגרפיקה (למשל, SGX 540), הביצועים טובים יותר כשמשנים את ריבוע החיתוך בתדירות גבוהה יותר מאשר מפעילים או משביתים את בדיקת החיתוך בתדירות גבוהה.

ro.hwui.texture_cache_size float 24 הגדרת הגודל, במגה-בייט, של מטמון הטקסטורות לכל תהליך. מומלץ להשתמש במטמון גדול מספיק כדי להכיל כמה מסכים של טקסטורות 32 ביט (לדוגמה, במסך 1280x800, מאגר של מסך מלא משתמש בכ-4MB, כך שהמטמון צריך להיות בנפח של 20MB לפחות).
ro.hwui.layer_cache_size float 16 הגדרת הגודל, במגה-בייט, של המטמון של השכבות לכל תהליך. מומלץ להשתמש במטמון גדול מספיק כדי להכיל 4 פעמים את המסך ב-32 ביט. לדוגמה, במסך בגודל 1280x800, מאגר נתונים במסך מלא משתמש בכ-4MB, כך שצריך להגדיר למטמון נפח של 16MB לפחות.
ro.hwui.gradient_cache_size 0.5 float הגדרת הגודל, במגה-בייט, של מטמון המעברים לכל תהליך. בדרך כלל, שיפוע יחיד תופס בין 1 ל-4KB של זיכרון. מומלץ להשתמש במטמון גדול מספיק כדי להכיל לפחות 12 מעברי צבע.
ro.hwui.patch_cache_size integer 128 הגדרת הגודל, בקילובייט, של המטמון של 9 התיקונים לכל תהליך. המטמון הזה מכיל רק נתוני קודקודים, ולכן אפשר לשמור אותו קטן. כל קודקוד מורכב מ-4 מספרי float או מ-16 בייטים.
ro.hwui.path_cache_size float 4 הגדרת הגודל, במגה-בייט, של המטמון של הנתיבים לכל תהליך. מומלץ להשתמש במטמון גדול מספיק כדי להכיל לפחות מסך אחד של טקסטורות ב-32 ביט. לדוגמה, במסך בגודל 1280x800, מאגר נתונים במסך מלא משתמש בכ-4MB, כך שצריך להגדיר למטמון נפח של 4MB לפחות.
ro.hwui.shape_cache_size float 1 הגדרת הגודל, במגה-בייט, של מטמון הצורות לכל תהליך. הערך הזה משמש כמה מטמונים, כמו עיגולים ומלבנים מעוגלים. מומלץ להשתמש במטמון גדול מספיק כדי להכיל לפחות מסך אחד של 8 ביט. לדוגמה, במסך בגודל 1280x800, מאגר בגודל מסך מלא משתמש בכ-1MB, ולכן נפח המטמון צריך להיות לפחות 1MB.
ro.hwui.drop_shadow_cache_size float 2 הגדרת הגודל, במגה-בייט, של המטמון של צללי הטקסט לכל תהליך. מומלץ להשתמש במטמון גדול מספיק כדי להכיל שתי טקסטורות של 8 ביט שמיועדות לשני מסכים. לדוגמה, במסך בגודל 1280x800, מאגר נתונים במסך מלא משתמש ב-1MB בערך, כך שצריך להגדיר למטמון נפח של 2MB לפחות.
ro.hwui.r_buffer_cache_size float 2 הגדרת הגודל, במגה-בייט, של מטמון מאגרי ה-render לכל תהליך. מומלץ להשתמש במטמון גדול מספיק כדי להכיל פי שניים מהמסך ב-8 ביט. לדוגמה, במסך בגודל 1280x800, מאגר נתונים במסך מלא משתמש ב-1MB בערך, ולכן נפח המטמון צריך להיות לפחות 2MB. אם המכשיר תומך במאגרי סטנסיל של 4 ביט או של ביט אחד, המטמון יכול להיות קטן יותר.
ro.hwui.texture_cache_flush_rate float 0.6 מגדיר את האחוז של מטמון הטקסטורות שצריך לשמור אחרי שטיפה של הזיכרון. שטיפה של זיכרון מופעלת כשהמערכת צריכה לפנות זיכרון בכל האפליקציות. במקרים כאלה, מומלץ לפנות כ-50% מהמטמון.
ro.hwui.text_small_cache_width integer 1024 הגדרת רוחב מטמון הגופנים שמוגדר כברירת מחדל בפיקסלים. הגבול העליון תלוי במהירות שבה ה-GPU יכול להעלות טקסטורות. מומלץ להשתמש בתמונה בגודל של 1,024 פיקסלים לפחות, אבל לא יותר מ-2,048 פיקסלים. מומלץ גם להשתמש בערך של חזקה של שתיים.
ro.hwui.text_small_cache_height integer 256 הגדרת הגובה בפיקסלים של מטמון הגופנים שמוגדר כברירת מחדל. הגבול העליון תלוי במהירות שבה ה-GPU יכול להעלות טקסטורות. מומלץ להשתמש בתמונה בגודל של 256 פיקסלים לפחות, אבל לא יותר מ-1,024 פיקסלים.
ro.hwui.text_large_cache_width integer 2048 הגדרת הרוחב בפיקסלים של מטמון הגופן הגדול. המטמון הזה משמש לגליפים גדולים מדי מכדי שיוכלו להיכנס למטמון הגופנים שמוגדר כברירת מחדל. הגבול העליון תלוי במהירות שבה ה-GPU יכול להעלות טקסטורות. מומלץ להשתמש בתמונה בגודל של 2,048 פיקסלים לפחות, אבל לא יותר מ-4,096 פיקסלים. מומלץ גם להשתמש בערך של חזקה של שתיים.
ro.hwui.text_large_cache_height integer 512 הגדרת הגובה בפיקסלים של מטמון הגופנים הגדול. מטמון הגופנים הגדול משמש לגליפים גדולים מדי מכדי שיוכלו להיכנס למטמון הגופנים שמוגדר כברירת מחדל. הגבול העליון תלוי במהירות שבה ה-GPU יכול להעלות טקסטורות. מומלץ להשתמש בתמונה בגודל של 512 פיקסלים לפחות, אבל לא יותר מ-2,048 פיקסלים. מומלץ גם להשתמש בערך של חזקה של שתיים.
hwui.text_gamma_correction string lookup בחירת שיטת תיקון הגאמה של הטקסט. יש ארבע אפשרויות:
  • lookup3: תיקון על סמך טבלאות חיפוש. תיקון הגאמה שונה לטקסט שחור ולבן (ראו ערכי הסף בהמשך).
  • lookup: תיקון שמבוסס על טבלת חיפוש אחת.
  • shader3: תיקון שהוחל על ידי שדרן GLSL. תיקון הגאמה שונה לטקסט בשחור לבן (ראו ערכי הסף בהמשך).
  • shader: תיקון שהוחל על ידי שדרן GLSL.
תיקוני גאמה של Lookup פועלים בצורה הטובה ביותר ב-GPU עם מתמטיקה מוגבלת של Shader. תיקוני גממה של Shader הם הדרך הטובה ביותר לחסוך בזיכרון. מומלץ להשתמש בשיטת ברירת המחדל lookup, שמציעה פשרה טובה מבחינת איכות, מהירות ושימוש בזיכרון.
hwui.text_gamma float 1.4 הגדרת ערך הגאמה שמשמש לתיקון הגאמה של טקסט. אפשר לשנות את הערך הזה בהתאם למסך שבו נעשה שימוש במכשיר.
hwui.text_gamma.black_threshold integer 64 הגדרת סף הלחות שמתחתיו חלה תיקון גממה שחור. הערך חייב להיות מוגדר בטווח 0 עד 255.
hwui.text_gamma.white_threshold integer 192 הגדרת סף הלחות שמעליו חל תיקון גממה לבן. הערך חייב להיות מוגדר בטווח 0 עד 255.
hwui.use_gpu_pixel_buffers boolean true משמש להפעלה או להשבתה של השימוש ב-PBOs בחומרה של OpenGL ES 3.0. ה-PBO משמשים את ה-renderer לביצוע העלאות אסינכררוניות של טקסטורות, במיוחד למטמון הגופנים. תמיד צריך להשאיר את המאפיין הזה מופעל, אבל אפשר להשבית אותו במהלך ההרצה הראשונית או הפיתוח אם השימוש ב-PBO גורם לפגיעה בנתונים או לביצועים גרועים. לכן הנכס לא מוגדר לקריאה בלבד.