OpenGLRenderer 設定

本文將說明如何調整效能,充分發揮硬體效能。

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

用於啟用或停用剪刀最佳化功能。可接受的值為 true 和 false。啟用剪刀最佳化功能後,OpenGLRenderer 會嘗試透過有選擇地啟用及停用 GL 剪刀測試,盡量減少使用剪刀。

停用最佳化功能後,OpenGLRenderer 會繼續啟用 GL 裁剪器測試,並視需要變更裁剪器矩形。部分 GPU (例如 SGX 540) 在經常變更剪裁矩形時,比經常啟用或停用剪裁測試時,效能會更好。

ro.hwui.texture_cache_size float 24 定義每個程序紋理快取的大小 (以 MB 為單位)。建議您使用足以容納多個螢幕 32 位元紋理的快取 (例如,在 1280x800 顯示器上,全螢幕緩衝區會使用約 4 MB,因此快取至少應為 20 MB)。
ro.hwui.layer_cache_size float 16 定義每個程序圖層快取的大小 (以 MB 為單位)。建議您使用足以容納 32 位元螢幕 4 倍大小的快取。舉例來說,在 1280x800 顯示器上,全螢幕緩衝區會使用約 4 MB 的空間,因此快取應至少為 16 MB。
ro.hwui.gradient_cache_size 0.5 float 定義每個程序漸層快取的大小 (以 MB 為單位)。單一漸層通常會佔用 1 到 4 KB 的記憶體。建議使用至少可容納十二個漸層的快取。
ro.hwui.patch_cache_size integer 128 定義每個程序的 9-patches 快取大小 (以 KB 為單位)。這個快取只會保留頂點資料,因此可以保持小型。每個頂點由 4 個浮點值或 16 個位元組組成。
ro.hwui.path_cache_size float 4 定義每個程序路徑快取的大小 (以 MB 為單位)。建議您使用足以容納至少一個畫面 32 位元紋理的快取。舉例來說,在 1280x800 顯示器上,全螢幕緩衝區會使用約 4 MB 的空間,因此快取至少應為 4 MB。
ro.hwui.shape_cache_size float 1 定義每個程序形狀快取的大小 (以 MB 為單位)。這個值會由多個快取 (例如圓形和圓角矩形) 使用。建議您使用足以容納至少一個 8 位元畫面的快取。舉例來說,在 1280x800 顯示器上,全螢幕緩衝區會使用約 1 MB 的空間,因此快取應至少為 1 MB。
ro.hwui.drop_shadow_cache_size float 2 定義每個程序文字陰影快取的大小 (以 MB 為單位)。建議您使用足以容納兩個畫面 8 位元紋理的快取。舉例來說,在 1280x800 顯示器上,全螢幕緩衝區會使用約 1 MB 的空間,因此快取應至少為 2 MB。
ro.hwui.r_buffer_cache_size float 2 定義每個程序的轉譯緩衝區快取大小 (以 MB 為單位)。建議使用足以容納 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 像素。您也應使用 2 的冪值。
ro.hwui.text_small_cache_height integer 256 定義預設字型快取的高度 (以像素為單位)。上限取決於 GPU 上傳紋理的速度。建議使用至少 256 像素,最多 1024 像素。
ro.hwui.text_large_cache_width integer 2048 定義大型字型快取的寬度 (以像素為單位)。這個快取用於字形過大,無法放入預設字型快取。上限取決於 GPU 上傳紋理的速度。建議使用至少 2048 像素,最多 4096 像素。您也應使用 2 的冪值。
ro.hwui.text_large_cache_height integer 512 定義大型字型快取的高度 (以像素為單位)。大型字型快取會用於無法放入預設字型快取的字元,上限取決於 GPU 上傳紋理的速度。建議使用至少 512 像素,最多 2048 像素。您也應使用 2 的冪值。
hwui.text_gamma_correction string lookup 選取文字伽馬校正技術。您有四種選擇:
  • lookup3:根據對照表進行修正。黑色和白色文字的伽瑪校正方式不同 (請參閱下方的門檻)。
  • lookup:根據單一查詢表進行修正。
  • shader3:GLSL 著色器套用的修正值。黑色和白色文字的伽瑪校正方式不同 (請參閱下方的門檻)。
  • shader:GLSL 著色器套用的修正項目。
查詢伽瑪校正功能最適合用於著色器運算能力有限的 GPU。著色器伽馬校正功能最適合用於節省記憶體。建議您使用預設的 lookup 技巧,這可在品質、速度和記憶體用量方面取得良好平衡。
hwui.text_gamma float 1.4 定義用於文字伽瑪校正的伽瑪值。這個值可根據裝置使用的螢幕進行調整。
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 導致資料毀損或效能不佳,則可在啟動或開發期間停用。因此,這個屬性並非唯讀。