Configuração do OpenGLRenderer

Este documento descreve o ajuste de desempenho que você pode fazer para aproveitar ao máximo 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 Tipo Valor padrão Descrição
ro.zygote.disable_gl_preload boolean false Usado para ativar/desativar o pré-carregamento de drivers EGL/GL no Zygote durante a inicialização. Quando esta propriedade for definida como falsa, o Zygote 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, configure esta propriedade como true.

Propriedades para Android 8.0 e inferior

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

Usado para ativar ou desativar a otimização de tesoura. Os valores aceitos são verdadeiro e falso. 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 teste de tesoura GL habilitado e altera o reto de tesoura conforme necessário. Algumas GPUs (por exemplo, a SGX 540) têm melhor desempenho ao alterar o reto de tesoura com mais frequência do que ativar ou desativar o teste de tesoura 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 armazenar várias telas com texturas de 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 20 MB).
ro.hwui.layer_cache_size float 16 Define o tamanho, em megabytes, do cache por camadas de processo. Recomendamos usar um cache grande o suficiente para armazenar 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 armazenar pelo menos uma tela com texturas de 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 4 MB.
ro.hwui.shape_cache_size float 1 Define o tamanho, em megabytes, dos caches de formas por processo. Este valor é usado por vários caches, como círculos e retângulos arredondados. Recomendamos usar um cache grande o suficiente para armazenar pelo menos uma tela de 8 bits. Por exemplo, em um monitor 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 projetadas de texto por processo. Recomendamos usar um cache grande o suficiente para armazenar duas telas com texturas de 8 bits. Por exemplo, em um monitor de 1280x800, 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 dos buffers de renderização por processo. Recomenda-se usar um cache grande o suficiente para armazenar o dobro da tela em 8 bits. Por exemplo, em um monitor de 1280x800, 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 ou 1 bit.
ro.hwui.texture_cache_flush_rate float 0.6 Define a porcentagem do cache de textura a ser mantida após uma liberação de memória. As liberações 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 fontes padrão. O limite superior depende da rapidez com que a GPU pode carregar texturas. Recomendamos usar pelo menos 1.024 pixels, mas no máximo 2.048 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 fontes padrão. O limite superior depende da rapidez com que 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 fontes grandes. Esse cache é usado para glifos muito grandes para caber no cache de fontes padrão. O limite superior depende da rapidez com que 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 fontes grandes. O cache de fontes grande é usado para glifos grandes demais para caber no cache de fontes padrão. O limite superior depende da rapidez com que a GPU pode carregar texturas. Recomendamos usar pelo menos 512 pixels, mas no máximo 2.048 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 gama de texto. Existem quatro opções possíveis:
  • lookup3 : Uma correção baseada em tabelas de pesquisa. A correção 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 gama é diferente para texto em preto e branco (veja os limites abaixo).
  • shader : Uma correção aplicada por um shader GLSL.
As correções gama de pesquisa funcionam melhor em GPUs com matemática de sombreamento limitada. As correções gama de shaders são melhores para economizar memória. Recomendamos usar a técnica 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 gama usado para correção gama de texto. Este valor pode ser ajustado com base no display utilizado pelo dispositivo.
hwui.text_gamma.black_threshold integer 64 Define o limite de luminância abaixo do qual a correção gama de preto é 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 gama de branco é aplicada. O valor deve ser definido no intervalo 0..255.
hwui.use_gpu_pixel_buffers boolean true Usado para ativar ou desativar o uso de PBOs no hardware OpenGL ES 3.0. PBOs são usados ​​pelo renderizador para realizar uploads de textura assíncronos, especialmente para o cache de fontes. Esta propriedade deve permanecer sempre habilitada, mas pode ser desabilitada durante a inicialização ou desenvolvimento se o uso de PBOs causar corrupções ou desempenho péssimo. É por isso que a propriedade não é somente leitura.