Konfiguracja OpenGLRenderer

W tym dokumencie opisujemy, jak dostosować ustawienia, aby w pełni wykorzystać możliwości sprzętu.

Właściwości OpenGLRenderer (libhwui)

W tym dokumencie znajdziesz listę wszystkich właściwości, których możesz używać do sterowania 2D-owym szkicem renderowania przyspieszonego sprzętowo na Androidzie. Ustaw te właściwości w sekcji device.mk jako PRODUCT_PROPERTY_OVERRIDES.

Właściwości we wszystkich wersjach Androida

Właściwość Typ Wartość domyślna Opis
ro.zygote.disable_gl_preload boolean false Służy do włączania i wyłączania wstępnego wczytywania sterowników EGL/GL w Zygote podczas uruchamiania. Gdy ta właściwość ma wartość fałsz, Zygote wstępnie wczyta sterowniki GL, wywołując eglGetDisplay(EGL_DEFAULT_DISPLAY). Celem jest załadowanie kodu bibliotek dynamicznych w Zygote, aby udostępnić go wszystkim innym procesom. Jeśli sterownik nie obsługuje udostępniania, ustaw tę właściwość na wartość true.

Właściwości w przypadku Androida 8.0 lub starszego

Właściwość Typ Wartość domyślna Opis
ro.hwui.disable_scissor_opt boolean false

Służy do włączania i wyłączania optymalizacji scyzory. Akceptowane wartości to true i false. Gdy włączona jest optymalizacja nożyczek, OpenGLRenderer próbuje zminimalizować użycie nożyczek, selektywnie włączając i wyłączając test nożyczek GL.

Gdy optymalizacja jest wyłączona, OpenGLRenderer zachowuje test nożyczek GL i w razie potrzeby zmienia prostokąt nożyc. Niektóre karty graficzne (np. SGX 540) działają lepiej, gdy częściej zmieniają prostokąt Scissor niż często włączają lub wyłączają test Scissor.

