Configurazione di OpenGLRenderer

Questo documento descrive l'ottimizzazione delle prestazioni per ottimizzare il rendimento dell'hardware.

Proprietà OpenGLRenderer (libhwui)

Questo documento descrive le proprietà per controllare la pipeline di rendering con accelerazione hardware 2D di Android. Imposta queste proprietà in device.mk come PRODUCT_PROPERTY_OVERRIDES.

Proprietà per tutte le versioni di Android

Proprietà Tipo Valore predefinito Descrizione
ro.zygote.disable_gl_preload boolean false Attiva o disattiva il precaricamento dei driver EGL/GL in Zygote al momento dell'avvio. Quando questa proprietà è false, Zygote precarica i driver GL richiamando eglGetDisplay(EGL_DEFAULT_DISPLAY). In questo modo, il codice della libreria dinamica viene caricato in Zygote per essere condiviso con tutti gli altri processi. Se un driver non supporta la condivisione, imposta questa proprietà su true.

Proprietà per Android 8.0 e versioni precedenti

Proprietà Tipo Valore predefinito Descrizione
ro.hwui.disable_scissor_opt boolean false

Attiva o disattiva l'ottimizzazione delle forbici. I valori accettati sono true e false. Quando l'ottimizzazione delle forbici è abilitata, OpenGLRenderer tenta di ridurre al minimo il taglio abilitando e disabilitando selettivamente il test GL scissor.

Se disattivato, OpenGLRenderer mantiene attivo il test di ritaglio GL e modifica il rettangolo di ritaglio in base alle necessità. Alcune GPU (ad esempio SGX 540) hanno un rendimento migliore quando modificano il rettangolo di taglio più spesso rispetto all'attivazione o alla disattivazione frequente del test di taglio.

