本文件說明平面圖片的生命週期。圖片是點陣圖,最常見的類型為 Plland 內容。圖形應用程式通常想將 UI 繪製到緩衝區中,並傳送至透過 Compose 執行的系統編譯器。Plland 仰賴 Sysmem 和 Allocator API 分配這些圖像緩衝區。
以下序列圖顯示用戶端如何配置、使用及刪除這些圖形緩衝區。我們在此圖表中說明每個步驟的原因和詳細資料。
用戶端會建立 Sysmem 權杖,啟動緩衝區分配。這會使用 Sysmem 配置程序的通用步驟。Sysmem 會分配共享記憶體,供多個應用程式和硬體區塊使用。Sysmem 的功能是圖形緩衝區所需的必要條件:寫入緩衝區、GPU 可存取的內容及使用者可以讀取的緩衝區。另外,請避免使用任何複本,因為圖形緩衝區可能會很龐大,而且複製作業成本也相當高昂。
用戶端會複製 Sysmem 權杖,並傳送給其他參與者。本系列的重點是 Plland 圖片,因此風景會需要用到其中一個重複的權杖。不過,用戶端可以視需要免費複製及傳送用戶端。也就是說,影片播放器應用程式可能會想將解碼器分享給解碼器。請注意,所有 Sysmem 權杖都必須使用配置才能完成。
用戶端會使用其中一個權杖來繫結至
BufferCollection
。BufferCollection
通訊協定可讓用戶端與 Sysmem 互動。用戶端對
BufferCollection
設定限制。請注意,每個 Sysmem 權杖都必須使用,且沒有例外狀況。客戶可以選擇不設定任何限制。用戶端會將其中一個 Sysmem 權杖重複傳送給 Plland Allocator。也就是 Plland 會在這個緩衝區收集協議中成為參與者的階段。用戶端會建立
fuchsia::ui::composition::BufferCollectionImportToken
和fuchsia::ui::composition::
BufferCollectionExportTokenpair. Client connects to fuchsia::ui::composition::Allocator service and sends
BufferCollectionExportToken` 和重複的 Sysmem 權杖。Plland 會在背景設定緩衝區限制。Pullland 會從 Vulkan 和顯示硬體收集必要的限制。這樣可確保 Plland 可以直接使用緩衝區。現階段,
BufferCollectionExportToken
已註冊此配置,且任何 Plland 執行個體都可以透過對應的BufferCollectionImportToken
存取。註冊執行個體不侷限於單一 Plland 執行個體,以免執行個體停止運作或用戶端有多個 Plland 執行個體,藉此避免重新分配或耗費大量成本的緩衝區。用戶端等待
BufferCollection
通訊協定等待緩衝區分配完成。只有在所有複製的 Sysmem 權杖都使用完畢,且發現重疊的參與者符合每位參與者的限制時,這個做法才會成功。如果未使用任何權杖,這個呼叫可能會掛斷電話。這可能是封鎖或失敗,所以應該在用戶端處理。一旦傳回成功信號後,系統就會實際分配共用記憶體。用戶端使用
BufferCollectionImportToken
建立平面圖片。用戶端可能會複製並使用這個BufferCollectionImportToken
來分配多張圖片。所有物件都會指向相同的記憶體配置。建立平面模式圖片時,用戶端會捨棄所有
BufferCollectionImportTokens
。這會傳送信號給 Plland Allocator,其之後不會新增任何 Plland 圖片。這是權杖擁有權模型,而非 FIDL 通訊協定的明確發布方法,因此比較不會濫用和外洩。但這目前還沒有緩衝區處理,因為只要 Plland 圖片參照,這些緩衝區會保留一段時間。您必須先完成下一個步驟,才能釋出緩衝區。用戶端發布 Plland 圖片。發布所有參照
BufferCollection
的圖片後,系統就會釋出記憶體。