Configuração do OpenGLRenderer

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

Propriedades do OpenGLRenderer (libhwui)

Este documento lista todas as propriedades que podem ser usadas para controlar o pipeline de renderização 2D com aceleração de hardware 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 no momento da inicialização. Quando essa propriedade é definida como falsa, o Zygote carrega os drivers GL antes de chamar 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 tiver suporte para compartilhamento, defina essa propriedade como "true".

Propriedades para o Android 8.0 e versões anteriores

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 "true" e "false". Quando a otimização de tesoura está ativada, o OpenGLRenderer tenta minimizar o uso de tesoura ativando e desativando seletivamente o teste de tesoura do GL.

Quando a otimização está desativada, o OpenGLRenderer mantém o teste de tesoura GL ativado e muda o retângulo de tesoura conforme necessário. Algumas GPUs (por exemplo, a SGX 540) têm melhor desempenho ao mudar o retângulo 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 de texturas de 32 bits. Por exemplo, em uma tela de 1280x800, um buffer de tela cheia usa cerca de 4 MB, então o cache precisa 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 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 precisa 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. É recomendável usar um cache grande o suficiente para armazenar pelo menos 12 gradientes.
ro.hwui.patch_cache_size integer 128 Define o tamanho, em kilobytes, do cache de 9 patches por processo. Esse cache armazena apenas dados de vértices e, portanto, pode ser mantido pequeno. Cada vértice é feito de 4 números de ponto flutuante 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 de texturas de 32 bits. Por exemplo, em uma tela de 1280x800, um buffer de tela cheia usa cerca de 4 MB. Portanto, o cache precisa 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 armazenar pelo menos uma tela de 8 bits. Por exemplo, em uma tela de 1280x800, um buffer de tela cheia usa cerca de 1 MB. Portanto, o cache precisa 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 armazenar duas telas de texturas de 8 bits. Por exemplo, em uma tela de 1280x800, um buffer de tela cheia usa cerca de 1 MB. Portanto, o cache precisa 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. É recomendável usar um cache grande o suficiente para armazenar duas vezes a tela em 8 bits. Por exemplo, em uma tela de 1280x800, um buffer de tela cheia usa cerca de 1 MB. Portanto, o cache precisa ter pelo menos 2 MB. O cache pode ser menor se o dispositivo oferecer suporte a buffers de stencil 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. Os despejos de memória são acionados quando o sistema precisa recuperar a 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 velocidade de upload de texturas da GPU. Recomendamos o uso de pelo menos 1.024 pixels, mas no máximo 2.048 pixels. Você também precisa usar um valor de potência de dois.
ro.hwui.text_small_cache_height integer 256 Define a altura em pixels do cache de fontes padrão. O limite superior depende da velocidade de upload de texturas da GPU. Recomendamos usar pelo menos 256 pixels, mas no máximo 1.024 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 velocidade de upload de texturas da GPU. Recomendamos o uso de pelo menos 2.048 pixels, mas no máximo 4.096 pixels. Você também precisa usar um valor de potência de dois.
ro.hwui.text_large_cache_height integer 512 Define a altura em pixels do cache de fontes grandes. O cache de fontes grandes é usado para glifos muito grandes para caber no cache de fontes padrão. O limite superior depende da velocidade de upload de texturas da GPU. Recomendamos usar pelo menos 512 pixels, mas no máximo 2.048 pixels. Você também precisa usar um valor de potência de dois.
hwui.text_gamma_correction string lookup Seleciona a técnica de correção de gama de texto. Há quatro opções possíveis:
  • lookup3: uma correção baseada em tabelas de pesquisa. A correção de gama é diferente para texto preto e branco (confira os limites abaixo).
  • lookup: uma correção baseada em uma única tabela de pesquisa.
  • shader3: uma correção aplicada por um sombreador GLSL. A correção de gama é diferente para texto em preto e branco (consulte os limites abaixo).
  • shader: uma correção aplicada por um sombreador GLSL.
As correções de gama de pesquisa funcionam melhor em GPUs com matemática de sombreador limitada. As correções de gama do sombreador são melhores para economizar memória. Recomendamos usar a técnica padrão lookup, 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 a correção de gama do texto. Esse valor pode ser ajustado com base na tela 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 precisa estar 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 precisa estar 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. Os PBOs são usados pelo renderizador para realizar uploads de texturas assíncronos, especialmente para o cache de fontes. Essa propriedade precisa estar sempre ativada, mas pode ser desativada durante a ativação ou o desenvolvimento se o uso de PBOs causar corrupção ou desempenho ruim. É por isso que a propriedade não é somente leitura.