Конфигурация OpenGLRenderer

В этом документе описывается настройка производительности, которую вы можете выполнить, чтобы максимально эффективно использовать свое оборудование.

Свойства OpenGLRenderer (libhwui)

В этом документе перечислены все свойства, которые можно использовать для управления конвейером аппаратного 2D-рендеринга 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

Используется для включения или отключения ножничной оптимизации. Принятые значения являются истинными и ложными. Когда оптимизация ножниц включена, OpenGLRenderer пытается свести к минимуму использование ножниц, выборочно включая и отключая тест ножниц GL.

Когда оптимизация отключена, OpenGLRenderer сохраняет включенным тест ножниц GL и при необходимости изменяет ножничный прямоугольник. Некоторые графические процессоры (например, SGX 540) работают лучше при более частом изменении ножничного прямоугольника, чем при частом включении или отключении ножничного теста.

ro.hwui.texture_cache_size float 24 Определяет размер кэша текстур для каждого процесса в мегабайтах. Мы рекомендуем использовать кэш, достаточно большой, чтобы вместить 32-битные текстуры на нескольких экранах (например, на дисплее с разрешением 1280x800 полноэкранный буфер использует около 4 МБ, поэтому размер кэша должен составлять не менее 20 МБ).
ro.hwui.layer_cache_size float 16 Определяет размер кэша каждого уровня процесса в мегабайтах. Мы рекомендуем использовать кеш, достаточно большой, чтобы вместить в 4 раза больше экрана в 32 битах. Например, на дисплее 1280x800 полноэкранный буфер занимает около 4 МБ, поэтому размер кэша должен составлять не менее 16 МБ.
ro.hwui.gradient_cache_size 0.5 float Определяет размер кэша градиентов каждого процесса в мегабайтах. Один градиент обычно занимает от 1 до 4 КБ памяти. Рекомендуется использовать кэш, достаточно большой, чтобы вместить не менее двенадцати градиентов.
ro.hwui.patch_cache_size integer 128 Определяет размер кэша 9 патчей для каждого процесса в килобайтах. Этот кэш содержит только данные вершин и поэтому может быть небольшим. Каждая вершина состоит из 4 чисел с плавающей запятой или 16 байтов.
ro.hwui.path_cache_size float 4 Определяет размер кэша путей каждого процесса в мегабайтах. Мы рекомендуем использовать кеш, достаточно большой, чтобы вместить хотя бы один экран с 32-битными текстурами. Например, на дисплее с разрешением 1280x800 полноэкранный буфер занимает около 4 МБ, поэтому размер кэша должен составлять не менее 4 МБ.
ro.hwui.shape_cache_size float 1 Определяет размер кэшей фигур для каждого процесса в мегабайтах. Это значение используется несколькими кэшами, такими как круги и прямоугольники со скругленными углами. Мы рекомендуем использовать кэш, достаточно большой, чтобы вместить хотя бы один 8-битный экран. Например, на дисплее 1280x800 полноэкранный буфер занимает около 1 МБ, поэтому размер кэша должен составлять не менее 1 МБ.
ro.hwui.drop_shadow_cache_size float 2 Определяет размер кэша теней текста для каждого процесса в мегабайтах. Мы рекомендуем использовать кеш, достаточно большой, чтобы вместить 8-битные текстуры на двух экранах. Например, на дисплее 1280x800 полноэкранный буфер занимает около 1 МБ, поэтому размер кэша должен составлять не менее 2 МБ.
ro.hwui.r_buffer_cache_size float 2 Определяет размер кэша буферов рендеринга для каждого процесса в мегабайтах. Рекомендуется использовать кеш, достаточно большой, чтобы вместить вдвое больше экрана в 8 бит. Например, на дисплее с разрешением 1280x800 полноэкранный буфер занимает около 1 МБ, поэтому размер кэша должен составлять не менее 2 МБ. Кэш может быть меньше, если устройство поддерживает 4-битные или 1-битные трафаретные буферы.
ro.hwui.texture_cache_flush_rate float 0.6 Определяет процент кэша текстур, который сохраняется после очистки памяти. Очистка памяти запускается, когда системе необходимо освободить память для всех приложений. В таких ситуациях мы рекомендуем освободить около 50% кэша.
ro.hwui.text_small_cache_width integer 1024 Определяет ширину в пикселях кэша шрифтов по умолчанию. Верхняя граница зависит от того, насколько быстро графический процессор может загружать текстуры. Мы рекомендуем использовать не менее 1024 пикселей, но не более 2048 пикселей. Вы также должны использовать степень двойки.
ro.hwui.text_small_cache_height integer 256 Определяет высоту в пикселях кэша шрифтов по умолчанию. Верхняя граница зависит от того, насколько быстро графический процессор может загружать текстуры. Мы рекомендуем использовать не менее 256 пикселей, но не более 1024 пикселей.
ro.hwui.text_large_cache_width integer 2048 Определяет ширину в пикселях кэша больших шрифтов. Этот кеш используется для глифов, слишком больших, чтобы поместиться в кеш шрифтов по умолчанию. Верхняя граница зависит от того, насколько быстро графический процессор может загружать текстуры. Мы рекомендуем использовать не менее 2048 пикселей, но не более 4096 пикселей. Вы также должны использовать степень двойки.
ro.hwui.text_large_cache_height integer 512 Определяет высоту в пикселях кэша больших шрифтов. Большой кеш шрифтов используется для глифов, которые слишком велики и не помещаются в кеш шрифтов по умолчанию. Верхняя граница зависит от того, насколько быстро графический процессор может загружать текстуры. Мы рекомендуем использовать не менее 512 пикселей, но не более 2048 пикселей. Вы также должны использовать степень двойки.
hwui.text_gamma_correction string lookup Выбор метода гамма-коррекции текста. Есть четыре возможных варианта:
  • lookup3 : исправление на основе справочных таблиц. Гамма-коррекция различается для черно-белого текста (см. пороговые значения ниже).
  • lookup : исправление, основанное на одной таблице поиска.
  • shader3 : коррекция, применяемая шейдером GLSL. Гамма-коррекция различается для черно-белого текста (см. пороговые значения ниже).
  • shader : коррекция, применяемая шейдером GLSL.
Гамма-коррекция поиска лучше всего работает на графических процессорах с ограниченными математическими возможностями шейдеров. Гамма-коррекция шейдеров лучше всего экономит память. Мы рекомендуем использовать метод 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 Используется для включения или отключения использования PBO на оборудовании OpenGL ES 3.0. PBO используются средством рендеринга для асинхронной загрузки текстур, особенно для кэша шрифтов. Это свойство должно всегда оставаться включенным, но его можно отключить во время запуска или разработки, если использование PBO приводит к повреждениям или плохой производительности. Вот почему свойство не доступно только для чтения.