Configuração do OpenGLRenderer

Este documento descreve o ajuste de desempenho que você pode fazer para obter o máximo de seu hardware.

Propriedades do OpenGLRenderer (libhwui)

Este documento lista todas as propriedades que você pode usar para controlar o pipeline de renderização acelerada por hardware 2D do Android. Defina essas propriedades no device.mk como PRODUCT_PROPERTY_OVERRIDES .

Propriedades para todas as versões do Android

Propriedade Modelo Valor padrão Descrição
ro.zygote.disable_gl_preload boolean false Usado para habilitar/desabilitar o pré-carregamento de drivers EGL/GL no Zygote no momento da inicialização. Quando esta propriedade é definida como false, o Zygote irá pré-carregar os drivers GL invocando eglGetDisplay(EGL_DEFAULT_DISPLAY). O objetivo é carregar o código das bibliotecas dinâmicas no Zygote para compartilhá-lo com todos os outros processos. Se um driver não suportar o compartilhamento, defina essa propriedade como true.

Propriedades para Android 8.0 e inferior

Propriedade Modelo Valor padrão Descrição
ro.hwui.disable_scissor_opt boolean false

Usado para habilitar ou desabilitar a otimização de tesoura. Os valores aceitos são true e false. Quando a otimização de tesoura está habilitada, o OpenGLRenderer tenta minimizar o uso de tesoura ativando e desativando seletivamente o teste de tesoura GL.

Quando a otimização está desabilitada, o OpenGLRenderer mantém o GL scissor test habilitado e altera o scissor rect conforme necessário. Algumas GPUs (por exemplo, a SGX 540) apresentam melhor desempenho ao alterar o scissor rect com mais frequência do que ativar ou desativar o scissor test com frequência.

