Configuración de OpenGLRenderer

En este documento, se describe el ajuste de rendimiento que puedes realizar para aprovechar al máximo tu hardware.

Propiedades de OpenGLRenderer (libhwui)

En este documento, se enumeran todas las propiedades que puedes usar para controlar la canalización de renderización con aceleración de hardware 2D de Android. Establece estas propiedades en device.mk como PRODUCT_PROPERTY_OVERRIDES.

Propiedades para todas las versiones de Android

Propiedad Tipo Valor predeterminado Descripción
ro.zygote.disable_gl_preload boolean false Se usa para habilitar o inhabilitar la carga previa de controladores EGL/GL en Zygote durante el inicio. Cuando esta propiedad se establezca como "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 conductor no admite que se comparta, establece esta propiedad como "true".

Propiedades para Android 8.0 y versiones anteriores

Propiedad Tipo Valor predeterminado Descripción
ro.hwui.disable_scissor_opt boolean false

Se usa para habilitar o inhabilitar la optimización de tijeras. Los valores aceptados son verdadero y falso. Cuando se habilita la optimización de tijeras, OpenGLRenderer intenta minimizar el uso de tijeras habilitando y deshabilitando de forma selectiva la prueba de tijeras de GL.

Cuando se inhabilita la optimización, OpenGLRenderer mantiene habilitada la prueba de tijeras de GL y cambia el rectángulo de tijeras según sea necesario. Algunas GPUs (por ejemplo, la SGX 540) tienen un mejor rendimiento cuando se cambia el rectángulo de tijeras con más frecuencia que cuando se habilita o inhabilita la prueba de tijeras con frecuencia.

ro.hwui.texture_cache_size float 24 Define el tamaño, en megabytes, de la caché de texturas por proceso. Te recomendamos que uses una memoria caché lo suficientemente grande como para contener varias pantallas de texturas de 32 bits (por ejemplo, en una pantalla de 1280 x 800, un búfer de pantalla completa usa alrededor de 4 MB, por lo que la memoria caché debe ser de al menos 20 MB).
ro.hwui.layer_cache_size float 16 Define el tamaño, en megabytes, de la caché de capas por proceso. Te recomendamos que uses una caché lo suficientemente grande como para contener 4 veces la pantalla en 32 bits. Por ejemplo, en una pantalla de 1280 x 800, un búfer de pantalla completa usa alrededor de 4 MB, por lo que la caché debe ser de 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. Por lo general, un solo gradiente ocupa entre 1 y 4 KB de memoria. Se recomienda usar una 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 caché de 9 parches por proceso. Esta caché solo contiene datos de vértices y, por lo tanto, se puede mantener pequeña. Cada vértice está formado por 4 números de punto flotante 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 una cache que sea lo suficientemente grande como para contener al menos una pantalla de texturas de 32 bits. Por ejemplo, en una pantalla de 1280 x 800, un búfer de pantalla completa usa alrededor de 4 MB, por lo que la caché debe ser de 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. Varios elementos de la caché, como círculos y rectángulos redondeados, usan este valor. Recomendamos usar una caché lo suficientemente grande como para contener al menos una pantalla de 8 bits. Por ejemplo, en una pantalla de 1280 x 800, un búfer de pantalla completa usa alrededor de 1 MB, por lo que la caché debe ser de al menos 1 MB.
ro.hwui.drop_shadow_cache_size float 2 Define el tamaño, en megabytes, de la caché de sombras proyectadas de texto por proceso. Recomendamos usar una caché lo suficientemente grande como para contener dos pantallas de texturas de 8 bits. Por ejemplo, en una pantalla de 1280 x 800, un búfer de pantalla completa usa alrededor de 1 MB, por lo que la caché debe ser de al menos 2 MB.
ro.hwui.r_buffer_cache_size float 2 Define el tamaño, en megabytes, de la caché de los búferes de renderización por proceso. Se recomienda usar una caché lo suficientemente grande como para contener el doble de la pantalla en 8 bits. Por ejemplo, en una pantalla de 1280 x 800, un búfer de pantalla completa usa alrededor de 1 MB, por lo que la caché debe ser de al menos 2 MB. La caché puede ser más pequeña si el dispositivo admite búferes de plantilla de 4 bits o 1 bit.
ro.hwui.texture_cache_flush_rate float 0.6 Define el porcentaje de la caché de texturas que se conservará después de una limpieza de memoria. Las limpiezas de memoria se activan cuando el sistema necesita recuperar memoria en todas las aplicaciones. En esas situaciones, te recomendamos que liberes alrededor del 50% de la caché.
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 la rapidez con la que la GPU puede subir texturas. Recomendamos usar al menos 1,024 píxeles, pero como máximo 2,048. También debes usar un valor de potencia de dos.
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 la rapidez con la que la GPU puede subir texturas. Recomendamos usar al menos 256 píxeles, pero no más de 1,024.
ro.hwui.text_large_cache_width integer 2048 Define el ancho en píxeles de la caché de fuentes grandes. Esta caché se usa para glifos demasiado grandes para caber en la caché de fuentes predeterminada. El límite superior depende de la rapidez con la que la GPU puede subir texturas. Te recomendamos que uses al menos 2,048 píxeles, pero no más de 4,096. También debes usar un valor de potencia de dos.
ro.hwui.text_large_cache_height integer 512 Define la altura en píxeles de la caché de fuentes grandes. La caché de fuentes grandes se usa para glifos demasiado grandes para caber en la caché de fuentes predeterminada. El límite superior depende de la rapidez con la que la GPU puede subir texturas. Recomendamos usar al menos 512 píxeles, pero no más de 2,048. También debes usar un valor de potencia de dos.
hwui.text_gamma_correction string lookup Selecciona la técnica de corrección de gamma del texto. Hay cuatro opciones posibles:
  • lookup3: Una corrección basada en tablas de consulta. La corrección de gamma es diferente para el texto en negro y en blanco (consulta los umbrales a continuación).
  • lookup: Es una corrección basada en una sola tabla de consulta.
  • shader3: Es una corrección que aplica un sombreador GLSL. La corrección de gamma es diferente para el texto en blanco y negro (consulta los umbrales a continuación).
  • shader: Es una corrección que aplica un sombreador GLSL.
Las correcciones de gamma de búsqueda funcionan mejor en GPUs con matemáticas de sombreadores limitadas. Las correcciones de gamma del sombreador son las mejores para ahorrar memoria. Te recomendamos que uses la técnica predeterminada de lookup, que ofrece un buen equilibrio en términos de calidad, velocidad y uso de memoria.
hwui.text_gamma float 1.4 Define el valor de gamma que se usa para la corrección de gamma del texto. Este valor se puede ajustar según la pantalla que use el dispositivo.
hwui.text_gamma.black_threshold integer 64 Define el umbral de luminancia por debajo del cual se aplica la corrección de gamma de negro. El valor debe definirse en el rango de 0 a 255.
hwui.text_gamma.white_threshold integer 192 Define el umbral de luminancia por encima del cual se aplica la corrección de gamma blanca. El valor debe definirse en el rango de 0 a 255.
hwui.use_gpu_pixel_buffers boolean true Se usa para habilitar o inhabilitar el uso de PBOs en el hardware de OpenGL ES 3.0. El renderizador usa los PBOs para realizar cargas de texturas asíncronas, en especial para la caché de fuentes. Esta propiedad siempre debe permanecer habilitada, pero se puede inhabilitar durante el inicio o el desarrollo si el uso de los PBOs causa daños o un rendimiento deficiente. Por este motivo, la propiedad no es de solo lectura.