Configuration d'OpenGLRenderer

Ce document décrit les réglages de performances que vous pouvez effectuer pour exploiter tout le potentiel de votre matériel.

Propriétés OpenGLRenderer (libhwui)

Ce document répertorie toutes les propriétés que vous pouvez utiliser pour contrôler le pipeline de rendu 2D avec accélération matérielle d'Android. Définissez ces propriétés dans device.mk en tant que PRODUCT_PROPERTY_OVERRIDES.

Propriétés pour toutes les versions d'Android

Propriété Type Valeur par défaut Description
ro.zygote.disable_gl_preload boolean false Permet d'activer/de désactiver le préchargement des pilotes EGL/GL dans Zygote au démarrage. Lorsque cette propriété est définie sur "false", Zygote précharge les pilotes GL en appelant eglGetDisplay(EGL_DEFAULT_DISPLAY). L'objectif est de charger le code des bibliothèques dynamiques dans Zygote pour le partager avec tous les autres processus. Si un pilote ne peut pas être partagé, définissez cette propriété sur "true".

Propriétés pour Android 8.0 et versions antérieures

Propriété Type Valeur par défaut Description
ro.hwui.disable_scissor_opt boolean false

Permet d'activer ou de désactiver l'optimisation de la cisaille. Les valeurs acceptées sont "true" et "false". Lorsque l'optimisation de la fonction de découpe est activée, OpenGLRenderer tente de réduire l'utilisation de la fonction de découpe en activant et en désactivant sélectivement le test de découpe GL.

Lorsque l'optimisation est désactivée, OpenGLRenderer maintient le test de ciseaux GL activé et modifie le rectangle de ciseaux si nécessaire. Certains GPU (par exemple, le SGX 540) fonctionnent mieux en modifiant le rectangle de ciseaux plus souvent qu'en activant ou en désactivant fréquemment le test de ciseaux.

