本文档介绍了以充分利用硬件为目标的性能调校。
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 |
定义每个进程纹理缓存的大小(以兆字节为单位)。我们建议使用大容量的缓存,以足够容纳多个 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 的内存。建议使用大容量的缓存,以足够容纳至少 12 次渐变。 |
ro.hwui.patch_cache_size |
integer |
128 |
定义每个进程中 9-patch 缓存的大小(以千字节为单位)。此缓存仅保留顶点数据,因此可以保持小容量。每个顶点由 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 |
定义每个进程的渲染缓冲区缓存的大小(以兆字节为单位)。我们建议您使用大容量的缓存,以足够容纳 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 |
选择文字伽马校正方法。有以下四种方法可供选择:
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 导致出现损坏或性能很低的情况,则可以在设备开发期间停用该属性。因此,该属性不是只读属性。 |