このリンクから Android アーキテクチャを読んでい ます。
最初の試みでは、あちこちの断片を除いてすべてを理解できませんでした。
私は何を理解していますか?
1)
「同期フレームワーク」と呼ばれるものがあります。- わかった
2)
この同期フレームワークは、プロセス間、およびユーザー空間とカーネル空間の間で使用できます。- わかった
3)
非同期メカニズムに使用されます。- わかった。
4)
同期フレームワークがないと仮定します。
void display_buffer(struct dma_buf *buf);
与えられたバッファを表示する表示システムがあります。
while (1) {
-> Fill the buffer( buf)
-> call display_buffer(buf); -> Displays into the screen.
}
同期であるため、遅延が発生する可能性があります。
5)
同期フレームワークがサポートされていると仮定します。それは次のようなものです: 表示システムにバッファと startfence を与えます。startfence でシグナルを受け取ったときにバッファを表示する必要があります。同時に、完了したら、donefence で私を親密にする必要があります。表示システムが私に提供したもの。[完全には理解できていませんが、非同期モデルに役立つと感じています]、システムのレンダリング中にバッファを埋めることができます。
struct sync_fence* display_buffer(struct dma_buf *buf,
struct sync_fence *fence);
灰色の領域: それでも、非同期モードで display_buffer を使用する方法の疑似コードを書くことができませんでした。
Androidの公式リンクから段落を読んでいます。
"最近の Android デバイスは「同期フレームワーク」をサポートしています。これにより、グラフィックス データを非同期に操作できるハードウェア コンポーネントと組み合わせると、システムは気の利いたことを行うことができます。たとえば、プロデューサーは一連の OpenGL ES 描画コマンドを送信してからキューに入れることができます。レンダリングが完了する前の出力バッファ. バッファには, コンテンツの準備ができたことを知らせるフェンスが付随する. 2 つ目のフェンスはバッファがフリー リストに戻されるときに付随するため, コンシューマはコンテンツがまだ残っている間にバッファを解放できる.このアプローチにより、バッファーがシステム内を移動する際のレイテンシーとスループットが向上します。」
質問:
私は特にこの声明に混乱しています。
「コンテンツがまだ使用されている間にコンシューマがバッファを解放できるように、バッファがフリー リストに返されるときに 2 つ目のフェンスが付随します。このアプローチにより、バッファがシステムを移動する際のレイテンシとスループットが向上します。」
同じバッファの 2 番目のフェンス?. または別のバッファ?私が見るように、2つのバッファキューがあり、1つはリストがいっぱいで、もう1つは空のリストです。