Hardware Composer HAL
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Hardware Composer(HWC)HAL は、使用可能なハードウェアでバッファを合成する最も効率的な方法を特定します。HAL の実装はデバイス固有で、通常はディスプレイ ハードウェアの OEM が行います。
この方法のメリットは、GPU ではなくディスプレイ ハードウェアで複数のバッファを合成するオーバーレイ プレーンを思い浮かべるとわかりやすいでしょう。たとえば、上部にステータスバー、下部にナビゲーション バー、それ以外の場所にアプリのコンテンツが表示される、縦向きの一般的な Android スマートフォンについて考えてみましょう。各レイヤのコンテンツは別々のバッファにあります。次のいずれかの方法で合成を処理できます。
- アプリのコンテンツをスクラッチ バッファにレンダリングし、その上にステータスバー、さらにその上にナビゲーション バーをレンダリングして、最後にスクラッチ バッファをディスプレイ ハードウェアに渡します。
- 3 つのバッファをすべてディスプレイ ハードウェアに渡し、画面の部分ごとに異なるバッファからデータを読み取るように指示します。
後者の方がはるかに効率的です。
ディスプレイ プロセッサの機能には大きな差があります。オーバーレイの数、レイヤの回転またはブレンドの可否、配置とオーバーラップの制限を API で表現するのは困難です。これらのオプションに対応するため、HWC は次の計算を行います。
- SurfaceFlinger は HWC にレイヤの完全なリストを提供し、処理方法を確認します。
- HWC は、各レイヤにデバイス合成またはクライアント合成のマークを付けて応答します。
- SurfaceFlinger はクライアントをすべて処理して出力バッファを HWC に渡し、HWC が残りを処理できるようにします。
ハードウェア ベンダーは意思決定コードを要求に応じてカスタマイズできるため、すべてのデバイスから最大限のパフォーマンスを引き出すことができます。
画面上に変化がない場合、オーバーレイ プレーンは GL 合成よりも効率が下がる可能性があります。これは特に、オーバーレイ コンテンツに透明ピクセルがあり、オーバーラップ レイヤがブレンドされている場合に当てはまります。この場合、HWC は一部またはすべてのレイヤの GLES 合成をリクエストして合成バッファを保持できます。SurfaceFlinger から同じバッファセットの合成を要求された場合、HWC は以前合成したスクラッチ バッファを表示できます。これにより、アイドル状態のデバイスのバッテリー駆動時間を延ばせます。
Android デバイスは通常、4 つのオーバーレイ プレーンをサポートします。オーバーレイよりも多くのレイヤを合成しようとすると、一部のレイヤに GLES 合成が使用されます。つまり、アプリで使用するレイヤの数が消費電力とパフォーマンスに大きく影響する可能性があります。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2024-10-04 UTC。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"必要な情報がない"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"複雑すぎる / 手順が多すぎる"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"最新ではない"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻訳に関する問題"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"サンプル / コードに問題がある"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"その他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"わかりやすい"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"問題の解決に役立った"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"その他"
}]
{"lastModified": "\u6700\u7d42\u66f4\u65b0\u65e5 2024-10-04 UTC\u3002"}
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2024-10-04 UTC。"]]