blob: 57d60c072858fefc3e50f883e170e85e2ac750e3 [file] [log] [blame]
<html devsite><head>
<title>OpenGLRenderer 配置</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>本文档介绍了以充分利用硬件为目标的性能调校。</p>
<h2>OpenGLRenderer (libhwui) 属性</h2>
<p>本文档列出了您可以用来控制 Android 的 2D 硬件加速渲染管道的所有属性。将 <code>device.mk</code> 中的这些属性设为 <code>PRODUCT_PROPERTY_OVERRIDES</code></p>
<table>
<tbody><tr>
<th>属性</th>
<th>类型</th>
<th>默认值</th>
<th>说明</th>
</tr>
<tr>
<td><code>ro.hwui.disable_scissor_opt</code></td>
<td><code>boolean</code></td>
<td><code>false</code></td>
<td><p>用于启用或停用剪刀优化。接受的值为 true 和 false。如果启用剪刀优化,则 OpenGLRenderer 会尝试选择性启用和停用 GL 剪刀测试,以尽可能不使用剪刀。</p>
<p>如果停用优化,则 OpenGLRenderer 会让 GL 剪刀测试保持启用状态,并根据需要更改剪刀矩形。当剪刀矩形的更改频率超过启用或停用剪刀测试的频率时,某些 GPU(例如 SGX 540)的性能会更好。</p>
</td>
</tr>
<tr>
<td><code>ro.hwui.texture_cache_size</code></td>
<td><code>float</code></td>
<td><code>24</code></td>
<td>定义每个进程纹理缓存的大小(以兆字节为单位)。我们建议使用大容量的缓存,以足够容纳多个 32 位纹理的屏幕(例如,在 1280x800 显示屏上,一次全屏缓冲使用大约 4 MB 的内存,因此缓存应至少为 20 MB)。</td>
</tr>
<tr>
<td><code>ro.hwui.layer_cache_size</code></td>
<td><code>float</code></td>
<td><code>16</code></td>
<td>定义每个进程图层缓存的大小(以兆字节为单位)。我们建议使用大容量的缓存,以足够容纳 4 次 32 位屏幕。例如,在 1280x800 显示屏上,一次全屏缓冲使用大约 4 MB 的内存,因此缓存应至少为 16 MB。</td>
</tr>
<tr>
<td><code>ro.hwui.gradient_cache_size</code></td>
<td><code>0.5</code></td>
<td><code>float</code></td>
<td>定义每个进程渐变缓存的大小(以兆字节为单位)。单次渐变通常占用 1-4 KB 的内存。建议使用大容量的缓存,以足够容纳至少 12 次渐变。</td>
</tr>
<tr>
<td><code>ro.hwui.patch_cache_size</code></td>
<td><code>integer</code></td>
<td><code>128</code></td>
<td>定义每个进程中 9patch 缓存的大小(以千字节为单位)。此缓存仅保留顶点数据,因此可以保持小容量。每个顶点由 4 个浮点数或 16 个字节组成。</td>
</tr>
<tr>
<td><code>ro.hwui.path_cache_size</code></td>
<td><code>float</code></td>
<td><code>4</code></td>
<td>定义每个进程路径缓存的大小(以兆字节为单位)。我们建议使用大容量缓存,以足够容纳至少一个 32 位纹理的屏幕。例如,在 1280x800 显示屏上,一次全屏缓冲使用大约 4 MB 的内存,因此缓存应至少为 4 MB。</td>
</tr>
<tr>
<td><code>ro.hwui.shape_cache_size</code></td>
<td><code>float</code></td>
<td><code>1</code></td>
<td>定义每个进程图形缓存的大小(以兆字节为单位)。该值由多个缓存(如圆形和圆角矩形)使用。我们建议使用大容量缓存,以足够容纳至少一个 8 位屏幕。例如,在 1280x800 显示屏上,一次全屏缓冲使用大约 1 MB 的内存,因此缓存应至少为 1 MB。</td>
</tr>
<tr>
<td><code>ro.hwui.drop_shadow_cache_size</code></td>
<td><code>float</code></td>
<td><code>2</code></td>
<td>定义每个进程文字阴影缓存的大小(以兆字节为单位)。我们建议使用大容量缓存,以足够容纳两个 8 位纹理的屏幕。例如,在 1280x800 显示屏上,一次全屏缓冲使用大约 1 MB 的内存,因此缓存应至少为 2 MB。</td>
</tr>
<tr>
<td><code>ro.hwui.r_buffer_cache_size</code></td>
<td><code>float</code></td>
<td><code>2</code></td>
<td>定义每个进程的渲染缓冲区缓存的大小(以兆字节为单位)。我们建议您使用大容量的缓存,以足够容纳 2 次 8 位的屏幕。例如,在 1280x800 显示屏上,一次全屏缓冲使用大约 1 MB 的内存,因此缓存应至少为 2 MB。如果设备支持 4 位或 1 位模板缓冲,则可以使用更小容量的缓存。</td>
</tr>
<tr>
<td><code>ro.hwui.texture_cache_flush_rate</code></td>
<td><code>float</code></td>
<td><code>0.6</code></td>
<td>定义内存清理之后保留的纹理缓存所占的比例。当系统需要回收所有应用的内存时,就会触发内存清理。我们建议在这种情况下释放大约 50% 的缓存。</td>
</tr>
<tr>
<td><code>ro.hwui.text_small_cache_width</code></td>
<td><code>integer</code></td>
<td><code>1024</code></td>
<td>定义默认字体缓存的宽度(以像素为单位)。上限取决于 GPU 上传纹理的速度。我们建议该宽度不低于 1024 像素、不超过 2048 像素。您还应该使用二次方值。</td>
</tr>
<tr>
<td><code>ro.hwui.text_small_cache_height</code></td>
<td><code>integer</code></td>
<td><code>256</code></td>
<td>定义默认字体缓存的高度(以像素为单位)。上限取决于 GPU 上传纹理的速度。我们建议该高度不低于 256 像素、不超过 1024 像素。</td>
</tr>
<tr>
<td><code>ro.hwui.text_large_cache_width</code></td>
<td><code>integer</code></td>
<td><code>2048</code></td>
<td>定义大号字体缓存的宽度(以像素为单位)。此缓存用于字形过大难以适应默认字体缓存的情形。上限取决于 GPU 上传纹理的速度。我们建议该宽度不低于 2048 像素、不超过 4096 像素。您还应该使用二次方值。</td>
</tr>
<tr>
<td><code>ro.hwui.text_large_cache_height</code></td>
<td><code>integer</code></td>
<td><code>512</code></td>
<td>定义大号字体缓存的高度(以像素为单位)。大号字体缓存用于字形过大难以适应默认字体缓存的情形。上限取决于 GPU 上传纹理的速度。我们建议该高度不低于 512 像素、不超过 2048 像素。您还应该使用二次方值。</td>
</tr>
<tr>
<td><code>ro.zygote.disable_gl_preload</code></td>
<td><code>boolean</code></td>
<td><code>false</code></td>
<td>用于在启动时启用/停用 Zygote 中的 EGL/GL 驱动程序预加载。当此属性设为 false 时,Zygote 将通过调用 eglGetDisplay(EGL_DEFAULT_DISPLAY) 来预加载 GL 驱动程序。目标是加载 Zygote 中的动态库代码,以便与所有其他进程共享。如果驱动程序不支持共享,则将此属性设为 true。</td>
</tr>
<tr>
<td><code>hwui.text_gamma_correction</code></td>
<td><code>string</code></td>
<td><code>lookup</code></td>
<td>选择文字伽马校正方法。有以下四种方法可供选择:<ul>
<li><code>lookup3</code>:基于查询表校正。伽马校正针对黑白文字的表现不同(请参见下方的阈值)。</li>
<li><code>lookup</code>:基于单一查询表校正。</li>
<li><code>shader3</code>:由 GLSL 着色器应用校正。伽马校正针对黑白文字的表现不同(请参见下方的阈值)。</li>
<li><code>shader</code>:由 GLSL 着色器应用校正。</li>
</ul>查询伽马校正在着色器数学受限的 GPU 上表现最出色。着色器伽马校正是节省内存的最佳选择。我们建议使用默认的 <code>lookup</code> 方法,它能够在质量、速度和内存使用方面提供理想的折中方案。
</td>
</tr>
<tr>
<td><code>hwui.text_gamma</code></td>
<td><code>float</code></td>
<td><code>1.4</code></td>
<td>定义用于文字伽马校正的伽马值。该值可以根据设备使用的显示屏进行调整。</td>
</tr>
<tr>
<td><code>hwui.text_gamma.black_threshold</code></td>
<td><code>integer</code></td>
<td><code>64</code></td>
<td>定义应用黑色伽马校正的亮度阈值上限。必须在 0-255 的范围内定义该值。</td>
</tr>
<tr>
<td><code>hwui.text_gamma.white_threshold</code></td>
<td><code>integer</code></td>
<td><code>192</code></td>
<td>定义应用白色伽马校正的亮度阈值下限。必须在 0-255 的范围内定义该值。</td>
</tr>
<tr>
<td><code>hwui.use_gpu_pixel_buffers</code></td>
<td><code>boolean</code></td>
<td><code>true</code></td>
<td>用于启用或停用 OpenGL ES 3.0 硬件上的 PBO。PBO 渲染程序会使用 PBO 来执行异步纹理上传,尤其是字体缓存。该属性应始终保持启用状态,但如果使用 PBO 导致出现损坏或性能低下的情况,则可以在启动或开发期间停用该属性。因此,该属性不是只读属性。</td>
</tr>
</tbody></table>
</body></html>