ro.hwui.texture_cache_size float 24 Définit la taille, en mégaoctets, du cache de texture par processus. Nous vous recommandons d'utiliser un cache suffisamment volumineux pour contenir plusieurs écrans de textures 32 bits (par exemple, sur un écran 1 280 x 800, un tampon plein écran utilise environ 4 Mo. Le cache doit donc être d'au moins 20 Mo).
ro.hwui.layer_cache_size float 16 Définit la taille, en mégaoctets, du cache par couche de processus. Nous vous recommandons d'utiliser un cache suffisamment grand pour contenir quatre fois l'écran en 32 bits. Par exemple, sur un écran 1 280 x 800, un tampon plein écran utilise environ 4 Mo. Le cache doit donc être d'au moins 16 Mo.
ro.hwui.gradient_cache_size 0.5 float Définit la taille, en mégaoctets, du cache des gradients par processus. Un seul dégradé occupe généralement entre 1 et 4 Ko de mémoire. Il est recommandé d'utiliser un cache suffisamment grand pour contenir au moins 12 gradients.
ro.hwui.patch_cache_size integer 128 Définit la taille, en kilo-octets, du cache de neuf correctifs par processus. Ce cache ne contient que des données de sommet et peut donc être de petite taille. Chaque sommet est composé de quatre valeurs flottantes, soit 16 octets.
ro.hwui.path_cache_size float 4 Définit la taille, en mégaoctets, du cache par chemin de processus. Nous vous recommandons d'utiliser un cache suffisamment grand pour contenir au moins un écran de textures 32 bits. Par exemple, sur un écran 1 280 x 800, un tampon plein écran utilise environ 4 Mo. Le cache doit donc être d'au moins 4 Mo.
ro.hwui.shape_cache_size float 1 Définit la taille, en mégaoctets, des caches de formes par processus. Cette valeur est utilisée par plusieurs caches tels que les cercles et les rectangles arrondis. Nous vous recommandons d'utiliser un cache suffisamment grand pour contenir au moins un écran 8 bits. Par exemple, sur un écran 1 280 x 800, un tampon plein écran utilise environ 1 Mo. Le cache doit donc être d'au moins 1 Mo.
ro.hwui.drop_shadow_cache_size float 2 Définit la taille, en mégaoctets, du cache des ombres portées de texte par processus. Nous vous recommandons d'utiliser un cache suffisamment grand pour contenir deux écrans de textures 8 bits. Par exemple, sur un écran 1 280 x 800, un tampon plein écran utilise environ 1 Mo. Le cache doit donc être d'au moins 2 Mo.
ro.hwui.r_buffer_cache_size float 2 Définit la taille, en mégaoctets, du cache des tampons de rendu par processus. Il est recommandé d'utiliser un cache suffisamment grand pour contenir deux fois l'écran en 8 bits. Par exemple, sur un écran 1 280 x 800, un tampon plein écran utilise environ 1 Mo. Le cache doit donc être d'au moins 2 Mo. Le cache peut être plus petit si l'appareil est compatible avec des tampons de pochoir 4 bits ou 1 bit.
ro.hwui.texture_cache_flush_rate float 0.6 Définit le pourcentage du cache de texture à conserver après un vidage de mémoire. Les vidages de mémoire sont déclenchés lorsque le système doit récupérer de la mémoire dans toutes les applications. Dans ce cas, nous vous recommandons de libérer environ 50% de la mémoire cache.
ro.hwui.text_small_cache_width integer 1024 Définit la largeur, en pixels, du cache de polices par défaut. La limite supérieure dépend de la vitesse à laquelle le GPU peut importer des textures. Nous vous recommandons d'utiliser au moins 1 024 pixels, mais pas plus de 2 048 pixels. Vous devez également utiliser une puissance de deux.
ro.hwui.text_small_cache_height integer 256 Définit la hauteur en pixels du cache de polices par défaut. La limite supérieure dépend de la vitesse à laquelle le GPU peut importer des textures. Nous vous recommandons d'utiliser au moins 256 pixels, mais pas plus de 1 024 pixels.
ro.hwui.text_large_cache_width integer 2048 Définit la largeur en pixels du cache de polices de grande taille. Ce cache est utilisé pour les glyphes trop volumineux pour tenir dans le cache de polices par défaut. La limite supérieure dépend de la vitesse à laquelle le GPU peut importer des textures. Nous vous recommandons d'utiliser au moins 2 048 pixels, mais pas plus de 4 096 pixels. Vous devez également utiliser une puissance de deux.
ro.hwui.text_large_cache_height integer 512 Définit la hauteur en pixels du cache de polices de grande taille. Le grand cache de polices est utilisé pour les glyphes trop volumineux pour tenir dans le cache de polices par défaut. La limite supérieure dépend de la vitesse à laquelle le GPU peut importer des textures. Nous vous recommandons d'utiliser au moins 512 pixels, mais pas plus de 2 048 pixels. Vous devez également utiliser une puissance de deux.
hwui.text_gamma_correction string lookup Sélectionne la technique de correction gamma du texte. Quatre options s'offrent à vous :
  • lookup3: correction basée sur des tables de référence. La correction gamma est différente pour le texte noir et blanc (voir les seuils ci-dessous).
  • lookup: correction basée sur une seule table de correspondance.
  • shader3: correction appliquée par un nuanceur GLSL. La correction gamma est différente pour le texte en noir et blanc (voir les seuils ci-dessous).
  • shader: correction appliquée par un nuanceur GLSL.
Les corrections de gamma par recherche fonctionnent mieux sur les GPU avec des calculs de nuanceur limités. Les corrections de gamma des nuanceurs sont les plus efficaces pour économiser de la mémoire. Nous vous recommandons d'utiliser la technique lookup par défaut, qui offre un bon compromis en termes de qualité, de vitesse et d'utilisation de la mémoire.
hwui.text_gamma float 1.4 Définit la valeur gamma utilisée pour la correction gamma du texte. Cette valeur peut être ajustée en fonction de l'écran utilisé par l'appareil.
hwui.text_gamma.black_threshold integer 64 Définit le seuil de luminance en dessous duquel la correction gamma du noir est appliquée. La valeur doit être définie dans la plage 0..255.
hwui.text_gamma.white_threshold integer 192 Définit le seuil de luminosité au-dessus duquel la correction gamma du blanc est appliquée. La valeur doit être définie dans la plage 0..255.
hwui.use_gpu_pixel_buffers boolean true Permet d'activer ou de désactiver l'utilisation des PBOs sur le matériel OpenGL ES 3.0. Le moteur de rendu utilise les PBOs pour effectuer des importations de textures asynchrones, en particulier pour le cache de polices. Cette propriété doit toujours rester activée, mais elle peut être désactivée lors de la mise en service ou du développement si l'utilisation de PBO entraîne des corruptions ou des performances médiocres. C'est pourquoi la propriété n'est pas en lecture seule.