ro.hwui.texture_cache_size float 24 Define o tamanho, em megabytes, do cache de textura por processo. Recomendamos usar um cache grande o suficiente para conter várias telas com texturas de 32 bits (por exemplo, em uma tela de 1280x800, um buffer de tela inteira usa cerca de 4 MB, portanto o cache deve ter pelo menos 20 MB).
ro.hwui.layer_cache_size float 16 Define o tamanho, em megabytes, do cache de camadas por processo. Recomendamos usar um cache grande o suficiente para conter 4 vezes a tela em 32 bits. Por exemplo, em uma tela de 1280x800, um buffer de tela cheia usa cerca de 4 MB, portanto, o cache deve ter pelo menos 16 MB.
ro.hwui.gradient_cache_size 0.5 float Define o tamanho, em megabytes, do cache de gradientes por processo. Um único gradiente geralmente ocupa entre 1 e 4 KB de memória. Recomenda-se usar um cache grande o suficiente para conter pelo menos doze gradientes.
ro.hwui.patch_cache_size integer 128 Define o tamanho, em kilobytes, do cache de 9 patches, por processo. Esse cache contém apenas dados de vértice e, portanto, pode ser mantido pequeno. Cada vértice é composto por 4 floats, ou 16 bytes.
ro.hwui.path_cache_size float 4 Define o tamanho, em megabytes, do cache de caminhos por processo. Recomendamos usar um cache grande o suficiente para conter pelo menos uma tela de texturas de 32 bits. Por exemplo, em uma tela de 1280x800, um buffer de tela inteira usa cerca de 4 MB, portanto, o cache deve ter pelo menos 4 MB.
ro.hwui.shape_cache_size float 1 Define o tamanho, em megabytes, dos caches de formas por processo. Esse valor é usado por vários caches, como círculos e retângulos arredondados. Recomendamos usar um cache grande o suficiente para conter pelo menos uma tela de 8 bits. Por exemplo, em uma tela de 1280x800, um buffer de tela inteira usa cerca de 1 MB, portanto, o cache deve ter pelo menos 1 MB.
ro.hwui.drop_shadow_cache_size float 2 Define o tamanho, em megabytes, do cache de sombras de texto por processo. Recomendamos usar um cache grande o suficiente para conter duas telas de texturas de 8 bits. Por exemplo, em uma tela de 1280 x 800, um buffer de tela inteira usa cerca de 1 MB, portanto, o cache deve ter pelo menos 2 MB.
ro.hwui.r_buffer_cache_size float 2 Define o tamanho, em megabytes, do cache de buffers de renderização por processo. Recomenda-se usar um cache grande o suficiente para conter o dobro da tela em 8 bits. Por exemplo, em uma tela de 1280 x 800, um buffer de tela inteira usa cerca de 1 MB, portanto, o cache deve ter pelo menos 2 MB. O cache pode ser menor se o dispositivo suportar buffers de estêncil de 4 bits ou 1 bit.
ro.hwui.texture_cache_flush_rate float 0.6 Define a porcentagem do cache de textura a ser mantida após um flush de memória. As descargas de memória são acionadas quando o sistema precisa recuperar memória em todos os aplicativos. Recomendamos liberar cerca de 50% do cache nessas situações.
ro.hwui.text_small_cache_width integer 1024 Define a largura em pixels do cache de fonte padrão. O limite superior depende de quão rápido a GPU pode carregar texturas. Recomendamos usar pelo menos 1024 pixels, mas no máximo 2048 pixels. Você também deve usar uma potência de dois valores.
ro.hwui.text_small_cache_height integer 256 Define a altura em pixels do cache de fonte padrão. O limite superior depende de quão rápido a GPU pode carregar texturas. Recomendamos usar pelo menos 256 pixels, mas no máximo 1024 pixels.
ro.hwui.text_large_cache_width integer 2048 Define a largura em pixels do cache de fonte grande. Esse cache é usado para glifos muito grandes para caber no cache de fonte padrão. O limite superior depende de quão rápido a GPU pode carregar texturas. Recomendamos usar pelo menos 2.048 pixels, mas no máximo 4.096 pixels. Você também deve usar uma potência de dois valores.
ro.hwui.text_large_cache_height integer 512 Define a altura em pixels do cache de fonte grande. O cache de fonte grande é usado para glifos muito grandes para caber no cache de fonte padrão. O limite superior depende de quão rápido a GPU pode carregar texturas. Recomendamos usar pelo menos 512 pixels, mas no máximo 2048 pixels. Você também deve usar uma potência de dois valores.
hwui.text_gamma_correction string lookup Seleciona a técnica de correção de gama de texto. Há quatro escolhas possíveis:
  • lookup3 : Uma correção baseada em tabelas de pesquisa. A correção de gama é diferente para texto em preto e branco (veja os limites abaixo).
  • lookup : uma correção baseada em uma única tabela de pesquisa.
  • shader3 : Uma correção aplicada por um shader GLSL. A correção de gama é diferente para texto em preto e branco (veja os limites abaixo).
  • shader : Uma correção aplicada por um shader GLSL.
As correções de gama de pesquisa funcionam melhor em GPUs com matemática de sombreamento limitada. As correções de gama do sombreador são melhores para economizar memória. Recomendamos usar a técnica de lookup padrão, que oferece um bom compromisso em termos de qualidade, velocidade e uso de memória.
hwui.text_gamma float 1.4 Define o valor de gama usado para correção de gama de texto. Esse valor pode ser ajustado com base na exibição usada pelo dispositivo.
hwui.text_gamma.black_threshold integer 64 Define o limite de luminância abaixo do qual a correção de gama preta é aplicada. O valor deve ser definido no intervalo 0..255.
hwui.text_gamma.white_threshold integer 192 Define o limite de luminância acima do qual a correção de gama branca é aplicada. O valor deve ser definido no intervalo 0..255.
hwui.use_gpu_pixel_buffers boolean true Usado para habilitar ou desabilitar o uso de PBOs no hardware OpenGL ES 3.0. Os PBOs são usados ​​pelo renderizador para realizar uploads de texturas assíncronas, especialmente para o cache de fontes. Esta propriedade deve sempre permanecer habilitada, mas pode ser desabilitada durante a ativação ou desenvolvimento se o uso de PBOs causar corrupções ou desempenho ruim. É por isso que a propriedade não é somente leitura.