Configuración de OpenGLRenderer

Este documento describe el ajuste de rendimiento que puede realizar para aprovechar al máximo su hardware.

Propiedades de OpenGLRenderer (libhwui)

Este documento enumera todas las propiedades que puede usar para controlar la canalización de renderizado acelerado por hardware 2D de Android. Establezca estas propiedades en device.mk como PRODUCT_PROPERTY_OVERRIDES .

Propiedades para todas las versiones de Android

Propiedad Escribe Valor por defecto Descripción
ro.zygote.disable_gl_preload boolean false Se usa para habilitar/deshabilitar la carga previa de controladores EGL/GL en Zygote en el momento del arranque. Cuando esta propiedad se establece en false, Zygote precargará los controladores GL invocando eglGetDisplay(EGL_DEFAULT_DISPLAY). El objetivo es cargar el código de las bibliotecas dinámicas en Zygote para compartirlo con todos los demás procesos. Si un controlador no admite ser compartido, establezca esta propiedad en verdadero.

Propiedades para Android 8.0 y versiones anteriores

Propiedad Escribe Valor por defecto Descripción
ro.hwui.disable_scissor_opt boolean false

Se utiliza para habilitar o deshabilitar la optimización de tijera. Los valores aceptados son verdadero y falso. Cuando la optimización de tijera está habilitada, OpenGLRenderer intenta minimizar el uso de tijera habilitando y deshabilitando selectivamente la prueba de tijera GL.

Cuando la optimización está deshabilitada, OpenGLRenderer mantiene habilitada la prueba de tijera GL y cambia el recto de tijera según sea necesario. Algunas GPU (por ejemplo, la SGX 540) funcionan mejor cuando se cambia el recto de tijera con más frecuencia que cuando se habilita o deshabilita la prueba de tijera con frecuencia.