ro.hwui.texture_cache_size float 24 Określa rozmiar pamięci podręcznej tekstury dla poszczególnych procesów w megabajtach. Zalecamy użycie pamięci podręcznej o wystarczającej wielkości, aby pomieścić kilka ekranów o teksturach 32-bitowych (np. na wyświetlaczu 1280 x 800 bufor pełnoekranowy zajmuje około 4 MB, więc pamięć podręczna powinna mieć co najmniej 20 MB).
ro.hwui.layer_cache_size float 16 Określa rozmiar pamięci podręcznej warstw w procesie (w megabajtach). Zalecamy użycie pamięci podręcznej o wystarczającej wielkości, aby pomieścić 4 razy więcej pikseli na ekranie w 32 bitach. Na przykład na wyświetlaczu 1280 x 800 bufor pełnoekranowy zajmuje około 4 MB, więc pamięć podręczna powinna mieć co najmniej 16 MB.
ro.hwui.gradient_cache_size 0.5 float Określa rozmiar (w megabajtach) pamięci podręcznej gradientów na proces. Pojedynczy gradient zajmuje zwykle od 1 do 4 KB pamięci. Zalecamy użycie pamięci podręcznej o wystarczającej wielkości, aby pomieścić co najmniej 12 gradientów.
ro.hwui.patch_cache_size integer 128 Określa rozmiar (w kilobajtach) pamięci podręcznej z 9 kompletami na proces. Ten bufor zawiera tylko dane wierzchołków, dlatego może być niewielki. Każdy wierzchołek składa się z 4 liczb zmiennoprzecinkowych lub 16 bajtów.
ro.hwui.path_cache_size float 4 Określa rozmiar pamięci podręcznej ścieżek procesów w megabajtach. Zalecamy użycie pamięci podręcznej o wystarczającej wielkości, aby pomieścić co najmniej 32-bitowe tekstury na jeden ekran. Na przykład na wyświetlaczu 1280 x 800 pikseli bufor pełnoekranowy zajmuje około 4 MB, więc pamięć podręczna powinna mieć co najmniej 4 MB.
ro.hwui.shape_cache_size float 1 Określa rozmiar (w megabajtach) pamięci podręcznej kształtów dla poszczególnych procesów. Ta wartość jest używana przez kilka pamięci podręcznych, takich jak koła i zaokrąglone prostokąty. Zalecamy użycie pamięci podręcznej o wystarczającej wielkości, aby pomieścić co najmniej 1 ekran 8-bitowy. Na przykład na wyświetlaczu 1280 x 800 bufor pełnoekranowy zajmuje około 1 MB, więc pamięć podręczna powinna mieć co najmniej 1 MB.
ro.hwui.drop_shadow_cache_size float 2 Określa rozmiar (w megabajtach) pamięci podręcznej cieni tekstowych na proces. Zalecamy użycie pamięci podręcznej o wystarczającej wielkości, aby pomieścić 2 ekrany o teksturach 8-bitowych. Na przykład na wyświetlaczu 1280 x 800 piksele bufor pełnoekranowy zajmuje około 1 MB, więc pamięć podręczna powinna mieć co najmniej 2 MB.
ro.hwui.r_buffer_cache_size float 2 Określa rozmiar (w megabajtach) pamięci podręcznej buforów renderowania na proces. Zalecamy użycie pamięci podręcznej o wystarczającej wielkości, aby pomieścić 2 razy więcej pikseli w 8 bitach. Na przykład na ekranie 1280 x 800 piksele bufor pełnoekranowy zajmuje około 1 MB, więc pamięć podręczna powinna mieć co najmniej 2 MB. Pamięć podręczna może być mniejsza, jeśli urządzenie obsługuje 4-bitowe lub 1-bitowe bufory szablonów.
ro.hwui.texture_cache_flush_rate float 0.6 Określa odsetek pamięci podręcznej tekstur, który ma być zachowany po opróżnieniu pamięci. Czyszczenie pamięci jest wywoływane, gdy system musi odzyskać pamięć z wszystkich aplikacji. W takich sytuacjach zalecamy zwolnienie około 50% pamięci podręcznej.
ro.hwui.text_small_cache_width integer 1024 Określa szerokość domyślnej pamięci podręcznej czcionki w pikselach. Górna granica zależy od szybkości przesyłania tekstur przez GPU. Zalecamy użycie co najmniej 1024 pikseli, ale nie więcej niż 2048 pikseli. Należy też użyć wartości potęgi dwójki.
ro.hwui.text_small_cache_height integer 256 Określa wysokość domyślnej pamięci podręcznej czcionki w pikselach. Górna granica zależy od szybkości przesyłania tekstur przez GPU. Zalecamy użycie co najmniej 256 pikseli, ale nie więcej niż 1024 piksele.
ro.hwui.text_large_cache_width integer 2048 Określa szerokość w pikselach pamięci podręcznej dużej czcionki. Ta pamięć podręczna jest używana do znaków, które są za duże, aby zmieścić się w domyślnej pamięci podręcznej czcionek. Górna granica zależy od szybkości przesyłania tekstur przez GPU. Zalecamy użycie co najmniej 2048 pikseli, ale nie więcej niż 4096 pikseli. Należy też użyć wartości potęgi dwójki.
ro.hwui.text_large_cache_height integer 512 Określa wysokość pamięci podręcznej dużych czcionek w pikselach. Duża pamięć podręczna czcionek jest używana do znaków, które są zbyt duże, aby zmieścić się w domyślnej pamięci podręcznej czcionek. Górna granica zależy od szybkości przesyłania tekstur przez GPU. Zalecamy używanie co najmniej 512 pikseli, ale nie więcej niż 2048 pikseli. Należy też użyć wartości potęgi dwójki.
hwui.text_gamma_correction string lookup Wybierz technikę korekcji gamma tekstu. Do wyboru masz 4 możliwości:
  • lookup3: korekta na podstawie tabel odwołania. Korekcja gamma jest inna w przypadku tekstu czarnego i białego (patrz progi poniżej).
  • lookup: poprawka na podstawie jednej tabeli odsyłających.
  • shader3: korekta zastosowana przez shader GLSL. Korekcja gamma jest inna w przypadku tekstu czarno-białego (patrz progi poniżej).
  • shader: korekta zastosowana przez shader GLSL.
Funkcja wyszukiwania korekcji gamma działa najlepiej na kartach graficznych z ograniczoną matematyką shadera. Poprawki gamma cieniowania to najlepszy sposób na oszczędzanie pamięci. Zalecamy użycie domyślnej techniki lookup, która zapewnia dobry kompromis pod względem jakości, szybkości i zużycia pamięci.
hwui.text_gamma float 1.4 Określa wartość gamma używaną do korekcji gamma tekstu. Wartość tę można dostosować na podstawie wyświetlacza używanego przez urządzenie.
hwui.text_gamma.black_threshold integer 64 Definiuje próg luminacji, poniżej którego jest stosowana korekcja czerni. Wartość musi mieścić się w zakresie 0–255.
hwui.text_gamma.white_threshold integer 192 Definiuje próg luminacji, powyżej którego ma być stosowana korekcja gamy bieli. Wartość musi mieścić się w zakresie 0–255.
hwui.use_gpu_pixel_buffers boolean true Służy do włączania i wyłączania PBO na sprzęcie OpenGL ES 3.0. PBO są używane przez mechanizm renderowania do asynchronicznego przesyłania tekstur, zwłaszcza do pamięci podręcznej czcionek. Ta usługa powinna być zawsze włączona, ale można ją wyłączyć podczas wdrażania lub tworzenia, jeśli jej użycie powoduje uszkodzenia lub powoduje znaczne pogorszenie wydajności. Z tego powodu usługa nie jest tylko do odczytu.