Konfiguracja OpenGLRenderer

W tym dokumencie opisujemy dostrajanie wydajności w celu optymalizacji działania sprzętu.

Właściwości OpenGLRenderer (libhwui)

W tym dokumencie opisujemy właściwości służące do sterowania dwuwymiarowym potokiem renderowania z akceleracją sprzętową w Androidzie. Ustaw te właściwości w elemencie device.mk jako PRODUCT_PROPERTY_OVERRIDES.

Właściwości wszystkich wersji Androida

Właściwość Typ Wartość domyślna Opis
ro.zygote.disable_gl_preload boolean false Włącza lub wyłącza wstępne wczytywanie sterowników EGL/GL w procesie Zygote podczas uruchamiania. Gdy ta właściwość ma wartość false, Zygote wstępnie wczytuje sterowniki GL, wywołując eglGetDisplay(EGL_DEFAULT_DISPLAY). Spowoduje to załadowanie kodu biblioteki dynamicznej w procesie Zygote, aby udostępnić go wszystkim innym procesom. Jeśli sterownik nie obsługuje udostępniania, ustaw tę właściwość na true.

Właściwości w przypadku Androida 8.0 i starszych wersji

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

Włącza lub wyłącza optymalizację nożycową. Akceptowane wartości to truefalse. Gdy optymalizacja wycinania jest włączona, OpenGLRenderer próbuje zminimalizować wycinanie, selektywnie włączając i wyłączając test wycinania GL.

Gdy ta opcja jest wyłączona, OpenGLRenderer utrzymuje włączony test wycinania GL i w razie potrzeby zmienia prostokąt wycinania. Niektóre procesory graficzne (np. SGX 540) działają lepiej, gdy częściej zmienia się prostokąt wycinania niż gdy często włącza się lub wyłącza test wycinania.

