Configuration d'OpenGLRenderer

Ce document décrit le réglage des performances pour optimiser les performances matérielles.

Propriétés OpenGLRenderer (libhwui)

Ce document décrit les propriétés permettant de contrôler le pipeline de rendu 2D à accélération matérielle d'Android. Définissez ces propriétés dans le fichier 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 Active ou désactive le préchargement des pilotes EGL/GL dans Zygote au démarrage. Lorsque cette propriété est false, Zygote précharge les pilotes GL en appelant eglGetDisplay(EGL_DEFAULT_DISPLAY). Cela charge le code de la bibliothèque dynamique dans Zygote pour le partager avec tous les autres processus. Si un pilote n'est pas compatible avec le partage, 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

Active ou désactive l'optimisation des ciseaux. Les valeurs acceptées sont true et false. Lorsque l'optimisation des ciseaux est activée, OpenGLRenderer tente de réduire au minimum le découpage en activant et en désactivant de manière sélective le test de ciseaux GL.

Lorsqu'elle est désactivée, OpenGLRenderer maintient le test de ciseaux GL activé et modifie le rectangle de ciseaux selon les besoins. Certains GPU (par exemple, le SGX 540) sont plus performants lorsque le rectangle de ciseaux est modifié plus souvent que lorsque le test de ciseaux est activé ou désactivé fréquemment.

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 grand pour contenir plusieurs écrans de textures 32 bits. Par exemple, sur un écran de 1 280 x 800, une mémoire 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 de calques par processus. Nous vous recommandons d'utiliser un cache suffisamment grand pour contenir quatre fois l'écran en 32 bits. Par exemple, sur un écran de 1 280 x 800, une mémoire tampon plein écran utilise environ 4 Mo. Le cache doit donc être d'au moins 16 Mo.
ro.hwui.gradient_cache_size float 0.5 Définit la taille, en mégaoctets, du cache de dégradés par processus. Un seul dégradé occupe généralement entre 1 et 4 Ko de mémoire. Nous vous recommandons d'utiliser un cache suffisamment grand pour contenir au moins 12 dégradés.
ro.hwui.patch_cache_size integer 128 Définit la taille, en kilo-octets, du cache de 9-patches par processus. Ce cache ne contient que des données de sommet. Vous pouvez donc le garder petit. Chaque sommet est constitué de 4 flottants, soit 16 octets.
ro.hwui.path_cache_size float 4 Définit la taille, en mégaoctets, du cache de chemins par 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 de 1 280 x 800, une mémoire 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, du cache 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 de 1 280 x 800, une mémoire 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 d'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 de 1 280 x 800, une mémoire 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 de mémoires tampons de rendu par processus. Nous vous recommandons d'utiliser un cache suffisamment grand pour contenir deux fois l'écran en 8 bits. Par exemple, sur un écran de 1 280 x 800, une mémoire 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 les mémoires tampons de stencil 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 la mémoire. Le système déclenche des vidages de mémoire lorsqu'il doit récupérer de la mémoire dans toutes les applications. Nous vous recommandons de libérer environ 50% du cache dans de telles situations.
ro.hwui.text_small_cache_width integer 1024 Définit la largeur, en pixels, du cache de police 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. Utilisez également une valeur de puissance de deux.
ro.hwui.text_small_cache_height integer 256 Définit la hauteur, en pixels, du cache de police 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 police de grande taille. Ce cache est également utilisé pour les glyphes trop grands pour tenir dans le cache de police 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. Utilisez également une valeur de puissance de deux.
ro.hwui.text_large_cache_height integer 512 Définit la hauteur, en pixels, du cache de police de grande taille. Le cache de police de grande taille est utilisé pour les glyphes trop grands pour tenir dans le cache de police 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. Utilisez également une valeur de puissance de deux.
hwui.text_gamma_correction string lookup Sélectionne la technique de correction gamma du texte. Quatre choix sont possibles :
  • lookup3 : correction basée sur des tables de correspondance. La correction gamma diffère 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 shader GLSL. La correction gamma diffère pour le texte noir et blanc (voir les seuils ci-dessous).
  • shader : correction appliquée par un shader GLSL.
Les corrections gamma de recherche fonctionnent mieux sur les GPU avec des calculs de shader limités. Les corrections gamma de shader sont idéales 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. Vous pouvez ajuster cette valeur en fonction de l'écran de l'appareil.
hwui.text_gamma.black_threshold integer 64 Définit le seuil de luminance en dessous duquel la correction gamma noire est appliquée. La valeur doit être comprise entre 0 et 255.
hwui.text_gamma.white_threshold integer 192 Définit le seuil de luminance au-dessus duquel la correction gamma blanche est appliquée. La valeur doit être comprise entre 0 et 255.
hwui.use_gpu_pixel_buffers boolean true Active ou désactive l'utilisation de PBO sur le matériel OpenGL ES 3.0. Le moteur de rendu utilise des PBO pour effectuer des importations de textures asynchrones, en particulier pour le cache de police. Cette propriété doit toujours rester activée, mais vous pouvez la désactiver lors de la mise en service ou du développement si les PBO entraînent des corruptions ou des performances médiocres. C'est pourquoi la propriété n'est pas en lecture seule.