Configuração do OpenGLRenderer

Este documento descreve o ajuste de desempenho para otimizar o desempenho 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 oferece suporte ao 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 recorte 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 ao mudar o retângulo de tesoura com mais frequência do que ao ativar ou desativar o teste de tesoura.

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 1280 x 800, 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 1280 x 800, 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 9 patches por processo. Esse cache contém apenas dados de vértice, então você pode mantê-lo pequeno. Cada vértice consiste em 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 de texturas de 32 bits. Por exemplo, em uma tela de 1280 x 800, 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 1280 x 800, 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 1280 x 800, 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 duas vezes a tela em 8 bits. Por exemplo, em uma tela de 1280 x 800, 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 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 descarga de memória. O sistema aciona descargas 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. Além disso, use 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 também é 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. Além disso, use 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. Além disso, use 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: escolhas:
  • lookup3: uma correção baseada em tabelas de pesquisa. A correção gama difere para texto preto e branco (consulte os limites a seguir).
  • lookup: uma correção baseada em uma única tabela de consulta.
  • shader3: uma correção aplicada por um sombreador GLSL. A correção gama difere para texto preto e branco (consulte os limites a seguir).
  • shader: uma correção aplicada por um sombreador GLSL.
As correções gama de pesquisa funcionam melhor em GPUs com matemática de sombreador limitada. As correções gama de sombreador 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 da memória.
hwui.text_gamma float 1.4 Define o valor gama usado para a 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 realizar uploads de textura assíncronos, especialmente para o cache de fontes. Essa propriedade precisa 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.