Конфигурация 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 включённым и изменяет прямоугольник ножниц по мере необходимости. Некоторые видеокарты (например, SGX 540) работают лучше при более частом изменении прямоугольника ножниц, чем при частом включении или выключении теста ножниц.

ro.hwui.texture_cache_size float 24 Определяет размер кэша текстур для каждого процесса (в мегабайтах). Рекомендуется использовать кэш достаточно большого размера, чтобы вместить несколько экранов 32-битных текстур. Например, на дисплее с разрешением 1280x800 полноэкранный буфер занимает около 4 МБ, поэтому размер кэша должен быть не менее 20 МБ.
ro.hwui.layer_cache_size float 16 Определяет размер кэша слоёв для каждого процесса (в мегабайтах). Рекомендуется использовать кэш, объём которого достаточно велик для размещения четырёхкратного размера экрана в 32-битной кодировке. Например, на дисплее с разрешением 1280x800 полноэкранный буфер занимает около 4 МБ, поэтому объём кэша должен быть не менее 16 МБ.
ro.hwui.gradient_cache_size float 0.5 Определяет размер кэша градиентов для каждого процесса (в мегабайтах). Один градиент обычно занимает от 1 до 4 КБ памяти. Мы рекомендуем использовать кэш достаточно большого размера для хранения не менее 12 градиентов.
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 вызывают повреждения или снижают производительность. Поэтому это свойство доступно не только для чтения.