Configurazione di OpenGLRenderer

Questo documento descrive l'ottimizzazione delle prestazioni che è possibile eseguire per ottenere il massimo dal proprio 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à Tipo Valore di default Descrizione
ro.zygote.disable_gl_preload boolean false Utilizzato per abilitare/disabilitare il precaricamento dei driver EGL/GL in Zygote all'avvio. Quando questa proprietà è impostata su false, Zygote precaricherà i driver GL richiamando 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à Tipo Valore di default Descrizione
ro.hwui.disable_scissor_opt boolean false

Utilizzato per abilitare o disabilitare l'ottimizzazione delle forbici. I valori accettati sono vero e falso. Quando l'ottimizzazione delle forbici è abilitata, OpenGLRenderer tenta di ridurre al minimo l'uso delle forbici abilitando e disabilitando selettivamente il test delle forbici GL.

Quando l'ottimizzazione è disabilitata, OpenGLRenderer mantiene abilitato il test della forbice GL e modifica il rettangolo della forbice secondo necessità. Alcune GPU (ad esempio, l'SGX 540) funzionano meglio quando si cambia il rettangolo a forbice più spesso che quando si abilita o disabilita spesso il test a forbice.

ro.hwui.texture_cache_size float 24 Definisce la dimensione, in megabyte, della cache delle texture per processo. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere diversi schermi con texture a 32 bit (ad esempio, su uno schermo 1280x800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache dovrebbe essere di almeno 20 MB).
ro.hwui.layer_cache_size float 16 Definisce la dimensione, in megabyte, della cache dei livelli per processo. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere 4 volte lo schermo a 32 bit. Ad esempio, su uno schermo 1280x800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache dovrebbe essere di almeno 16 MB.
ro.hwui.gradient_cache_size 0.5 float Definisce la dimensione, in megabyte, della cache dei gradienti per processo. Un singolo gradiente occupa generalmente tra 1 e 4 KB di memoria. Si consiglia di utilizzare una cache sufficientemente grande da contenere almeno dodici gradienti.
ro.hwui.patch_cache_size integer 128 Definisce la dimensione, in kilobyte, della cache di 9 patch, per processo. Questa cache contiene solo i dati dei vertici e pertanto può essere mantenuta piccola. Ogni vertice è composto da 4 float o 16 byte.
ro.hwui.path_cache_size float 4 Definisce la dimensione, in megabyte, della cache dei percorsi per processo. Consigliamo di utilizzare una cache sufficientemente grande da contenere almeno uno schermo con texture a 32 bit. Ad esempio, su uno schermo 1280x800, un buffer a schermo intero utilizza circa 4 MB, quindi la cache dovrebbe essere di almeno 4 MB.
ro.hwui.shape_cache_size float 1 Definisce la dimensione, 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 uno schermo 1280x800, un buffer a schermo intero utilizza circa 1 MB, quindi la cache dovrebbe essere almeno 1 MB.
ro.hwui.drop_shadow_cache_size float 2 Definisce la dimensione, in megabyte, della cache delle ombre esterne del testo per processo. Ti consigliamo di utilizzare una cache sufficientemente grande da contenere due schermi con texture a 8 bit. Ad esempio, su uno schermo 1280x800, un buffer a schermo intero utilizza circa 1 MB, quindi la cache dovrebbe essere di almeno 2 MB.
ro.hwui.r_buffer_cache_size float 2 Definisce la dimensione, in megabyte, della cache dei buffer di rendering per processo. Si consiglia di utilizzare una cache sufficientemente grande da contenere il doppio dello schermo in 8 bit. Ad esempio, su uno schermo 1280x800, un buffer a schermo intero utilizza circa 1 MB, quindi la cache dovrebbe essere di almeno 2 MB. La cache può essere inferiore 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 uno svuotamento della memoria. Gli svuotamenti della memoria vengono attivati ​​quando il sistema deve recuperare memoria in tutte le applicazioni. In tali situazioni 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. Si consiglia di utilizzare almeno 1024 pixel ma al massimo 2048 pixel. Dovresti anche usare una potenza di due valori.
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. Si consiglia di utilizzare almeno 256 pixel ma al massimo 1024 pixel.
ro.hwui.text_large_cache_width integer 2048 Definisce la larghezza in pixel della cache dei caratteri grandi. Questa cache viene utilizzata per i glifi troppo grandi per adattarsi alla cache dei caratteri predefinita. Il limite superiore dipende dalla velocità con cui la GPU può caricare le texture. Si consiglia di utilizzare almeno 2048 pixel ma al massimo 4096 pixel. Dovresti anche usare una potenza di due valori.
ro.hwui.text_large_cache_height integer 512 Definisce l'altezza in pixel della cache dei caratteri grandi. La cache dei caratteri grande viene utilizzata per i glifi troppo grandi per rientrare nella cache dei caratteri predefinita. Il limite superiore dipende dalla velocità con cui la GPU può caricare le texture. Si consiglia di utilizzare almeno 512 pixel ma al massimo 2048 pixel. Dovresti anche usare una potenza di due valori.
hwui.text_gamma_correction string lookup Seleziona la tecnica di correzione gamma del testo. Ci sono quattro scelte possibili:
  • lookup3 : una correzione basata sulle tabelle di ricerca. La correzione gamma è diversa per il testo in bianco e nero (vedere 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 (vedere 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 della gamma shader sono le migliori 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. Questo valore può essere regolato 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 abilitare o disabilitare l'uso di PBO sull'hardware OpenGL ES 3.0. I PBO vengono utilizzati dal renderer per eseguire caricamenti asincroni di texture, in particolare per la cache dei caratteri. Questa proprietà dovrebbe rimanere sempre abilitata ma può essere disabilitata durante il caricamento o lo sviluppo se l'uso dei PBO provoca danneggiamenti o prestazioni pessime. Questo è il motivo per cui la proprietà non è di sola lettura.