OpenGL渲染器配置

本文檔描述了您可以進行的性能調整,以充分利用您的硬件。

OpenGLRenderer (libhwui) 屬性

本文檔列出了可用於控制 Android 的 2D 硬件加速渲染管道的所有屬性。在device.mk中將這些屬性設置為PRODUCT_PROPERTY_OVERRIDES

所有 Android 版本的屬性

財產類型默認值描述
ro.zygote.disable_gl_preload boolean false用於在啟動時啟用/禁用 Zygote 中 EGL/GL 驅動程序的預加載。當此屬性設置為 false 時,Zygote 將通過調用 eglGetDisplay(EGL_DEFAULT_DISPLAY) 來預加載 GL 驅動程序。目標是在 Zygote 中加載動態庫代碼,以便與所有其他進程共享它。如果驅動程序不支持共享,請將此屬性設置為 true。

適用於 Android 8.0 及更低版本的屬性

財產類型默認值描述
ro.hwui.disable_scissor_opt boolean false

用於啟用或禁用剪刀優化。接受的值為真和假。當啟用剪刀優化時,OpenGLRenderer 會嘗試通過選擇性地啟用和禁用 GL 剪刀測試來最小化剪刀的使用。

當優化被禁用時,OpenGLRenderer 保持啟用 GL scissor 測試並根據需要更改 scissor rect。某些 GPU(例如,SGX 540)在更頻繁地更改 scissor rect 時比經常啟用或禁用 scissor 測試時表現更好。

ro.hwui.texture_cache_size float 24定義每個進程紋理緩存的大小(以兆字節為單位)。我們建議使用足夠大的緩存來容納多個屏幕的 32 位紋理(例如,在 1280x800 顯示器上,全屏緩衝區使用大約 4 MB,因此緩存應至少為 20 MB。)
ro.hwui.layer_cache_size float 16定義每個進程層緩存的大小(以兆字節為單位)。我們建議使用足夠大的緩存以容納 4 倍的 32 位屏幕。例如,在 1280x800 顯示器上,全屏緩衝區使用大約 4 MB,因此緩存應至少為 16 MB。
ro.hwui.gradient_cache_size 0.5 float定義每個進程梯度緩存的大小(以兆字節為單位)。單個梯度通常佔用 1 到 4 KB 的內存。建議使用足夠大的緩存來保存至少十二個梯度。
ro.hwui.patch_cache_size integer 128定義每個進程的 9 個補丁緩存的大小(以千字節為單位)。這個緩存只保存頂點數據,因此可以保持很小。每個頂點由 4 個浮點數或 16 個字節組成。
ro.hwui.path_cache_size float 4定義每個進程路徑緩存的大小(以兆字節為單位)。我們建議使用足夠大的緩存來保存至少一個屏幕的 32 位紋理。例如,在 1280x800 顯示器上,全屏緩衝區使用大約 4 MB,因此緩存應至少為 4 MB。
ro.hwui.shape_cache_size float 1定義每個進程形狀緩存的大小(以兆字節為單位)。該值由多個緩存使用,例如圓形和圓角矩形。我們建議使用大到足以容納至少一個 8 位屏幕的緩存。例如,在 1280x800 顯示器上,全屏緩衝區使用大約 1 MB,因此緩存應至少為 1 MB。
ro.hwui.drop_shadow_cache_size float 2定義每個進程文本投影緩存的大小(以兆字節為單位)。我們建議使用足夠大的緩存來容納兩個屏幕的 8 位紋理。例如,在 1280x800 顯示器上,全屏緩衝區使用大約 1 MB,因此緩存應至少為 2 MB。
ro.hwui.r_buffer_cache_size float 2定義每個進程的渲染緩衝區緩存的大小(以兆字節為單位)。建議使用足夠大的緩存以容納兩倍的 8 位屏幕。例如,在 1280x800 顯示器上,全屏緩衝區使用大約 1 MB,因此緩存應至少為 2 MB。如果設備支持 4 位或 1 位模板緩衝區,則緩存可以更小。
ro.hwui.texture_cache_flush_rate float 0.6定義內存刷新後要保留的紋理緩存百分比。當系統需要跨所有應用程序回收內存時,會觸發內存刷新。我們建議在這種情況下釋放大約 50% 的緩存。
ro.hwui.text_small_cache_width integer 1024定義默認字體緩存的寬度(以像素為單位)。上限取決於 GPU 上傳紋理的速度。我們建議使用至少 1024 像素但最多 2048 像素。您還應該使用二值的冪。
ro.hwui.text_small_cache_height integer 256定義默認字體緩存的高度(以像素為單位)。上限取決於 GPU 上傳紋理的速度。我們建議使用至少 256 像素但最多 1024 像素。
ro.hwui.text_large_cache_width integer 2048定義大字體緩存的寬度(以像素為單位)。此緩存用於字形太大而無法放入默認字體緩存中。上限取決於 GPU 上傳紋理的速度。我們建議使用至少 2048 像素但最多 4096 像素。您還應該使用二值的冪。
ro.hwui.text_large_cache_height integer 512定義大字體緩存的高度(以像素為單位)。大字體緩存用於字形太大而無法放入默認字體緩存中。上限取決於 GPU 上傳紋理的速度。我們建議使用至少 512 像素但最多 2048 像素。您還應該使用二值的冪。
hwui.text_gamma_correction string lookup選擇文本伽瑪校正技術。有四種可能的選擇:
  • lookup3 :基於查找表的更正。黑白文本的 Gamma 校正是不同的(請參閱下面的閾值)。
  • lookup :基於單個查找表的更正。
  • shader3 :由 GLSL 著色器應用的校正。黑白文本的 Gamma 校正是不同的(請參閱下面的閾值)。
  • shader :由 GLSL 著色器應用的校正。
查找 gamma 校正在具有有限著色器數學的 GPU 上效果最佳。著色器伽瑪校正最能節省內存。我們建議使用默認lookup技術,它在質量、速度和內存使用方面提供了很好的折衷。
hwui.text_gamma float 1.4定義用於文本 Gamma 校正的 Gamma 值。該值可以根據設備使用的顯示器進行調整。
hwui.text_gamma.black_threshold integer 64定義應用黑色伽瑪校正的亮度閾值。該值必須在 0..255 範圍內定義。
hwui.text_gamma.white_threshold integer 192定義應用白色伽馬校正的亮度閾值。該值必須在 0..255 範圍內定義。
hwui.use_gpu_pixel_buffers boolean true用於在 OpenGL ES 3.0 硬件上啟用或禁用 PBO。渲染器使用 PBO 來執行異步紋理上傳,尤其是對於字體緩存。此屬性應始終保持啟用狀態,但如果使用 PBO 導致損壞或糟糕的性能,則可以在啟動或開發期間禁用。這就是該屬性不是只讀的原因。