Configurazione di OpenGLRenderer

Questo documento descrive le ottimizzazioni del rendimento che puoi eseguire per ottenere il massimo dal tuo hardware.

Proprietà OpenGLRenderer (libhwui)

Questo documento elenca tutte le proprietà che puoi utilizzare 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à Digitazione Valore predefinito Descrizione
ro.zygote.disable_gl_preload boolean false Utilizzato per attivare/disattivare il precaricamento dei driver EGL/GL in Zygote all'avvio. Se questa proprietà è impostata su false, Zygote precarica i driver GL chiamando eglGetDisplay(EGL_DEFAULT_DISPLAY). L'obiettivo è caricare il codice delle librerie dinamiche in Zygote per condividerlo 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à Digitazione Valore predefinito Descrizione
ro.hwui.disable_scissor_opt boolean false

Utilizzato per attivare o disattivare l'ottimizzazione delle forbici. I valori accettati sono true e false. Quando l'ottimizzazione delle operazioni di ritaglio è attiva, OpenGLRenderer tenta di ridurle al minimo attivando e disattivando in modo selettivo il test di ritaglio GL.

Quando l'ottimizzazione è disattivata, OpenGLRenderer mantiene attivo il test di ritaglio GL e modifica il rettangolo di ritaglio in base alle esigenze. Alcune GPU (ad esempio la SGX 540) hanno un rendimento migliore se si modifica il rettangolo di ritaglio più spesso rispetto all'attivazione o alla disattivazione frequente del test di ritaglio.

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 texture a 32 bit per più schermi (ad esempio, su un display 1280 x 800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache deve essere di 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 4 volte lo schermo in 32 bit. Ad esempio, su un display 1280 x 800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache deve essere di almeno 16 MB.
ro.hwui.gradient_cache_size 0.5 float Definisce le dimensioni, in megabyte, della cache dei gradienti per processo. Un singolo gradiente occupa in genere tra 1 e 4 KB di memoria. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere almeno dodici gradienti.
ro.hwui.patch_cache_size integer 128 Definisce le dimensioni, in kilobyte, della cache di 9 patch per processo. Questa cache contiene solo i dati dei vertici e può quindi essere mantenuta di piccole dimensioni. Ogni vertice è costituito da 4 valori 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 1280 x 800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache deve essere di almeno 4 MB.
ro.hwui.shape_cache_size float 1 Definisce le dimensioni, in megabyte, delle cache delle forme per processo. Questo valore viene utilizzato da diverse cache, come cerchi e rettangoli arrotondati. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere almeno uno schermo a 8 bit. Ad esempio, su un display 1280x800, 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 1280 x 800, un buffer a schermo intero utilizza circa 1 MB, quindi la cache deve essere di almeno 2 MB.
ro.hwui.r_buffer_cache_size float 2 Definisce le dimensioni, in megabyte, della cache dei buffer di rendering per processo. È consigliabile utilizzare una cache sufficientemente grande da contenere il doppio dello schermo in 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 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 mantenere dopo uno svuotamento della memoria. I flussi di memoria vengono attivati quando il sistema deve recuperare la 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. Consigliamo di utilizzare almeno 1024 pixel, ma non più di 2048 pixel. Devi anche utilizzare un valore di potenza di due.
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. Consigliamo di utilizzare almeno 256 pixel, ma non più di 1024.
ro.hwui.text_large_cache_width integer 2048 Definisce la larghezza in pixel della cache dei caratteri di grandi dimensioni. Questa cache viene utilizzata per gli glifi troppo grandi per essere inseriti nella cache dei caratteri predefinita. Il limite superiore dipende dalla velocità con cui la GPU può caricare le texture. Consigliamo di utilizzare almeno 2048 pixel, ma non più di 4096 pixel. Devi anche utilizzare un valore di potenza di due.
ro.hwui.text_large_cache_height integer 512 Definisce l'altezza in pixel della cache dei caratteri di grandi dimensioni. La cache dei caratteri di grandi dimensioni viene utilizzata per i glifi troppo grandi per essere inseriti 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. Devi anche utilizzare un valore di potenza di due.
hwui.text_gamma_correction string lookup Consente di selezionare la tecnica di correzione della gamma del testo. Esistono quattro possibili scelte:
  • lookup3: una correzione basata su tabelle di ricerca. La correzione gamma è diversa per il testo in nero e in bianco (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.
Le correzioni gamma di ricerca funzionano meglio su GPU con matematica shader limitata. Le correzioni gamma degli shader sono ideali per risparmiare memoria. Ti consigliamo di utilizzare la tecnica predefinita lookup, 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. Questo valore può essere modificato in base al display utilizzato dal 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 definito nell'intervallo 0..255.
hwui.text_gamma.white_threshold integer 192 Definisce la soglia di luminanza al di sopra della quale viene applicata la correzione della gamma del bianco. Il valore deve essere definito nell'intervallo 0..255.
hwui.use_gpu_pixel_buffers boolean true Utilizzato per attivare o disattivare l'utilizzo di PBO sull'hardware OpenGL ES 3.0. I PBO vengono utilizzati dal renderer per eseguire caricamenti di texture asincroni, in particolare per la cache dei caratteri. Questa proprietà deve rimanere sempre attiva, ma può essere disattivata durante l'inizializzazione o lo sviluppo se l'utilizzo dei PBO causa danneggiamenti o prestazioni scadenti. Ecco perché la proprietà non è di sola lettura.