Конфигурация 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

Включает или отключает оптимизацию отсечения. Допустимые значения: true и false. Если оптимизация ножниц включена, OpenGLRenderer пытается свести к минимуму использование ножниц, выборочно включая и отключая тест ножниц GL.

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

ro.hwui.texture_cache_size float 24 Определяет размер кеша текстур для каждого процесса в мегабайтах. Мы рекомендуем использовать кеш, в котором можно хранить несколько экранов 32-битных текстур. Например, на экране с разрешением 1280 x 800 буфер полноэкранного режима занимает около 4 МБ, поэтому размер кеша должен быть не менее 20 МБ.
ro.hwui.layer_cache_size float 16 Определяет размер кеша слоев для каждого процесса в мегабайтах. Мы рекомендуем использовать кеш, в четыре раза превышающий размер экрана в 32-битном режиме. Например, на экране с разрешением 1280 x 800 буфер полноэкранного режима занимает около 4 МБ, поэтому размер кеша должен быть не менее 16 МБ.
ro.hwui.gradient_cache_size float 0.5 Определяет размер кеша градиентов для каждого процесса в мегабайтах. Один градиент обычно занимает от 1 до 4 КБ памяти. Мы рекомендуем использовать кеш, в котором можно хранить не менее 12 градиентов.
ro.hwui.patch_cache_size integer 128 Определяет размер кеша 9-patch-изображений в килобайтах для каждого процесса. В этом кеше хранятся только данные вершин, поэтому он может быть небольшим. Каждая вершина состоит из четырех чисел с плавающей запятой, или 16 байтов.
ro.hwui.path_cache_size float 4 Определяет размер кеша путей для каждого процесса в мегабайтах. Мы рекомендуем использовать кеш, в котором можно хранить хотя бы один экран 32-битных текстур. Например, для экрана с разрешением 1280 x 800 пикселей полноэкранный буфер использует около 4 МБ, поэтому размер кеша должен быть не менее 4 МБ.
ro.hwui.shape_cache_size float 1 Определяет размер кеша фигур для каждого процесса в мегабайтах. Это значение используется несколькими кешами, например кругами и закругленными прямоугольниками. Мы рекомендуем использовать кеш, в котором можно хранить хотя бы один 8-битный экран. Например, на экране с разрешением 1280 x 800 буфер полноэкранного режима занимает около 1 МБ, поэтому размер кеша должен быть не менее 1 МБ.
ro.hwui.drop_shadow_cache_size float 2 Определяет размер кеша теней текста для каждого процесса в мегабайтах. Мы рекомендуем использовать кеш, в котором можно хранить две страницы 8-битных текстур. Например, на экране с разрешением 1280 x 800 полноэкранный буфер занимает около 1 МБ, поэтому размер кеша должен быть не менее 2 МБ.
ro.hwui.r_buffer_cache_size float 2 Определяет размер кеша буферов отрисовки для каждого процесса в мегабайтах. Мы рекомендуем использовать кеш, размер которого в два раза превышает размер экрана в 8 битах. Например, на экране с разрешением 1280 x 800 буфер полноэкранного режима занимает около 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 Включает или отключает использование объектов буфера пикселей на оборудовании с OpenGL ES 3.0. Рендерер использует PBO для асинхронной загрузки текстур, особенно для кеша шрифтов. Это свойство всегда должно быть включено, но его можно отключить во время запуска или разработки, если PBO приводят к повреждению данных или снижению производительности. Поэтому ресурс не доступен только для чтения.