OpenGLRenderer-Konfiguration

In diesem Dokument wird beschrieben, wie Sie die Leistung optimieren können, um Ihre Hardware optimal zu nutzen.

OpenGLRenderer (libhwui)-Eigenschaften

In diesem Dokument sind alle Eigenschaften aufgeführt, mit denen Sie die 2D-Hardware-gestützte Rendering-Pipeline von Android steuern können. Legen Sie diese Properties in device.mk als PRODUCT_PROPERTY_OVERRIDES fest.

Eigenschaften für alle Android-Versionen

Attribut Eingeben Standardwert Beschreibung
ro.zygote.disable_gl_preload boolean false Wird verwendet, um das Vorladen von EGL/GL-Treibern in Zygote beim Starten zu aktivieren/deaktivieren. Wenn diese Eigenschaft auf „false“ gesetzt ist, lädt Zygote die GL-Treiber durch Aufrufen von eglGetDisplay(EGL_DEFAULT_DISPLAY) vorab. Ziel ist es, den Code der dynamischen Bibliotheken in Zygote zu laden, um ihn für alle anderen Prozesse freizugeben. Wenn ein Treiber nicht freigegeben werden kann, legen Sie für diese Property den Wert „true“ fest.

Eigenschaften für Android 8.0 und niedriger

Attribut Eingeben Standardwert Beschreibung
ro.hwui.disable_scissor_opt boolean false

Damit wird die Scherenoptimierung aktiviert oder deaktiviert. Zulässige Werte sind „wahr“ und „falsch“. Wenn die Scissor-Optimierung aktiviert ist, versucht OpenGLRenderer, die Verwendung von Scissoring zu minimieren, indem der GL-Scissor-Test selektiv aktiviert und deaktiviert wird.

Wenn die Optimierung deaktiviert ist, behält OpenGLRenderer den GL-Scissor-Test aktiviert und ändert den Scissor-Rechteck bei Bedarf. Bei einigen GPUs (z. B. der SGX 540) ist die Leistung besser, wenn der Zuschneidebereich häufiger geändert wird, als wenn der Zuschneidetest häufig aktiviert oder deaktiviert wird.

