Configuração do OpenGLRenderer

Este documento descreve o ajuste de desempenho para otimizar a performance do hardware.

Propriedades do OpenGLRenderer (libhwui)

Este documento descreve as propriedades para controlar o pipeline de renderização 2D acelerado por 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 Ativa ou desativa o pré-carregamento de drivers EGL/GL no Zygote durante a inicialização. Quando essa propriedade é false, o Zygote pré-carrega os drivers GL invocando eglGetDisplay(EGL_DEFAULT_DISPLAY). Isso carrega o código da biblioteca dinâmica no Zygote para compartilhá-lo com todos os outros processos. Se um driver não for compatível com o 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

Ativa ou desativa 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 corte ativando e desativando seletivamente o teste de tesoura GL.

Quando desativado, 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 um desempenho melhor quando a mudança do retângulo de corte é mais frequente do que a ativação ou desativação do teste de corte.

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. Portanto, 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 quatro 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 float 0.5 Define o tamanho, em megabytes, do cache de gradientes por processo. Um único gradiente geralmente ocupa entre 1 KB e 4 KB de memória. Recomendamos 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 nove patches por processo. Esse cache contém apenas dados de vértices, então você pode mantê-lo pequeno. Cada vértice consiste em quatro 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, do cache 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 projetadas 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. Recomendamos usar um cache grande o suficiente para armazenar o dobro da 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 aceitar 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 limpeza de memória. O sistema aciona liberações de memória quando 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 velocidade com que a GPU pode fazer upload de texturas. Recomendamos usar pelo menos 1024 pixels, mas no máximo 2048 pixels. Use também 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 com que a GPU pode fazer upload de 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 velocidade com que a GPU pode fazer upload de texturas. Recomendamos usar pelo menos 2048 pixels, mas no máximo 4096 pixels. Use também 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 com que a GPU pode fazer upload de texturas. Recomendamos usar pelo menos 512 pixels, mas no máximo 2048 pixels. Use também um valor de potência de dois.
hwui.text_gamma_correction string lookup Seleciona a técnica de correção gama de texto. Há 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. Consulte 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.
A função de correção gama de pesquisa funciona melhor em GPUs com matemática de shader limitada. As correções gama de shader são as 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 gama usado para correção gama de texto. É possível ajustar esse valor com base na tela do dispositivo.
hwui.text_gamma.black_threshold integer 64 Define o limite de luminância abaixo do qual a correção gama preta é aplicada. O valor precisa estar no intervalo de 0 a 255.
hwui.text_gamma.white_threshold integer 192 Define o limite de luminância acima do qual a correção gama branca é aplicada. O valor precisa estar no intervalo de 0 a 255.
hwui.use_gpu_pixel_buffers boolean true Ativa ou desativa o uso de PBOs em hardware OpenGL ES 3.0. O renderizador usa PBOs para fazer uploads assíncronos de textura, especialmente para o cache de fontes. Essa propriedade deve sempre permanecer ativada, mas é possível desativá-la durante a inicialização ou o desenvolvimento se os PBOs causarem corrupções ou desempenho ruim. É por isso que a propriedade não é somente leitura.