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

Включает или отключает оптимизацию с помощью механизма отсечения (scissor optimization). Допустимые значения: 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 вызывают повреждения или снижение производительности. Именно поэтому это свойство не является доступным только для чтения.