ro.hwui.texture_cache_size float 24 Definisce le dimensioni, in megabyte, della cache delle texture per processo. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere diverse schermate di texture a 32 bit. Ad esempio, su un display 1280x800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache deve essere almeno 20 MB.
ro.hwui.layer_cache_size float 16 Definisce le dimensioni, in megabyte, della cache dei livelli per processo. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere quattro volte lo schermo a 32 bit. Ad esempio, su un display 1280x800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache deve essere almeno 16 MB.
ro.hwui.gradient_cache_size float 0.5 Definisce le dimensioni, in megabyte, della cache dei gradienti per processo. Un singolo gradiente occupa generalmente tra 1 KB e 4 KB di memoria. Consigliamo di utilizzare una cache sufficientemente grande da contenere almeno 12 sfumature.
ro.hwui.patch_cache_size integer 128 Definisce le dimensioni, in kilobyte, della cache delle immagini a 9 patch per processo. Questa cache contiene solo i dati dei vertici, quindi puoi mantenerla di dimensioni ridotte. Ogni vertice è composto da 4 float o 16 byte.
ro.hwui.path_cache_size float 4 Definisce le dimensioni, in megabyte, della cache dei percorsi per processo. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere almeno una schermata di texture a 32 bit. Ad esempio, su un display 1280x800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache deve essere almeno di 4 MB.
ro.hwui.shape_cache_size float 1 Definisce le dimensioni, in megabyte, della cache delle forme per processo. Questo valore viene utilizzato da diverse cache, ad esempio cerchi e rettangoli arrotondati. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere almeno una schermata a 8 bit. Ad esempio, su un display da 1280 x 800, un buffer a schermo intero utilizza circa 1 MB, quindi la cache deve essere di almeno 1 MB.
ro.hwui.drop_shadow_cache_size float 2 Definisce le dimensioni, in megabyte, della cache delle ombreggiature del testo per processo. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere due schermate di texture a 8 bit. Ad esempio, su un display 1280x800, un buffer a schermo intero utilizza circa 1 MB, quindi la cache deve essere almeno 2 MB.
ro.hwui.r_buffer_cache_size float 2 Definisce le dimensioni, in megabyte, della cache dei buffer di rendering per processo. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere il doppio dello schermo a 8 bit. Ad esempio, su un display 1280x800, un buffer a schermo intero utilizza circa 1 MB, quindi la cache deve essere almeno 2 MB. La cache può essere più piccola se il dispositivo supporta buffer stencil a 4 bit o 1 bit.
ro.hwui.texture_cache_flush_rate float 0.6 Definisce la percentuale della cache delle texture da conservare dopo lo svuotamento della memoria. Il sistema attiva lo svuotamento della memoria quando deve recuperare memoria in tutte le applicazioni. In questi casi, ti consigliamo di rilasciare circa il 50% della cache.
ro.hwui.text_small_cache_width integer 1024 Definisce la larghezza, in pixel, della cache dei caratteri predefinita. Il limite superiore dipende dalla velocità con cui la GPU può caricare le texture. Ti consigliamo di utilizzare almeno 1024 pixel, ma non più di 2048 pixel. Inoltre, utilizza un valore che sia una potenza di 2.
ro.hwui.text_small_cache_height integer 256 Definisce l'altezza, in pixel, della cache dei caratteri predefinita. Il limite superiore dipende dalla velocità con cui la GPU può caricare le texture. Ti consigliamo di utilizzare almeno 256 pixel, ma non più di 1024 pixel.
ro.hwui.text_large_cache_width integer 2048 Definisce la larghezza, in pixel, della cache dei caratteri grandi. Questa cache viene utilizzata anche per i glifi troppo grandi per essere contenuti nella cache dei caratteri predefinita. Il limite superiore dipende dalla velocità con cui la GPU può caricare le texture. Ti consigliamo di utilizzare almeno 2048 pixel, ma non più di 4096 pixel. Inoltre, utilizza un valore che sia una potenza di 2.
ro.hwui.text_large_cache_height integer 512 Definisce l'altezza, in pixel, della cache dei caratteri grandi. La cache dei caratteri grandi viene utilizzata per i glifi troppo grandi per essere contenuti nella cache dei caratteri predefinita. Il limite superiore dipende dalla velocità con cui la GPU può caricare le texture. Ti consigliamo di utilizzare almeno 512 pixel, ma non più di 2048 pixel. Inoltre, utilizza un valore potenza di 2.
hwui.text_gamma_correction string lookup Seleziona la tecnica di correzione gamma del testo. Esistono quattro possibili scelte:
  • lookup3: una correzione basata su tabelle di ricerca. La correzione gamma è diversa per il testo in bianco e nero (vedi le soglie di seguito).
  • lookup: una correzione basata su una singola tabella di ricerca.
  • shader3: Una correzione applicata da uno shader GLSL. La correzione gamma è diversa per il testo in bianco e nero (vedi le soglie di seguito).
  • shader: Una correzione applicata da uno shader GLSL.
La funzione di correzione gamma di ricerca funziona meglio sulle GPU con matematica degli shader limitata. Le correzioni gamma degli shader sono ideali per risparmiare memoria. Ti consigliamo di utilizzare la tecnica lookup predefinita, che offre un buon compromesso in termini di qualità, velocità e utilizzo della memoria.
hwui.text_gamma float 1.4 Definisce il valore gamma utilizzato per la correzione gamma del testo. Puoi regolare questo valore in base al display del dispositivo.
hwui.text_gamma.black_threshold integer 64 Definisce la soglia di luminanza al di sotto della quale viene applicata la correzione gamma del nero. Il valore deve essere compreso tra 0 e 255.
hwui.text_gamma.white_threshold integer 192 Definisce la soglia di luminanza al di sopra della quale viene applicata la correzione gamma del bianco. Il valore deve essere compreso tra 0 e 255.
hwui.use_gpu_pixel_buffers boolean true Attiva o disattiva l'utilizzo di PBO sull'hardware OpenGL ES 3.0. Il renderer utilizza i PBO per eseguire caricamenti di texture asincroni, in particolare per la cache dei caratteri. Questa proprietà deve rimanere sempre abilitata, ma puoi disattivarla durante l'avvio o lo sviluppo se le PBO causano danneggiamenti o prestazioni scarse. Per questo motivo, la proprietà non è di sola lettura.