OpenGLRenderer 配置

本文档介绍了您可以执行的性能调整,以充分利用您的硬件。

OpenGLRenderer (libhwui) 属性

本文档列出了可用于控制 Android 2D 硬件加速渲染管道的所有属性。在 device.mk 中将这些属性设置为 PRODUCT_PROPERTY_OVERRIDES

所有 Android 版本的属性

属性 类型 默认值 说明
ro.zygote.disable_gl_preload 布尔值 false 用于在启动时启用/停用 Zygote 中 EGL/GL 驱动程序的预加载。当此属性设置为 false 时,Zygote 将通过调用 eglGetDisplay(EGL_DEFAULT_DISPLAY) 预加载 GL 驱动程序。目标是在 Zygote 中加载动态库代码,以便与其他所有进程共享。如果驱动程序不支持共享,请将此属性设置为 true。

Android 8.0 及更低版本的属性

属性 类型 默认值 说明
ro.hwui.disable_scissor_opt 布尔值 false

用于启用或停用剪刀优化。接受的值为 true 和 false。启用剪刀优化后,OpenGLRenderer 会尝试通过选择性地启用和停用 GL 剪刀测试来最大限度地减少剪刀操作的使用。

停用优化后,OpenGLRenderer 会保持 GL 剪刀测试处于启用状态,并根据需要更改剪刀矩形。当更频繁地更改剪刀矩形而不是经常启用或停用剪刀测试时,某些 GPU(例如,SGX 540)的性能会更好。

ro.hwui.texture_cache_size 浮点数 24 定义每个进程纹理缓存的大小(以兆字节为单位)。我们建议使用足够大的缓存来容纳多个屏幕的 32 位纹理(例如,在 1280x800 显示屏上,一个全屏缓冲区大约使用 4 MB,因此缓存应至少为 20 MB。)
ro.hwui.layer_cache_size 浮点数 16 定义每个进程图层缓存的大小(以兆字节为单位)。我们建议使用足够大的缓存来容纳 4 倍屏幕大小的 32 位纹理。例如,在 1280x800 显示屏上,一个全屏缓冲区大约使用 4 MB,因此缓存应至少为 16 MB。
ro.hwui.gradient_cache_size 0.5 浮点数 定义每个进程渐变缓存的大小(以兆字节为单位)。单个渐变通常占用 1 到 4 KB 的内存。建议使用足够大的缓存来容纳至少十二个渐变。
ro.hwui.patch_cache_size 整数 128 定义每个进程的 9-patch 缓存的大小(以千字节为单位)。此缓存仅保存顶点数据,因此可以保持较小。每个顶点由 4 个浮点数或 16 个字节组成。
ro.hwui.path_cache_size 浮点数 4 定义每个进程路径缓存的大小(以兆字节为单位)。我们建议使用足够大的缓存来容纳至少一个屏幕大小的 32 位纹理。例如,在 1280x800 显示屏上,一个全屏缓冲区大约使用 4 MB,因此缓存应至少为 4 MB。
ro.hwui.shape_cache_size 浮点数 1 定义每个进程形状缓存的大小(以兆字节为单位)。此值由多个缓存(例如圆形和圆角矩形)使用。我们建议使用足够大的缓存来容纳至少一个 8 位屏幕。例如,在 1280x800 显示屏上,一个全屏缓冲区大约使用 1 MB,因此缓存应至少为 1 MB。
ro.hwui.drop_shadow_cache_size 浮点数 2 定义每个进程文本阴影缓存的大小,以兆字节为单位。我们建议使用足够大的缓存来容纳两个屏幕的 8 位纹理。例如,在 1280x800 显示屏上,一个全屏缓冲区大约使用 1 MB,因此缓存应至少为 2 MB。
ro.hwui.r_buffer_cache_size 浮点数 2 定义每个进程的渲染缓冲区缓存的大小,以兆字节为单位。建议使用足够大的缓存来容纳两倍屏幕大小的 8 位数据。例如,在 1280x800 显示屏上,一个全屏缓冲区大约使用 1 MB,因此缓存应至少为 2 MB。如果设备支持 4 位或 1 位模板缓冲区,则缓存可以更小。
ro.hwui.texture_cache_flush_rate 浮点数 0.6 定义内存刷新后要保留的纹理缓存的百分比。当系统需要回收所有应用程序的内存时,会触发内存刷新。我们建议在这种情况下释放大约 50% 的缓存。
ro.hwui.text_small_cache_width 整数 1024 定义默认字体缓存的宽度,以像素为单位。上限取决于 GPU 上传纹理的速度。我们建议至少使用 1024 像素,但最多使用 2048 像素。您还应该使用 2 的幂值。
ro.hwui.text_small_cache_height 整数 256 定义默认字体缓存的高度,以像素为单位。上限取决于 GPU 上传纹理的速度。我们建议至少使用 256 像素,但最多使用 1024 像素。
ro.hwui.text_large_cache_width 整数 2048 定义大字体缓存的宽度,以像素为单位。此缓存用于太大而无法放入默认字体缓存的字形。上限取决于 GPU 上传纹理的速度。我们建议至少使用 2048 像素,但最多使用 4096 像素。您还应该使用 2 的幂值。
ro.hwui.text_large_cache_height 整数 512 定义大字体缓存的高度,以像素为单位。大字体缓存用于太大而无法放入默认字体缓存的字形。上限取决于 GPU 上传纹理的速度。我们建议至少使用 512 像素,但最多使用 2048 像素。您还应该使用 2 的幂值。
hwui.text_gamma_correction string lookup 选择文本伽玛校正技术。有四种可能的选择:
  • lookup3:基于查找表的校正。黑色和白色文本的伽玛校正不同(请参阅下面的阈值)。
  • lookup:基于单个查找表的校正。
  • shader3:由 GLSL 着色器应用的校正。黑色和白色文本的伽玛校正不同(请参阅下面的阈值)。
  • shader:由 GLSL 着色器应用的校正。
查找表伽玛校正在具有有限着色器数学运算能力的 GPU 上效果最佳。着色器伽玛校正最适合节省内存。我们建议使用默认的 lookup 技术,它在质量、速度和内存使用方面提供了良好的折衷方案。
hwui.text_gamma 浮点数 1.4 定义用于文本伽玛校正的伽玛值。此值可以根据设备使用的显示器进行调整。
hwui.text_gamma.black_threshold 整数 64 定义应用黑色伽玛校正的亮度阈值。该值必须在 0..255 范围内定义。
hwui.text_gamma.white_threshold 整数 192 定义应用白色伽玛校正的亮度阈值。该值必须在 0..255 范围内定义。
hwui.use_gpu_pixel_buffers 布尔值 true 用于在 OpenGL ES 3.0 硬件上启用或禁用 PBO 的使用。渲染器使用 PBO 执行异步纹理上传,特别是对于字体缓存。此属性应始终保持启用状态,但如果使用 PBO 导致损坏或性能极差,则可以在启动或开发期间禁用它。这就是为什么该属性不是只读的原因。