ro.hwui.texture_cache_size float 24 Określa rozmiar pamięci podręcznej tekstur dla każdego procesu w megabajtach. Zalecamy używanie pamięci podręcznej wystarczająco dużej, aby pomieścić kilka ekranów tekstur 32-bitowych. Na przykład na wyświetlaczu o rozdzielczości 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 dla każdego procesu w megabajtach. Zalecamy używanie pamięci podręcznej wystarczająco dużej, aby pomieścić 4-krotność ekranu w 32-bitowej rozdzielczości. Na przykład na wyświetlaczu o rozdzielczości 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 float 0.5 Określa rozmiar pamięci podręcznej gradientów dla każdego procesu w megabajtach. Pojedynczy gradient zajmuje zwykle od 1 KB do 4 KB pamięci. Zalecamy używanie pamięci podręcznej wystarczająco dużej, aby pomieścić co najmniej 12 gradientów.
ro.hwui.patch_cache_size integer 128 Określa rozmiar w kilobajtach pamięci podręcznej 9-patch dla każdego procesu. Pamięć podręczna zawiera tylko dane wierzchołków, więc może być niewielka. Każdy wierzchołek składa się z 4 liczb zmiennoprzecinkowych, czyli 16 bajtów.
ro.hwui.path_cache_size float 4 Określa rozmiar pamięci podręcznej ścieżek w megabajtach dla każdego procesu. Zalecamy używanie pamięci podręcznej wystarczająco dużej, aby pomieścić co najmniej jeden ekran tekstur 32-bitowych. Na przykład na ekranie o rozdzielczości 1280 x 800 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 pamięci podręcznej kształtów dla każdego procesu w megabajtach. Ta wartość jest używana przez kilka pamięci podręcznych, np. okręgi i zaokrąglone prostokąty. Zalecamy używanie pamięci podręcznej wystarczająco dużej, aby pomieścić co najmniej jeden 8-bitowy ekran. Na przykład na wyświetlaczu o rozdzielczości 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 tekstu dla każdego procesu. Zalecamy używanie pamięci podręcznej wystarczająco dużej, aby pomieścić 2 ekrany tekstur 8-bitowych. Na przykład na ekranie o rozdzielczości 1280 x 800 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 dla każdego procesu. Zalecamy używanie pamięci podręcznej wystarczająco dużej, aby pomieścić dwukrotnie większy ekran w 8 bitach. Na przykład na ekranie o rozdzielczości 1280 x 800 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 procent pamięci podręcznej tekstur, który ma zostać zachowany po opróżnieniu pamięci. System wywołuje opróżnianie pamięci, gdy musi odzyskać pamięć we wszystkich aplikacjach. 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 czcionek w pikselach. Górna granica zależy od tego, jak szybko karta graficzna może przesyłać tekstury. Zalecamy używanie co najmniej 1024 pikseli, ale nie więcej niż 2048 pikseli. Używaj też wartości będącej potęgą liczby 2.
ro.hwui.text_small_cache_height integer 256 Określa wysokość domyślnej pamięci podręcznej czcionek w pikselach. Górna granica zależy od tego, jak szybko karta graficzna może przesyłać tekstury. Zalecamy używanie co najmniej 256 pikseli, ale nie więcej niż 1024 piksele.
ro.hwui.text_large_cache_width integer 2048 Określa szerokość pamięci podręcznej dużej czcionki w pikselach. Ta pamięć podręczna jest używana w przypadku glifó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 tego, jak szybko karta graficzna może przesyłać tekstury. Zalecamy używanie co najmniej 2048 pikseli, ale nie więcej niż 4096 pikseli. Używaj też wartości będącej potęgą liczby 2.
ro.hwui.text_large_cache_height integer 512 Określa wysokość pamięci podręcznej dużej czcionki w pikselach. Pamięć podręczna dużej czcionki jest używana w przypadku glifów, które są zbyt duże, aby zmieścić się w domyślnej pamięci podręcznej czcionki. Górna granica zależy od tego, jak szybko GPU może przesyłać tekstury. Zalecamy używanie zdjęć o rozmiarze co najmniej 512 pikseli, ale nie więcej niż 2048 pikseli. Używaj też wartości będącej potęgą liczby 2.
hwui.text_gamma_correction string lookup Wybiera technikę korekcji gamma tekstu. Dostępne są 4 możliwe opcje:
  • lookup3: korekta na podstawie tabel przeglądowych. Korekcja gamma różni się w przypadku czarnego i białego tekstu (zobacz progi poniżej).
  • lookup: korekta na podstawie jednej tabeli przeglądowej.
  • shader3: korekta zastosowana przez shader GLSL. Korekcja gamma różni się w przypadku czarnego i białego tekstu (zobacz progi poniżej).
  • shader: korekta zastosowana przez shader GLSL.
Funkcja korekcji gamma najlepiej sprawdza się na procesorach graficznych z ograniczoną liczbą operacji matematycznych na shaderach. Korekty gamma shadera są najlepsze do oszczędzania pamięci. Zalecamy używanie domyślnej techniki lookup, która zapewnia dobry kompromis pod względem jakości, szybkości i wykorzystania pamięci.
hwui.text_gamma float 1.4 Określa wartość gamma używaną do korekcji gamma tekstu. Możesz dostosować tę wartość do wyświetlacza urządzenia.
hwui.text_gamma.black_threshold integer 64 Określa próg luminancji, poniżej którego stosowana jest korekcja gamma czerni. Wartość musi mieścić się w zakresie 0–255.
hwui.text_gamma.white_threshold integer 192 Określa próg luminancji, powyżej którego stosowana jest korekcja gamma bieli. Wartość musi mieścić się w zakresie 0–255.
hwui.use_gpu_pixel_buffers boolean true Włącza lub wyłącza używanie obiektów PBO na sprzęcie OpenGL ES 3.0. Mechanizm renderowania używa obiektów PBO do wykonywania asynchronicznego przesyłania tekstur, zwłaszcza w przypadku pamięci podręcznej czcionek. Ta właściwość powinna być zawsze włączona, ale możesz ją wyłączyć podczas uruchamiania lub programowania, jeśli PBO powodują uszkodzenia lub niską wydajność. Dlatego usługa nie jest tylko do odczytu.