OpenGLRenderer の設定

このドキュメントでは、ハードウェアを最大限に活用するためのパフォーマンス調整について説明します。

OpenGLRenderer(libhwui)プロパティ

このドキュメントでは、Android の 2D ハードウェア アクセラレーション レンダリング パイプラインの制御に使用できるすべてのプロパティを示します。これらのプロパティを device.mkPRODUCT_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 ビット テクスチャの画面を複数保持するのに十分な大きさのキャッシュを使用することをおすすめします。たとえば、1,280×800 のディスプレイでは全画面バッファで約 4 MB 使用されるため、20 MB 以上のキャッシュが必要です。
ro.hwui.layer_cache_size float 16 プロセスごとのレイヤ キャッシュのサイズをメガバイト単位で定義します。32 ビットの画面の 4 倍を保持するのに十分な大きさのキャッシュを使用することをおすすめします。たとえば、1,280×800 のディスプレイでは全画面バッファで約 4 MB 使用されるため、16 MB 以上のキャッシュが必要です。
ro.hwui.gradient_cache_size 0.5 float プロセスごとのグラデーション キャッシュのサイズをメガバイト単位で定義します。通常 1 つのグラデーションは 1〜4 KB のメモリを占有します。少なくとも 12 のグラデーションを保持するのに十分な大きさのキャッシュを使用することをおすすめします。
ro.hwui.patch_cache_size integer 128 プロセスごとの 9-patch キャッシュのサイズをキロバイト単位で定義します。このキャッシュは頂点データのみを保持するため、小さく抑えることができます。各頂点は 4 つの浮動小数点数、つまり 16 バイトで構成されます。
ro.hwui.path_cache_size float 4 プロセスごとのパスキャッシュのサイズをメガバイト単位で定義します。少なくとも 32 ビット テクスチャ 1 画面分を保持するのに十分な大きさのキャッシュを使用することをおすすめします。たとえば、1,280×800 のディスプレイでは全画面バッファで約 4 MB 使用されるため、4 MB 以上のキャッシュが必要です。
ro.hwui.shape_cache_size float 1 プロセスごとの図形キャッシュのサイズをメガバイト単位で定義します。この値は、円や角丸長方形などの複数のキャッシュで使用されます。8 ビットの画面を 1 つ以上保持するのに十分な大きさのキャッシュを使用することをおすすめします。たとえば、1,280×800 のディスプレイでは全画面バッファで約 1 MB 使用されるため、1 MB 以上のキャッシュが必要です。
ro.hwui.drop_shadow_cache_size float 2 プロセスごとのテキスト ドロップ シャドウ キャッシュのサイズをメガバイト単位で定義します。8 ビット テクスチャ 2 画面分を保持するのに十分な大きさのキャッシュを使用することをおすすめします。たとえば、1,280×800 のディスプレイでは全画面バッファで約 1 MB 使用されるため、2 MB 以上のキャッシュが必要です。
ro.hwui.r_buffer_cache_size float 2 プロセスごとのレンダリング バッファ キャッシュのサイズをメガバイト単位で定義します。8 ビットの画面の 2 倍を保持するのに十分な大きさのキャッシュを使用することをおすすめします。たとえば、1,280×800 のディスプレイでは全画面バッファで約 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 がテクスチャをアップロードする速度によって異なります。1,024~2,048 ピクセルの使用をおすすめします。また、2 のべき乗の値を使用する必要があります。
ro.hwui.text_small_cache_height integer 256 デフォルトのフォント キャッシュの高さをピクセル単位で定義します。上限は、GPU がテクスチャをアップロードする速度によって異なります。256~1,024 ピクセルの使用をおすすめします。
ro.hwui.text_large_cache_width integer 2048 大きいフォント キャッシュの幅をピクセル単位で定義します。このキャッシュは、大きすぎてデフォルトのフォント キャッシュに収まらないグリフに使用されます。上限は、GPU がテクスチャをアップロードする速度によって異なります。2,048~4,096 ピクセルの使用をおすすめします。また、2 のべき乗の値を使用する必要があります。
ro.hwui.text_large_cache_height integer 512 大きいフォント キャッシュの高さをピクセル単位で定義します。大きいフォント キャッシュは、大きすぎてデフォルトのフォント キャッシュに収まらないグリフに使用されます。上限は、GPU がテクスチャをアップロードする速度によって異なります。512~2,048 ピクセルの使用をおすすめします。また、2 のべき乗の値を使用する必要があります。
hwui.text_gamma_correction string lookup テキストのガンマ補正法を選択します。次の 4 つの選択肢があります。
  • 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 の使用によって破損やパフォーマンスの低下が発生した場合は、起動時または開発時に無効にできます。そのため、このプロパティは読み取り専用ではありません。