ro.hwui.texture_cache_size float 24 Define el tamaño, en megabytes, de la caché de texturas por proceso. Recomendamos usar un caché lo suficientemente grande como para contener varias pantallas con texturas de 32 bits (por ejemplo, en una pantalla de 1280x800, un búfer de pantalla completa usa aproximadamente 4 MB, por lo que el caché debe tener al menos 20 MB).
ro.hwui.layer_cache_size float 16 Define el tamaño, en megabytes, de la caché de capas por proceso. Recomendamos usar un caché lo suficientemente grande como para contener 4 veces la pantalla en 32 bits. Por ejemplo, en una pantalla de 1280x800, un búfer de pantalla completa utiliza alrededor de 4 MB, por lo que la memoria caché debe tener al menos 16 MB.
ro.hwui.gradient_cache_size 0.5 float Define el tamaño, en megabytes, de la caché de gradientes por proceso. Un solo gradiente generalmente ocupa entre 1 y 4 KB de memoria. Se recomienda utilizar un caché lo suficientemente grande como para contener al menos doce gradientes.
ro.hwui.patch_cache_size integer 128 Define el tamaño, en kilobytes, de la memoria caché de 9 parches, por proceso. Este caché solo contiene datos de vértices y, por lo tanto, puede mantenerse pequeño. Cada vértice está formado por 4 flotantes o 16 bytes.
ro.hwui.path_cache_size float 4 Define el tamaño, en megabytes, de la caché de rutas por proceso. Recomendamos usar un caché lo suficientemente grande como para contener al menos una pantalla con texturas de 32 bits. Por ejemplo, en una pantalla de 1280x800, un búfer de pantalla completa usa alrededor de 4 MB, por lo que el caché debe tener al menos 4 MB.
ro.hwui.shape_cache_size float 1 Define el tamaño, en megabytes, de las cachés de formas por proceso. Este valor lo utilizan varios cachés, como círculos y rectángulos redondeados. Recomendamos usar un caché lo suficientemente grande como para contener al menos una pantalla de 8 bits. Por ejemplo, en una pantalla de 1280x800, un búfer de pantalla completa utiliza alrededor de 1 MB, por lo que la memoria caché debe tener al menos 1 MB.
ro.hwui.drop_shadow_cache_size float 2 Define el tamaño, en megabytes, de la caché de sombras paralelas de texto por proceso. Recomendamos usar un caché lo suficientemente grande como para contener dos pantallas con texturas de 8 bits. Por ejemplo, en una pantalla de 1280x800, un búfer de pantalla completa utiliza alrededor de 1 MB, por lo que la memoria caché debe tener al menos 2 MB.
ro.hwui.r_buffer_cache_size float 2 Define el tamaño, en megabytes, de la memoria caché de los búferes de procesamiento por proceso. Se recomienda utilizar un caché lo suficientemente grande como para contener el doble de la pantalla en 8 bits. Por ejemplo, en una pantalla de 1280x800, un búfer de pantalla completa usa alrededor de 1 MB, por lo que el caché debe tener al menos 2 MB. La memoria caché puede ser más pequeña si el dispositivo admite búferes de plantilla de 4 o 1 bit.
ro.hwui.texture_cache_flush_rate float 0.6 Define el porcentaje de caché de texturas que se mantendrá después de un vaciado de memoria. Los vaciados de memoria se activan cuando el sistema necesita recuperar memoria en todas las aplicaciones. Recomendamos liberar alrededor del 50% del caché en tales situaciones.
ro.hwui.text_small_cache_width integer 1024 Define el ancho en píxeles de la caché de fuentes predeterminada. El límite superior depende de qué tan rápido la GPU puede cargar texturas. Recomendamos usar al menos 1024 píxeles pero como máximo 2048 píxeles. También debe usar una potencia de dos valores.
ro.hwui.text_small_cache_height integer 256 Define la altura en píxeles de la caché de fuentes predeterminada. El límite superior depende de qué tan rápido la GPU puede cargar texturas. Recomendamos usar al menos 256 píxeles pero como máximo 1024 píxeles.
ro.hwui.text_large_cache_width integer 2048 Define el ancho en píxeles de la caché de fuentes grandes. Este caché se usa para glifos demasiado grandes para caber en el caché de fuente predeterminado. El límite superior depende de qué tan rápido la GPU puede cargar texturas. Recomendamos usar al menos 2048 píxeles pero como máximo 4096 píxeles. También debe usar una potencia de dos valores.
ro.hwui.text_large_cache_height integer 512 Define la altura en píxeles de la caché de fuentes grandes. La caché de fuente grande se usa para glifos demasiado grandes para caber en la caché de fuente predeterminada. El límite superior depende de qué tan rápido la GPU puede cargar texturas. Recomendamos usar al menos 512 píxeles pero como máximo 2048 píxeles. También debe usar una potencia de dos valores.
hwui.text_gamma_correction string lookup Selecciona la técnica de corrección gamma del texto. Hay cuatro opciones posibles:
  • lookup3 : Una corrección basada en tablas de búsqueda. La corrección gamma es diferente para el texto en blanco y negro (consulte los umbrales a continuación).
  • lookup : Una corrección basada en una sola tabla de búsqueda.
  • shader3 : Una corrección aplicada por un shader GLSL. La corrección gamma es diferente para el texto en blanco y negro (consulte los umbrales a continuación).
  • shader : Una corrección aplicada por un shader GLSL.
Las correcciones de búsqueda gamma funcionan mejor en GPU con matemáticas de sombreado limitadas. Las correcciones de sombras gamma son las mejores para ahorrar memoria. Recomendamos utilizar la técnica de lookup predeterminada, que ofrece un buen compromiso en términos de calidad, velocidad y uso de memoria.
hwui.text_gamma float 1.4 Define el valor gamma utilizado para la corrección gamma del texto. Este valor se puede ajustar en función de la pantalla que utiliza el dispositivo.
hwui.text_gamma.black_threshold integer 64 Define el umbral de luminancia por debajo del cual se aplica la corrección gamma negra. El valor debe definirse en el rango 0..255.
hwui.text_gamma.white_threshold integer 192 Define el umbral de luminancia por encima del cual se aplica la corrección gamma blanca. El valor debe definirse en el rango 0..255.
hwui.use_gpu_pixel_buffers boolean true Se utiliza para habilitar o deshabilitar el uso de PBO en hardware OpenGL ES 3.0. El renderizador utiliza los PBO para realizar cargas de textura asíncronas, especialmente para la caché de fuentes. Esta propiedad siempre debe permanecer habilitada, pero se puede deshabilitar durante el inicio o el desarrollo si el uso de PBO provoca daños o un rendimiento deficiente. Esta es la razón por la cual la propiedad no es de solo lectura.