ro.hwui.texture_cache_size float 24 Definiert die Größe des Texture-Caches pro Prozess in Megabyte. Wir empfehlen, einen Cache zu verwenden, der groß genug ist, um 32‑Bit-Texturen für mehrere Bildschirme zu speichern. Beispiel: Bei einem Display mit 1.280 × 800 Pixeln belegt ein Vollbild-Puffer etwa 4 MB. Der Cache sollte also mindestens 20 MB groß sein.
ro.hwui.layer_cache_size float 16 Hiermit wird die Größe des Caches für die einzelnen Prozessebenen in Megabyte definiert. Wir empfehlen, einen Cache zu verwenden, der viermal so groß ist wie das Display in 32 Bit. Bei einem Display mit 1.280 × 800 Pixeln belegt ein Vollbildpuffer beispielsweise etwa 4 MB. Der Cache sollte daher mindestens 16 MB groß sein.
ro.hwui.gradient_cache_size 0.5 float Hiermit wird die Größe des Gradienten-Caches pro Prozess in Megabyte festgelegt. Ein einzelner Farbverlauf belegt in der Regel zwischen 1 und 4 KB Arbeitsspeicher. Es wird empfohlen, einen Cache zu verwenden, der mindestens zwölf Farbverläufe aufnehmen kann.
ro.hwui.patch_cache_size integer 128 Definiert die Größe des 9-Patch-Caches in Kilobyte pro Prozess. Dieser Cache enthält nur Knotendaten und kann daher klein gehalten werden. Jeder Vertex besteht aus 4 Floats oder 16 Byte.
ro.hwui.path_cache_size float 4 Hiermit wird die Größe des Caches für Pfadinformationen pro Prozess in Megabyte festgelegt. Wir empfehlen, einen Cache zu verwenden, der groß genug ist, um mindestens einen Bildschirm mit 32‑Bit-Texturen zu speichern. Bei einem Display mit 1.280 × 800 Pixeln belegt ein Vollbildpuffer beispielsweise etwa 4 MB. Der Cache sollte also mindestens 4 MB groß sein.
ro.hwui.shape_cache_size float 1 Hiermit wird die Größe der Caches für die einzelnen Prozesse in Megabyte festgelegt. Dieser Wert wird von mehreren Caches wie Kreisen und abgerundeten Rechtecken verwendet. Wir empfehlen, einen Cache zu verwenden, der mindestens ein 8‑Bit-Display aufnehmen kann. Bei einem Display mit 1.280 × 800 Pixeln belegt ein Vollbildpuffer beispielsweise etwa 1 MB. Der Cache sollte also mindestens 1 MB groß sein.
ro.hwui.drop_shadow_cache_size float 2 Hier wird die Größe des Caches für Textschatten pro Prozess in Megabyte definiert. Wir empfehlen einen Cache, der groß genug ist, um 8‑Bit-Texturen für zwei Bildschirme zu speichern. Bei einem Display mit 1.280 × 800 Pixeln belegt ein Vollbildpuffer beispielsweise etwa 1 MB. Der Cache sollte daher mindestens 2 MB groß sein.
ro.hwui.r_buffer_cache_size float 2 Definiert die Größe des Renderbuffer-Caches pro Prozess in Megabyte. Es wird empfohlen, einen Cache zu verwenden, der doppelt so groß ist wie der Bildschirm in 8 Bit. Bei einem Display mit 1.280 × 800 Pixeln belegt ein Vollbildpuffer beispielsweise etwa 1 MB. Der Cache sollte daher mindestens 2 MB groß sein. Der Cache kann kleiner sein, wenn das Gerät 4‑Bit- oder 1‑Bit-Stichbuffer unterstützt.
ro.hwui.texture_cache_flush_rate float 0.6 Hiermit wird der Prozentsatz des Textur-Caches festgelegt, der nach dem Leeren des Arbeitsspeichers beibehalten werden soll. Arbeitsspeicher-Flushes werden ausgelöst, wenn das System Arbeitsspeicher in allen Anwendungen zurückfordern muss. Wir empfehlen, in solchen Fällen etwa 50% des Caches freizugeben.
ro.hwui.text_small_cache_width integer 1024 Definiert die Breite des Standardschrift-Caches in Pixeln. Die Obergrenze hängt davon ab, wie schnell die GPU Texturen hochladen kann. Wir empfehlen eine Auflösung von mindestens 1.024 Pixeln, maximal 2.048 Pixeln. Außerdem sollte der Wert eine Zweierpotenz sein.
ro.hwui.text_small_cache_height integer 256 Definiert die Höhe des Standardschrift-Caches in Pixeln. Die Obergrenze hängt davon ab, wie schnell die GPU Texturen hochladen kann. Wir empfehlen eine Auflösung von mindestens 256 Pixeln, maximal 1.024 Pixeln.
ro.hwui.text_large_cache_width integer 2048 Definiert die Breite des großen Schriftarten-Caches in Pixeln. Dieser Cache wird für Schriftzeichen verwendet, die zu groß sind, um in den Standardschrift-Cache zu passen. Die Obergrenze hängt davon ab, wie schnell die GPU Texturen hochladen kann. Wir empfehlen eine Auflösung von mindestens 2.048 Pixeln, maximal 4.096 Pixeln. Außerdem sollte der Wert eine Zweierpotenz sein.
ro.hwui.text_large_cache_height integer 512 Definiert die Höhe des großen Schriftarten-Caches in Pixeln. Der große Schriftarten-Cache wird für Schriftzeichen verwendet, die zu groß für den Standardschriftarten-Cache sind. Die Obergrenze hängt davon ab, wie schnell die GPU Texturen hochladen kann. Wir empfehlen eine Auflösung von mindestens 512 Pixeln, maximal aber 2.048 Pixeln. Außerdem sollte der Wert eine Zweierpotenz sein.
hwui.text_gamma_correction string lookup Wählt die Methode für die Gammakorrektur des Texts aus. Es gibt vier Möglichkeiten:
  • lookup3: Eine Korrektur anhand von Suchtabellen. Die Gammakorrektur unterscheidet sich für schwarzen und weißen Text (siehe Grenzwerte unten).
  • lookup: Eine Korrektur, die auf einer einzigen Suchtabelle basiert.
  • shader3: Eine Korrektur, die von einem GLSL-Shader angewendet wird. Die Gammakorrektur unterscheidet sich für schwarzen und weißen Text (siehe Grenzwerte unten).
  • shader: Eine Korrektur, die von einem GLSL-Shader angewendet wird.
Such-Gammakorrekturen funktionieren am besten auf GPUs mit begrenzter Shadermathematik. Shader-Gammakorrekturen sparen am meisten Speicher. Wir empfehlen die Verwendung der Standardmethode lookup, die einen guten Kompromiss zwischen Qualität, Geschwindigkeit und Speichernutzung bietet.
hwui.text_gamma float 1.4 Definiert den Gammawert, der für die Gammakorrektur von Text verwendet wird. Dieser Wert kann je nach Display des Geräts angepasst werden.
hwui.text_gamma.black_threshold integer 64 Definiert den Leuchtdichtegrenzwert, unter dem die Schwarz-Gamma-Korrektur angewendet wird. Der Wert muss im Bereich 0..255 liegen.
hwui.text_gamma.white_threshold integer 192 Definiert den Leuchtdichtegrenzwert, über dem die Weiß-Gammakorrektur angewendet wird. Der Wert muss im Bereich 0..255 liegen.
hwui.use_gpu_pixel_buffers boolean true Damit wird die Verwendung von PBOs auf OpenGL ES 3.0-Hardware aktiviert oder deaktiviert. PBOs werden vom Renderer für asynchrone Texturauslieferungen verwendet, insbesondere für den Schriftcache. Diese Eigenschaft sollte immer aktiviert bleiben, kann aber während der Einrichtung oder Entwicklung deaktiviert werden, wenn die Verwendung von PBOs zu Beschädigungen oder einer schlechten Leistung führt. Deshalb ist das Attribut nicht schreibgeschützt.