fuchsia.sysmem2

新增:12

通訊協定

分配器

定義於 fuchsia.sysmem2/allocator.fidl

分配系統記憶體緩衝區。

這個通訊協定中不使用 Epitaph 語言,

新增日期:19

AllocateNonSharedCollection

代表單一用戶端分配緩衝區集合 (即 發起人) 也是唯一的參與者 (從觀點來看) sysmem)。

這項呼叫主要用於臨時/測試用途。這場呼叫會略過 fuchsia.sysmem2/BufferCollectionToken 階段,因此無法 允許其他參與者指定其限制條件。

鼓勵真實客戶使用 改為 fuchsia.sysmem2/Allocator.AllocateSharedCollection,以及 讓相關參與者直接表達自身限制 將 BufferCollectionToken 傳送給這些參與者,藉此建立 sysmem。

要求

名稱類型
payload AllocatorAllocateNonSharedCollectionRequest

AllocateSharedCollection

建立根層級 fuchsia.sysmem2/BufferCollectionToken

BufferCollectionToken 可以「重複」以便發布至 位參與者 fuchsia.sysmem2/BufferCollectionToken.Duplicate。每項 BufferCollectionToken 可轉換為 fuchsia.sysmem2.BufferCollection fuchsia.sysmem2/Allocator.BindSharedCollection

緩衝區限制可透過 fuchsia.sysmem2/BufferCollection.SetConstraints

成功/失敗填入緩衝區集合和緩衝區可能會 下定來源 fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated

關閉 BufferCollectionToken 的用戶端或 BufferCollection (沒有先 Release) 將會失敗所有用戶端結束 屬於相同故障網域,根據預設, 緩衝區收集。詳情請見 fuchsia.sysmem2/BufferCollection.SetDispensablefuchsia.sysmem2/BufferCollection.AttachToken,用於建立方法 緩衝區集合中可以分隔故障網域。

要求

名稱類型
payload AllocatorAllocateSharedCollectionRequest

BindSharedCollection

fuchsia.sysmem2/BufferCollectionToken 轉換為 fuchsia.sysmem2/BufferCollection

傳送這則訊息時,緩衝區收集尚未 填入緩衝區 - 參與者必須先將 fuchsia.sysmem2/BufferCollection.SetConstraintsBufferCollection」用戶端端點。

所有 BufferCollectionToken 都從根層級複製 BufferCollectionToken (透過「AllocateSharedCollection」建立) 必須 「已繳交」透過 BindSharedCollection (或 Releaseed) 現有 BufferCollection 用戶端的結束日期必須傳送 SetConstraints 然後才在邏輯 BufferCollection 填入緩衝區 (或 將會失敗)。

要求

名稱類型
payload AllocatorBindSharedCollectionRequest

GetVmoInfo

已知有 sysmem 提供的 VMO 的控制代碼,這會傳回其他資訊 相應的 sysmem 邏輯緩衝區。

大多數呼叫端會先複製 VMO 帳號代碼,然後將重複項目傳送至 呼叫。

若用戶端為 sysmem 提供的 VMO 建立了子 VMO, 子項 VMO 不屬於「sysmem VMO」。

  • 要求 vmo 向 sysmem 提供的 VMO 的控制代碼 (或查看錯誤)。
  • 回應 buffer_collection_id 緩衝區集合 ID, 每次啟動每個邏輯緩衝區集合皆不重複。
  • 回應 buffer_index 內部緩衝區的緩衝區索引 緩衝區收集。這與其中緩衝區的索引相同 fuchsia.sysmem2/BufferCollectionInfo.buffersbuffer_index 所有 sysmem 交付的 VMO 都會擁有相同的 邏輯緩衝區 (即使 VMO 控制器不同)。buffer_index是 僅在緩衝區集合的緩衝區中不重複對於指定的緩衝區 buffer_collection_idbuffer_index 的組合是唯一的 每次啟動。
  • 回應 close_weak_asap 如果 vmo 是弱 sysmem VMO 的控制代碼, 系統會在回應中設定 close_weak_asap 欄位。這個帳號代碼 所有低度 VMO 控制代碼ZX_EVENTPAIR_PEER_CLOSED 緩衝區應盡快關閉。這可發出訊號 所有對緩衝區的 sysmem VMO 關閉不久後 (包括任何透過強力 BufferCollectionToken 間接保留,或 強大的 BufferCollection)。無法關閉所有低度 sysmem VMO 在 ZX_EVENTPAIR_PEER_CLOSED 發生時快速控制緩衝區 視為 VMO 外洩情形,是因為用戶端仍保有弱勢系統的漏洞 VMO 會處理異常情況,並導致 sysmem 對記錄檔產生大量投訴。 集合的緩衝區可彼此獨立釋放。 ZX_EVENTPAIR_PEER_CLOSED 可能已在 回應到用戶端後未準備好處理的用戶端 低強度 sysmem VMO 看到這個欄位時,可以關閉所有帳號代碼 緩衝區並失敗任何相關的要求
  • 錯誤 [fuchsia.sysmem2/Error.NOT_FOUND] - vmo 不是 sysmem VMO。強大和弱的 sysmem VMO 都能傳遞到這個呼叫 傳入此呼叫的 VMO 處理常式會保留 VMO 的資訊 才能回應這次通話因此 ZX_ERR_NOT_FOUND 錯誤並不明確 (即使沒有其他錯誤 呼叫 VMO。即使其他帳號代碼關閉 會在 GetVmoInfo 回應到達用戶端前)。
  • 錯誤 [fuchsia.sysmem2/Error.HANDLE_ACCESS_DENIED] Vmo 沒有 因權利/能力不足而能與 GetVmoInfo 搭配使用 。VMO 必須搭配 zx_vmo_get_info 使用, 主題 ZX_INFO_HANDLE_BASIC
  • 錯誤 [fuchsia.sysmem2/Error.UNSPECIFIED] 要求失敗, 原因不明。詳情請參閱記錄。
  • 錯誤 [fuchsia.sysmem2/Error.PROTOCOL_DEVIATION] vmo 欄位 未設定,或是要求欄位發生其他問題。

要求

名稱類型
payload AllocatorGetVmoInfoRequest

回應

名稱類型
payload Allocator_GetVmoInfo_Result

SetDebugClientInfo

設定目前用戶端相關資訊,供 sysmem 存取 協助診斷記憶體流失的情形和配置作業等待時間 參與者傳送 fuchsia.sysmem2/BufferCollection.SetConstraints

這會設定所有 fuchsia.sysmem2/Node 上的偵錯用戶端資訊 隨後由這個 fuchsia.sysmem2/Allocator 所建立 包括透過程式建立的任何 fuchsia.sysmem2/BufferCollection fuchsia.sysmem2/Allocator.BindSharedCollection (沒有 之前對 fuchsia.sysmem2/Allocator.SetDebugClientInfo 的呼叫, 這些 BufferCollection 的初始偵錯用戶端資訊與 產生 BufferCollection 的憑證。

您之後可以為每個 Node 覆寫這項資訊。 傳送 fuchsia.sysmem2/Node.SetDebugClientInfo

每傳送一次 fuchsia.sysmem2/Allocator.SetDebugClientInfo Allocator 是最有效率的做法 fuchsia.sysmem2/Node 會至少包含一些偵錯用戶端資訊 也比單獨傳送相同的偵錯檔案 透過 fuchsia.sysmem2/Node.SetDebugClientInfo 取得用戶端資訊 已建立 fuchsia.sysmem2/Node

  • 要求 name 這可以是任意字串,但目前的 程序名稱 (請參閱 fsl::GetCurrentProcessName) 就是很好的預設值。
  • 要求 id 這可以是任意 ID,但目前程序 ID (請參閱 fsl::GetCurrentProcessKoid) 是很好的預設值。

要求

名稱類型
payload AllocatorSetDebugClientInfoRequest

ValidateBufferCollectionToken

檢查 fuchsia.sysmem2/BufferCollectionToken Symem 伺服器

透過這項呼叫,用戶端可以判斷傳入的權杖是否為 Symem 伺服器已知的實際 sysmem 權杖,沒有任何風險 免於等待可能的假代詞完成作業 fuchsia.sysmem2/BufferCollectionToken.DuplicateSyncfuchsia.sysmem2/BufferCollectionToken.Sync (或任何其他雙向的雙向關係) FIDL 訊息)。用戶端信任權杖來源時 要提供實際權杖,通常不需要在 以及偵錯

如果驗證失敗但有時失敗, 權杖本身可能未呼叫 fuchsia.sysmem2/BufferCollectionToken.Sync 或 建立/複製 Deployment 後 fuchsia.sysmem2/BufferCollection.Sync 權杖,在將權杖傳送至目前用戶端之前。新版本 讓原始碼 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync 權杖,因為該呼叫內建同步步驟。或緩衝區 在 sysmem 處理此呼叫之前,收集作業可能會失敗 伺服器,當緩衝區收集失敗時,系統會清除 sysmem 對 相關聯的符記

這個呼叫不會對任何權杖產生影響。

  • 要求 token_server_koid 管道伺服器端的 KOid 可能是 BufferCollectionToken 管道您可以取得 透過 zx_object_get_info ZX_INFO_HANDLE_BASIC related_koid
  • 回應 is_known true 表示 sysmem 在當時知道符記 sysmem 已處理要求,但並不保證符記一定是 仍然有效。功用 保證至少該符記是真實符記,因此 呼叫權杖時不會停滯 (將失敗或成功呼叫) 而非停滯)。如果 可提供實際權杖,值得信任。是 值表示 sysmem 時,Smem 不知道該符記 已處理過這項呼叫,但權杖先前可能有效,或 可能因此成為有效狀態。或者,如果權杖傳送者不受信任, 提供實際權杖,這個權杖可能是假的 與 sysmem 同步的寄件者名部分,確保之前 Symem 會先得知建立/重複的符記,然後才會傳送 權杖指派給其他參與者。

要求

名稱類型
payload AllocatorValidateBufferCollectionTokenRequest

回應

名稱類型
payload Allocator_ValidateBufferCollectionToken_Result

BufferCollection

定義於 fuchsia.sysmem2/collection.fidl

fuchsia.sysmem2/BufferCollection 是直接來自 加入 sysmem re緩衝區收集;通常是緩衝區收集 將與有自己的 BufferCollection 的其他參與者共用 與相同緩衝區集合相關聯的用戶端端點。也就是 BufferCollection 介面的執行個體是緩衝區的檢視畫面 而非緩衝區收集本身

BufferCollection 連線的用意是協助非同步指標, 緩衝區集合已填入緩衝區時。

此外,當 sysmem 伺服器關閉管道時 用戶端應關閉所有取自此網路的 VMO 控制代碼 盡快 BufferCollection

某些緩衝區集合可能會使用足夠的記憶體,因此建議避免 使用 fuchsia.sysmem2/BufferCollection.AttachLifetimeTracking 啟動器可以瞭解緩衝區收集作業是否已達到足夠的緩衝區 在啟動者分配新的緩衝區集合之前,就先行釋放。

這個通訊協定中不使用 Epitaph 語言,

新增日期:19

AttachLifetimeTracking

設定在執行信號時 (ZX_EVENTPAIR_PEER_CLOSED) 觸發信號 緩衝區已分配完成,且只有指定數量的緩衝區 (或 ) 保留在緩衝區集合中。

fuchsia.sysmem2/BufferCollection.AttachLifetimeTracking 可讓您 用戶端,直到完全或大部分舊緩衝區收集作業完成為止 在嘗試分配新的緩衝區集合之前取消配置。 只有在其他緩衝區完全完整時,系統才會發出事件配對信號 取消分配 (不僅是用戶端未參照,而是所有記憶體 已經完全回收/回收利用該緩衝區所消耗的流量,或者 無法對樹狀結構或樹狀子目錄進行配置或邏輯分配失敗,包括 這個 fuchsia.sysmem2/BufferCollection

系統僅會發出事件配對,直到分配或邏輯分配為止 已完成;直到那時,集合目前的緩衝區數量為 已忽略。

如果附加子樹狀結構的邏輯分配失敗 (使用 fuchsia.sysmem2/BufferCollection.AttachToken), 無論 緩衝區集 (可能配置在整體緩衝區集合中)。這是 與一般分配一致性的邏輯配置一致性

這個事件顯示的生命週期包含非同步清理 而這項非同步清理作業必須 緩衝區的 VMO 控點目前關閉了 VMO 控制代碼。 因此,客戶應小心避免永久封鎖 且等待系統發出「ZX_EVENTPAIR_PEER_CLOSED」 對使用邏輯緩衝區集合的參與者較不信任或 較不可靠無法分配新的/替換緩衝區集合 遠比永遠陷入困境

這項機制旨在與 類似的 AttachLifetimeTracking 訊息;和同樣的 eventpair 帳號 (伺服器端) 可透過多個 AttachLifetimeTracking 訊息會傳送至不同的通訊協定,而 在所有用戶端皆有回應時,系統會為 ZX_EVENTPAIR_PEER_CLOSED 發出訊號 條件符合 (所有重複項目的擁有者都關閉了 伺服器結束控點)。此外,多虧了事件配對計畫的運作方式, 用戶端副本進行複製時,就不會阻止 ZX_EVENTPAIR_PEER_CLOSED信號。

伺服器刻意不「信任」並用於 server_end。這項機制刻意僅使用 ZX_EVENTPAIR_PEER_CLOSED 無法「盡早」設定,且只能設定 伺服器結束事件配對的所有控制站都關閉時。沒有意義 與任何其他信號相關聯,且客戶應忽略任何 eventpair 的兩側其他信號位元。

server_end 可能缺少 ZX_RIGHT_SIGNALZX_RIGHT_SIGNAL_PEER。 但必須具備 ZX_RIGHT_DUPLICATE (且必須具備 ZX_RIGHT_TRANSFER 而不會造成 BufferCollection 管道失敗)。

目前所有的資料表欄位皆為必填。

  • 要求 server_end 此事件配對控點將由 Symem 伺服器 (最初分配到緩衝區時, 緩衝區數量小於或等於 buffers_remaining
  • 要求 buffers_remaining 等待所有狀態 (buffers_remaining 除外),或 才能完整配置緩衝區。大於 0 的數字 這在已知有大量緩衝區的情況下可能會很有用 刻意關閉,不讓資料繼續使用 例如,在 UI 中保留最後一個可用影片影格 (即使影片串流使用受保護的輸出緩衝區)。是 在 BufferCollection 介面的範圍之外 (至少 ),決定在不關閉的情況下可保留的緩衝區數量,但 通常會介於 0 至 2 之間。

要求

名稱類型
payload BufferCollectionAttachLifetimeTrackingRequest

AttachToken

建立新符記,將新的參與者新增至現有邏輯 緩衝區收集 (如果現有集合的緩衝區數量) 和參與者允許

這有助於取代失敗的參與者,和/或 在緩衝區後新增/重新新增參與者

使用 fuchsia.sysmem2/BufferCollection.AttachToken 源自於附屬 fuchsia.sysmem2/BufferCollectionToken 的樹狀結構 進行一般設定程序 fuchsia.sysmem2/Node,這樣系統便看起來似乎從該節點分配緩衝區 客戶儘管可能會遇到所有緩衝區 事實上,系統先前分配到的 4 個 Pod這項程序稱為 。「分配」的多數例項在其他郵件中 也能讀取為「分配或邏輯分配」剩餘期間 但我們會直接說出「allocation」確保內容簡潔/清晰 並詳細介紹「邏輯分配」左側是 有關 AttachToken 的說明文件。

失敗的 Node 不會套用至 已附加 Node。更廣泛來說,發生子項 Node 失敗時遭到封鎖 如果已附加子項 Node,或者 子項資源為可用,且在邏輯分配後發生失敗 (請參閱 fuchsia.sysmem2/BufferCollectionToken.SetDispensable)。

在某些情況下,參與者可能會選擇一開始 委派參與者特定執行個體的備用憑證。 之後如果委派參與者的第一個例項失敗, 為委派參與者新增第二個例項,系統將提供憑證 使用 AttachToken 製作。

fuchsia.sysmem2/BufferCollectionToken 的觀點 權杖的運作方式與任何其他權杖相同。客戶可以 fuchsia.sysmem2/BufferCollectionToken.Duplicate憑證, 並能將權杖傳送給其他程序/參與者。 BufferCollectionToken Node 應轉換為 照常傳送 BufferCollection Node fuchsia.sysmem2/Allocator.BindSharedCollection,或可關閉 而不會因傳送 fuchsia.sysmem2/BufferCollectionToken.Release。假設前者 fuchsia.sysmem2/BufferCollection.SetConstraints 訊息或 fuchsia.sysmem2/BufferCollection.Release 訊息應傳送至 BufferCollection

子樹狀結構中,如果代表成功, fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated 表示 子樹狀結構參與者能夠滿足各種限制條件 已存在的緩衝區集合,可以使用 fuchsia.sysmem2/BufferCollectionInfo,包含圖片格式 及現有的其他參與者 (已新增 成功的邏輯分配) 以及其指定的緩衝區數量 的限制「失敗」結果表示新參與者 無法滿足使用現有緩衝區集合和 其已加入的參與者。如要改為建立新的集合, 允許所有參與者所需限制 (假設 SetDispensable 用於取代 AttachToken,或者一般符記為

使用 AttachToken 建立的符記會執行限制條件匯總: 緩衝區集合中目前生效的所有限制條件,再加上 考慮附加的符記,以及附加在 且並非本身是附加的符記 這個子樹下還有更深層的子樹視為邏輯 只有在這個子樹狀結構完成邏輯分配後才會進行配置。

將現有緩衝區指派給參與者 fuchsia.sysmem2/BufferCollectionConstraints.min_buffer_count_for_camping 等資源會按順序優先,但子項無法按照邏輯分配 以免所有父項傳送 SetConstraints

另請參閱 fuchsia.sysmem2/BufferCollectionToken.SetDispensable,其中 相對於 AttachToken,已建立權杖「Node」和「子項」 Node (在已建立的子樹狀結構中,但不屬於此 子樹狀結構) 參與限制及其父項 父項分配或邏輯分配期間

類似於 fuchsia.sysmem2/BufferCollectionToken.Duplicate, 新建立的權杖必須設為 fuchsia.sysmem2/Node.Sync Symem 的 sysmem,才能傳遞新憑證給 BindSharedCollectionSyncfuchsia.sysmem2/BufferCollection.Sync BufferCollectionToken 轉換為 BufferCollection。或者 新權杖上的 fuchsia.sysmem2/BufferCollectionToken.Sync 能夠正常運作。或使用 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync 能夠正常運作。如往常,BufferCollectionToken.Sync 可以在 BufferCollectionToken.Duplicate 訊息已透過新的 建立權杖,並透過 單程票。

目前所有的資料表欄位皆為必填。

  • 要求 rights_attentuation_mask。這麼做可讓您強化 VMO 。「rights_attenuation_mask」的這些值 不會造成注意 (請注意,0 不在這份清單中):
    • ZX_RIGHT_SAME_RIGHTS (建議)
    • 0xFFFFFFFF (適合在計算注意力遮罩時)
  • 要求 token_requestBufferCollectionToken 的伺服器端 頻道。用戶端會保留用戶端。

要求

名稱類型
payload BufferCollectionAttachTokenRequest

CheckAllBuffersAllocated

檢查輪詢中是否已分配所有緩衝區 。

新增時間:HEAD

要求

<空白>

回應

名稱類型
payload BufferCollection_CheckAllBuffersAllocated_Result

GetBufferCollectionId

取得緩衝區集合 ID。這個 ID 也有: fuchsia.sysmem2/Allocator.GetVmoInfo (以及 buffer_index 集合內)。

這種呼叫在無法傳達訊息時,主要就能派上用場 fuchsia.sysmem2/BufferCollectionTokenfuchsia.sysmem2/BufferCollection,但只能傳輸 VMO 控制代碼,可與 BufferCollection 用戶端彙整在一起 只有透過不同路徑建立的 Pod如果想傳達 盡可能直接BufferCollectionTokenBufferCollection

信任來自 sysmem 以外來源的 buffer_collection_id 值 類似於從 Zircon 以外的來源信任 koid 值。 除非確實有必要,否則應避免同時使用兩者, 。在某些情況下,可以參考 由 buffer_collection_id 透過BufferCollection 目的在於達到效率,但傳入值聲稱 buffer_collection_id 不足以證明授予 buffer_collection_id 任何能力的傳送者。寄件者必須 向接收器證明傳送者已/曾使用 VMO 或已/ 傳送帳號代碼,BufferCollectionToken 至同一個集合 sysmem 確認是有效的 sysmem 控點,且哪一個 sysmem 對應至 buffer_collection_id 的值。接收方應謹慎避免 假設寄件者擁有 BufferCollectionToken 寄件者只是證明傳送方收到了 VMO。

  • 回應 buffer_collection_id 每個緩衝區的 ID 不得重複 每開機一次就收集資料每個緩衝區都可以使用 buffer_collection_idbuffer_index

要求

<空白>

回應

名稱類型
payload Node_GetBufferCollectionId_Result

GetNodeRef

此步驟會獲得一個控制代碼,可當做參數,用於 fuchsia.sysmem2/Node.IsAlternateFor,呼叫任意值 fuchsia.sysmem2/Node。這個帳號代碼僅供確認 用戶端已從此 Node 取得這個帳號代碼。

由於這是一個 get 組合,因此沒有 fuchsia.sysmem2/Node.Sync 需要在 GetNodeRef 和對 IsAlternateFor 的呼叫之間取得適當資訊。 但兩筆呼叫通常來自不同的管道

另請參閱 fuchsia.sysmem2/Node.IsAlternateFor

目前所有的資料表欄位皆為必填。

  • 回應 node_ref 這個帳號代碼可透過以下位置上的 IsAlternateFor 傳送: 不同的 Node 管道,證明客戶取得了帳號代碼 (Node)。

要求

<空白>

回應

名稱類型
payload Node_GetNodeRef_Result

IsAlternateFor

檢查呼叫 fuchsia.sysmem2/Node 是否位於子樹狀結構中 根於其他通用父項的子項權杖 fuchsia.sysmem2/BufferCollectionTokenGroup, 傳入 node_ref

這場通話旨在協助解決許可控制資料重複的問題, 以及偵錯。

node_ref 必須使用 fuchsia.sysmem2/Node.GetNodeRef

node_ref 可以重複。不需要呼叫 對每次呼叫 fuchsia.sysmem2/Node.IsAlternateFor 的呼叫而言,都是 GetNodeRef

如果呼叫符記時,呼叫符記實際上可能根本不會是有效憑證, 權杖的可能惡意/不受信任的提供者,呼叫 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 而不是如果 IsAlternateFor 呼叫權杖會因為呼叫權杖不是真正的權杖而無回應 (實際上 和 sysmem 交談)。另一種方式是 fuchsia.sysmem2/Allocator.BindSharedCollection,先使用這個權杖 它也會驗證該憑證並轉換為 fuchsia.sysmem2/BufferCollection,然後呼叫 IsAlternateFor

目前所有的資料表欄位皆為必填。

  • 回應 is_alternate
    • true:呼叫節點與 node_ref NodeBufferCollectionTokenGroup。也就是說 呼叫 Nodenode_ref Node 不會同時 則不受 sysmem 選擇 不是兩者這是因為只有一個子的子系 邏輯運算子選取 BufferCollectionTokenGroup 而且只會有一個子項子樹狀結構 限制匯總
    • false:呼叫 Node 之間的第一個父項節點 且 node_ref Node 不是 BufferCollectionTokenGroup。 目前,共同中的第一個父項節點是 BufferCollectionTokenBufferCollection (不論是否 Release 後)。也就是說,呼叫 Nodenode_ref 在限制期間,Node 可能同時套用了這兩種限制條件 如果兩個 Node 都來自於邏輯分配的匯總值 由相關父項 BufferCollectionTokenGroup 選取。於 在此情況下,沒有任何 BufferCollectionTokenGroup 可直接避免同時選取兩個Node 因此就算 false、其中一項、 Node可能因此遭到排除, Node 有直接或間接父項 BufferCollectionTokenGroup,用於選取其他子項子樹狀結構 才是包含呼叫 Nodenode_ref Node 的子樹狀結構。
  • 錯誤 [fuchsia.sysmem2/Error.NOT_FOUND] node_ref 並未 與呼叫 Node 的緩衝區集合相關聯。 這個錯誤的另一個原因是 node_refzx.Handle.EVENT 擁有足夠的權限,但實際上並非 從 GetNodeRef 取得的實際 node_ref
  • 錯誤 [fuchsia.sysmem2/Error.PROTOCOL_DEVIATION] 呼叫端傳遞 不是 zx.Handle:EVENT 控制代碼的 node_ref,或沒有 實際node_ref所預期的必要權利。
  • 這次呼叫不會傳回其他失敗的狀態碼。不過 sysmem 之後可能會加入其他程式碼,因此用戶端應該 合理的預設處理方式。

要求

名稱類型
payload NodeIsAlternateForRequest

回應

名稱類型
payload Node_IsAlternateFor_Result

發布

fuchsia.sysmem2/BufferCollectionToken 管道上:

一般而言,參與者會將 BufferCollectionToken 轉換為 fuchsia.sysmem2/BufferCollection,但參與者可以改為傳送 透過權杖使用 Release (然後立即關閉管道,或 不久後就會回應伺服器關閉伺服器端, 可避免造成緩衝區收集失敗。如果沒有先前的 Release 關閉 BufferCollectionToken 用戶端端將會導致緩衝區 無法收集。

fuchsia.sysmem2/BufferCollection 管道上:

根據預設,伺服器會處理 fuchsia.sysmem2/BufferCollection 用戶端結束 (不含 Release )。部分原因是 當任何參與者失敗時,關閉 VMO 控點即可收回記憶體。如果 參與者想要完全關閉 BufferCollection, 導致緩衝區收集失敗,參與者可以傳送 Release 再關閉 BufferCollection 用戶端。Release可以 發生在 SetConstraints之前或之後。如果是 SetConstraints 之前, 即使 分配方式。如果在 SetConstraints 之後,系統會保留限制條件,並 卻與 BufferCollection 限制匯總的時間。

fuchsia.sysmem2/BufferCollectionTokenGroup 管道上:

根據預設,BufferCollectionTokenGroup 用戶端意外關閉 結束 (省略 Release) 將觸發緩衝區失敗 集合。如要在不關閉使用者的情況下關閉 BufferCollectionTokenGroup 管道,請按照下列步驟操作: 緩衝區收集失敗,請確認 AllChildrenPresent() 已發送 ,並在關閉BufferCollectionTokenGroup前傳送 Release 用戶端。

如果Release的發生時間早於 請 [fuchsia.sysmem2/BufferCollectionTokenGroup.AllChildrenPresent], the buffer collection will fail (triggered by reception of Releasewithout priorAllChildrenPresent). This is intentionally not analogous to how <a class='link' href='../fuchsia.sysmem2/'>fuchsia.sysmem2</a>/<a class='link' href='../fuchsia.sysmem2/#BufferCollection.Release'>BufferCollection.Release</a> without <a class='link' href='../fuchsia.sysmem2/'>fuchsia.sysmem2</a>/<a class='link' href='../fuchsia.sysmem2/#BufferCollection.SetConstraints'>BufferCollection.SetConstraints</a> first doesn't cause buffer collection failure. For a BufferCollectionTokenGroup, clean close requires AllChildrenPresent(if not already sent), then Release`] 來關閉用戶端。

如果 Release 發生在 AllChildrenPresent 之後,代表子項和全部 限制保持不變 (就像 BufferCollectionTokenGroup 個管道仍未結案),而客戶 結尾關閉不會觸發緩衝區收集失敗。

在所有 fuchsia.sysmem2/Node 管道 (以上任一個) 上:

為求簡潔,上方各管道的通訊協定段落會忽略 可分別建立 fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollection.AttachToken。用戶端結束時 意外關閉 (先未先使用 Release),而該用戶端端 宣告失敗的網域底下,而不是讓整個緩衝區收集失敗 失敗網域失敗,但緩衝區集合本身 則不受失敗網域故障影響。這類故障網域可能是 巢狀結構中,只有最內層的故障網域, Node 存在失敗。

要求

<空白>

SetConstraints

fuchsia.sysmem2/BufferCollectionConstraints 提供至緩衝區 集合。

參與者只能撥打電話 fuchsia.sysmem2/BufferCollection.SetConstraints fuchsia.sysmem2/BufferCollection

如要嘗試進行緩衝區分配, BufferCollection 個用戶端必須先呼叫 SetConstraints sysmem 會嘗試分配緩衝區。

  • 要求 constraints 這些是緩衝區上的限制 收集。 「constraints」欄位不是必要設定,如果沒有設定,用戶端會 並未設定任何實際的限制條件,而是表示 用戶端並未設定任何限制未設定 「constraints」欄位不會收到任何 VMO 帳號代碼,但仍可找到 會計算已分配的緩衝區數量,且仍可根據 他們的 buffer_index

要求

名稱類型
payload BufferCollectionSetConstraintsRequest

SetDebugClientInfo

設定目前用戶端相關資訊,供 sysmem 存取 協助診斷記憶體流失的情形和配置作業等待時間 參與者傳送 fuchsia.sysmem2/BufferCollection.SetConstraints

這會在 fuchsia.sysmem2/Node 和全部設定上設定偵錯用戶端資訊 Node源自這個 Node,除非覆寫 fuchsia.sysmem2/Allocator.SetDebugClientInfo 以上版本 fuchsia.sysmem2/Node.SetDebugClientInfo

每傳送一次 fuchsia.sysmem2/Allocator.SetDebugClientInfo Allocator 是最有效率的做法 fuchsia.sysmem2/Node 會至少包含一些偵錯用戶端資訊 也比單獨傳送相同的偵錯檔案 透過 fuchsia.sysmem2/Node.SetDebugClientInfo 取得用戶端資訊 已建立 fuchsia.sysmem2/Node

啟用詳細記錄功能時也會使用 (請參閱 SetVerboseLogging): 指出哪位客戶先關閉頻道,再導向子樹狀結構 失敗 (如果子樹狀結構的用途已結束,則可能是正常情況,但 如果不是預期情況,則可使用用戶端專屬管道名稱 協助診斷故障來源 顯示比例)。

目前所有的資料表欄位皆為必填。

  • 要求 name 這可以是任意字串,但目前的 程序名稱 (請參閱 fsl::GetCurrentProcessName) 就是很好的預設值。
  • 要求 id 這可以是任意 ID,但目前程序 ID (請參閱 fsl::GetCurrentProcessKoid) 是很好的預設值。

要求

名稱類型
payload NodeSetDebugClientInfoRequest

SetDebugTimeoutLogDeadline

如果沒有發現 sysmem,Sysmem 會記錄警示 所有用戶端的 fuchsia.sysmem2/BufferCollection.SetConstraints

用戶端可以呼叫這個方法,以在記錄列印時變更。如果 多個用戶端設定了期限,因此系統已指定 就會生效。

在大部分的情況下,預設值可正常運作。

目前所有的資料表欄位皆為必填。

  • 要求 deadline sysmem 開始嘗試記錄的時間 警告,除非所有限制在此日期前出現 sysmem。

要求

名稱類型
payload NodeSetDebugTimeoutLogDeadlineRequest

SetName

為這個緩衝區集合中的 VMO 設定名稱。

如果名稱不適合在 ZX_MAX_NAME_LEN 中,請提供 Vmo 的名稱 系統會將圖片截斷以符合尺寸vmo 的名稱會加上 集合內的緩衝區索引 (如果後置字串符合 ZX_MAX_NAME_LEN).您在這裡指定的名稱 (不含截斷名稱) 將會 「檢查」項目

這個名稱只會影響在設定名稱後分配的 VMO;這場通話 無法重新命名現有的 VMO。如果多個客戶設定不同名稱 那麼優先順序較高的值勝出使用 優先順序與前一個名稱相同,名稱不會改變。

目前所有的資料表欄位皆為必填。

  • 要求 priority 只有在此名稱是第一個 SetName 時才會設定名稱 或 priority 大於priority 在此緩衝區集合的所有 Node 進行之前的 SetName 呼叫。
  • 要求 name 在此緩衝區集合下建立的 VMO 名稱。

要求

名稱類型
payload NodeSetNameRequest

SetVerboseLogging

這會啟用緩衝區集合的詳細記錄功能。

詳細記錄功能包括透過 每個用戶端的 fuchsia.sysmem2/BufferCollection.SetConstraints 與透過 fuchsia.sysmem2/Node.SetDebugClientInfo 設定的資訊 (或 fuchsia.sysmem2/Allocator.SetDebugClientInfo),以及 Node的樹狀結構。

在匯總作業期間,Symem 只會顯示單一行申訴 失敗,只有匯總失敗的確切原因 但背景脈絡並不容易雖然這通常足以 如果隻小幅變更,一切運作正常 因此在進行微幅調整前,通常沒有辦法要求您 新的緩衝區集合首次運作特別是 包含更複雜的節點樹狀結構 fuchsia.sysmem2/BufferCollection.AttachToken fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollectionTokenGroup 節點,和相關 節點的子樹狀結構,詳細記錄可能有助於診斷 以及邏輯配置失敗的原因 子樹狀結構的執行速度比預期更快。

額外記錄的用意是可接受從效能來看 假設該詳細記錄功能已啟用 盡量減少緩衝區集合上的錯誤如果未追蹤錯誤 我們不會傳送這則訊息

要求

<空白>

SetWeak

設定目前的 fuchsia.sysmem2/Node 以及所有子項 Node 建立錯誤後所建立,表示客戶的 Node 用戶端端 (或在這則訊息之後建立的子項) 並非單獨的 足以讓分配的 VMO 保持運作

從低強度 Node 取得的所有 VMO 均為低 sysmem VMO。其他參考資訊 close_weak_asap

只有在 Node 準備就緒時,您才會收到這則訊息 分配 (否則伺服器會使用 ZX_ERR_BAD_STATE 關閉管道):

  • BufferCollectionToken:隨時
  • BufferCollectionSetConstraints之前
  • BufferCollectionTokenGroupAllChildrenPresent之前

目前在最佳化後,沒有從高強度Node轉換到低強度Node 但用戶端可以模擬 額外的 Node,之後即可分配更多資源 Node 可能會降低 Release,並關閉客戶強Node的用戶端端,但是 維持用戶端的低強度 Node

如果 Node 為零,且無高強度的 VMO 控制代碼,則會產生緩衝區 收集失敗 (全部 Node 個用戶端將會看到 ZX_CHANNEL_PEER_CLOSED和全部 close_weak_asapclient_end將 請參閱 ZX_EVENTPAIR_PEER_CLOSED),但 Sysem (刻意) 完全不會發現 直到所有 Node 都準備好配置為止。初始 分配成功,至少須存在一項高強度Node 但之後用戶端收到 VMO 控制代碼之後 用戶端可以BufferCollection.Release並關閉用戶端 導致這類失敗行為

這也意味著 fuchsia.sysmem2/Node.SetWeakOk,但不會 暗示 SetWeakOkfor_children_also 為 true,可以傳送 視需要單獨使用

要求

<空白>

SetWeakOk

這樣 sysmem 就會知道客戶已準備好注意 close_weak_asap

如要傳送,這則訊息必須早於 fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated

所有使用弱 fuchsia.sysmem2/BufferCollection 的參與者都必須 請在 WaitForAllBuffersAllocated前或家長的情況下傳送這則訊息 Node 必須傳送 fuchsia.sysmem2/Node.SetWeakOkfor_child_nodes_also true,否則 WaitForAllBuffersAllocated 會 觸發緩衝區收集失敗。

此訊息是必要的,因為低度的 sysmem VMO 通常 因此年長客戶沒注意到需要注意 close_weak_asap ZX_EVENTPAIR_PEER_CLOSED,並關閉所有項目 sysmem 弱 VMO 處理 Aap。看到這個訊息並要求 的參與者表示他們認同 通訊協定,可避免舊用戶端傳送較弱的 VMO 完全無法透過 sysmem 快速關閉 VMO 以及以每個緩衝區為基準。

無法處理「close_weak_asap」且也未處理這類參與者的參與者 無需透過 WaitForAllBuffersAllocated 擷取任何 VMO 控制代碼 才能傳送 SetWeakOk (不需要有家長 Node 傳送) SetWeakOkfor_child_nodes_also true)。不過, 同一參與者擁有擷取 VMO 的子項/委派項目 子項/委派項目需要先傳送 SetWeakOk WaitForAllBuffersAllocated

  • 要求 for_child_nodes_also 如果存在且為 true,表示 在這個訊息之後建立的這個節點的子節點和所有子節點 這些節點的子系所行為,就像傳送 SetWeakOk 一樣 這些節點在此節點之前建立的任何子節點 訊息就不包含在內。這是「固定式」設定合理來說 未設定此佈林值設為 true 的後續 SetWeakOk 不會重設 伺服器端布林值如果此情況對參與者造成問題, 解決方法為 SetWeakOk,在子項上執行 for_child_nodes_also 為 true 符記參與者只能設定 如果參與者確實承諾以下情況,則為 for_child_nodes_also: 遵守 close_weak_asap 各自的弱 VMO 控制代碼, 低強度 VMO 帳號代碼由持有相應子項的參與者所持有 Node。設定 for_child_nodes_also 時,子系 Node 使用 sysmem(1) 的結構可能較弱 sysmem1 Node 並未直接與 SetWeakOk 或任何 直接得知close_weak_asap的相關資訊。僅適用於 這個 Node 的子系,使用的是 sysmem(1),而不是 直接從 sysmem2 權杖轉換為 sysmem(1) 時為 Node 除非有這個 Node 的祖系,否則配置作業會失敗 指定 for_child_nodes_also 為 true。

要求

名稱類型
payload NodeSetWeakOkRequest

同步

確認已在伺服器端收到先前的郵件。這是 特別是在先前的訊息中建立新符記後 因為在傳送 權杖提供給其他參與者

對符合下列條件的權杖呼叫 fuchsia.sysmem2/BufferCollectionToken.Sync 不是有效的符記將導致 Sync 永久停滯。詳情請見 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 降低惡意/虛假的可能性 fuchsia.sysmem2/BufferCollectionToken, 另一種方法是將權杖 fuchsia.sysmem2/Allocator/BindSharedCollection,也會驗證 用來交換 fuchsia.sysmem2/BufferCollection 管道,和 隨後即可使用 fuchsia.sysmem2/BufferCollection.Sync,完全不必擔心風險 造成衝擊

建立一或多個 fuchsia.sysmem2/BufferCollectionToken 然後開始並完成 Sync,這樣您就能安全地將 「BufferCollectionToken」用戶端會得知其他參與者 當權杖由另一端 並產生 Syem 程式 fuchsia.sysmem2/Allocator.BindSharedCollection 訊息。這是 以高效率的方式建立代幣,同時避開不必要的來回行程。

其他選項包括等待 fuchsia.sysmem2/BufferCollectionToken.Duplicate (單獨呼叫 Sync),或呼叫 fuchsia.sysmem2/BufferCollection.Sync 透過以下方式轉換為 BufferCollectionfuchsia.sysmem2/Allocator.BindSharedCollection,或使用 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync,其中包含 同步處理步驟,且可一次建立多個權杖。

要求

<空白>

回應

名稱類型
payload Node_Sync_Result

WaitForAllBuffersAllocated

等待所有緩衝區分配完畢。

如果已分配緩衝區或完成緩衝區,此 FIDL 呼叫就會完成 並傳回失敗的詳細資料。

分配緩衝區前,必須發生以下情況:

  • 結果 buffer_collection_info VMO 帳號代碼和其他相關 資訊
  • 錯誤 [fuchsia.sysmem2/Error.NO_MEMORY] 要求有效,但 因此無法完成
  • 錯誤 [fuchsia.sysmem2/Error.PROTOCOL_DEVIATION] 要求如下: 格式錯誤
  • 錯誤 [fuchsia.sysmem2/Error.CONSTRAINTS_INTERSECTION_EMPTY] 要求有效,但無法回應,可能是因為硬體問題 如果參與者和系統不相容,就可能發生這種情形 限制 (概略來說是空的十字路口)。查看以下記錄檔 瞭解詳情。如果參與者可能受到施暴 非必要,請參閱 BufferCollectionTokenGroup。使用 fuchsia.sysmem2/BufferCollection.AttachToken,這將是 如果現有的緩衝區空間不足 來滿足附加符記上設定的限制 任何衍生自附加權杖的子樹狀結構。

要求

<空白>

回應

名稱類型
payload BufferCollection_WaitForAllBuffersAllocated_Result

BufferCollectionToken

定義於 fuchsia.sysmem2/collection.fidl

fuchsia.sysmem2/BufferCollectionToken 並非緩衝區集合,但 較適合識別特定潛在共用緩衝區集合 並可將潛在共用緩衝區集合發布到 在緩衝區收集尚未配置任何 緩衝區。

這個通訊協定中不使用 Epitaph 語言,

我們使用 BufferCollectionToken 的管道,而非單一管道 eventpair (配對),因為這樣我們就能偵測錯誤狀況,例如 在建立期間未能對參與者進行信任。

新增日期:19

CreateBufferCollectionTokenGroup

在一組符記中建立邏輯 OR,稱為 fuchsia.sysmem2/BufferCollectionTokenGroup

大部分的 sysmem 用戶端和許多參與者都不需要留意這一點 或約 BufferCollectionTokenGroup 的訊息。不過在某些情況下 參與者想將一組委派代表加入 但如果限制條件無法順利合併 會回復到另一組 (可能重疊) 的委派代表 和/或採用較嚴苛的策略 fuchisa.sysmem2/BufferCollectionConstraints 的嚴格程度 允許所有參與委派的參與者傳送資料)。在這種情況下, BufferCollectionTokenGroup 非常實用。

BufferCollectionTokenGroup 可用來在 N 之間建立「N OR」的 1 子項 fuchsia.sysmem2/BufferCollectionToken。子權杖 而未在匯總期間選取的任何維度都會失敗 (關閉),但 潛在參與者會在BufferCollection 管道用戶端端點會看到 PEER_CLOSED,讓參與者能夠: 清除未完成的推測使用 (這個 運作異常終止時,正常 BufferCollection 伺服器 分配邏輯緩衝區集合或之後緩衝區的非同步失敗 集合)。

請參閱通訊協定 BufferCollectionTokenGroup 的註解。

尚未套用的任何 rights_attenuation_maskAttachToken/SetDispensable 只要在工具中 BufferCollectionToken,以便做為 BufferCollectionTokenGroup

目前所有的資料表欄位皆為必填。

  • 要求 group_request;伺服器結束 透過 sysmem 提供的 BufferCollectionTokenGroup 管道。

要求

名稱類型
payload BufferCollectionTokenCreateBufferCollectionTokenGroupRequest

複製

根據這個資料欄建立其他 fuchsia.sysmem2/BufferCollectionToken 第一,參照同一個緩衝區集合

系統產生的符記是這個符記的子項, fuchsia.sysmem2/節點階層。

這個方法可用來新增參與者,方法是將 已建立權杖給其他參與者。

你可以使用這則單向訊息取代雙向訊息 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync FIDL 呼叫 不適合等待模型 Symem 回應 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync,或 用戶端程式碼的結構不正確,無法輕鬆複製所有需要的 符記

傳送一或多則 Duplicate 訊息後,以及 提供給其他參與者 (或其他參與者 fuchsia.sysmem2/Allocator 管道),用戶端必須傳送 fuchsia.sysmem2/Node.Sync,然後等待 Sync 回應。 Sync 呼叫可在權杖或 BufferCollection 上執行 取得此權杖後 BindSharedCollection 即可。兩者擇一都會 確保伺服器知道透過 Duplicate 建立的權杖 然後,其他參與者透過個別的 Allocator 個管道。

所有權杖都必須透過 fuchsia.sysmem2/Allocator.BindSharedCollectionfuchsia.sysmem2/Node.ReleaseBufferCollection 寫入 成功分配緩衝區

目前所有的資料表欄位皆為必填。

  • 要求 rights_attenuation_mask 權利位元皆為零 該遮罩就不會出現在緩衝區 VMO 權利中 用戶端結尾是 token_request。可讓發起者 媒介參與者須強化 。無法讓參與者取得權限 沒想到參與者尚未加入的訊息這個鍵 ZX_RIGHT_SAME_RIGHTS 可用於指定沒有註意力 。
    • 下列 Rights_attenuation_mask 的值對應的值不會吸引註意:
      • ZX_RIGHT_SAME_RIGHTS (建議)
      • 0xFFFFFFFF (這種情況下,當注意力遮罩 計算)
      • 0 (已淘汰 - 不使用 0:錯誤會移至記錄)
  • 要求 token_requestBufferCollectionToken 的伺服器端 頻道。此管道的客戶如同其他 共用緩衝區集合

要求

名稱類型
payload BufferCollectionTokenDuplicateRequest

DuplicateSync

根據這些資料建立其他 fuchsia.sysmem2/BufferCollectionToken 第一,參照同一個緩衝區集合

已建立的權杖是這個權杖的子項, fuchsia.sysmem2/節點階層。

這個方法可用來新增更多參與者,方法是 再將新建符記提供給其他參與者

系統會為 rights_attenuation_masks 陣列。

如果呼叫的符記可能因為 權杖可能有惡意/不信任的提供者,請考慮使用 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 而非可能無限期停滯 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync 一律不會回應 ,因為呼叫權杖並非真實權杖。

相較於 fuchsia.sysmem2/BufferCollectionToken.Duplicate,不要 呼叫此方法後,需要單獨的 fuchsia.sysmem2/Node.Sync 方法,因為此呼叫包含同步處理步驟,因此需要 來回航班。

所有權杖都必須透過 fuchsia.sysmem2/Allocator.BindSharedCollectionfuchsia.sysmem2/Node.ReleaseBufferCollection 寫入 成功配置緩衝區 (或者在邏輯架構中 子樹的例子 fuchsia.sysmem2/BufferCollectionToken.AttachToken

目前所有的資料表欄位皆為必填。

  • 要求 rights_attenuation_mask在每個 rights_attenuation_masks,將缺少權利位元 可透過相對應的回傳 產生下一個符記發起人或中介商 考量參與者可用的權利。請注意 取得參與者原本沒有的權利。 ZX_RIGHT_SAME_RIGHTS 值可用來指定不會 都應套用提示
  • 回應 tokens 用戶端為每個新建立的權杖結束。

要求

名稱類型
payload BufferCollectionTokenDuplicateSyncRequest

回應

名稱類型
payload BufferCollectionToken_DuplicateSync_Result

GetBufferCollectionId

取得緩衝區集合 ID。這個 ID 也有: fuchsia.sysmem2/Allocator.GetVmoInfo (以及 buffer_index 集合內)。

這種呼叫在無法傳達訊息時,主要就能派上用場 fuchsia.sysmem2/BufferCollectionTokenfuchsia.sysmem2/BufferCollection,但只能傳輸 VMO 控制代碼,可與 BufferCollection 用戶端彙整在一起 只有透過不同路徑建立的 Pod如果想傳達 盡可能直接BufferCollectionTokenBufferCollection

信任來自 sysmem 以外來源的 buffer_collection_id 值 類似於從 Zircon 以外的來源信任 koid 值。 除非確實有必要,否則應避免同時使用兩者, 。在某些情況下,可以參考 由 buffer_collection_id 透過BufferCollection 目的在於達到效率,但傳入值聲稱 buffer_collection_id 不足以證明授予 buffer_collection_id 任何能力的傳送者。寄件者必須 向接收器證明傳送者已/曾使用 VMO 或已/ 傳送帳號代碼,BufferCollectionToken 至同一個集合 sysmem 確認是有效的 sysmem 控點,且哪一個 sysmem 對應至 buffer_collection_id 的值。接收方應謹慎避免 假設寄件者擁有 BufferCollectionToken 寄件者只是證明傳送方收到了 VMO。

  • 回應 buffer_collection_id 每個緩衝區的 ID 不得重複 每開機一次就收集資料每個緩衝區都可以使用 buffer_collection_idbuffer_index

要求

<空白>

回應

名稱類型
payload Node_GetBufferCollectionId_Result

GetNodeRef

此步驟會獲得一個控制代碼,可當做參數,用於 fuchsia.sysmem2/Node.IsAlternateFor,呼叫任意值 fuchsia.sysmem2/Node。這個帳號代碼僅供確認 用戶端已從此 Node 取得這個帳號代碼。

由於這是一個 get 組合,因此沒有 fuchsia.sysmem2/Node.Sync 需要在 GetNodeRef 和對 IsAlternateFor 的呼叫之間取得適當資訊。 但兩筆呼叫通常來自不同的管道

另請參閱 fuchsia.sysmem2/Node.IsAlternateFor

目前所有的資料表欄位皆為必填。

  • 回應 node_ref 這個帳號代碼可透過以下位置上的 IsAlternateFor 傳送: 不同的 Node 管道,證明客戶取得了帳號代碼 (Node)。

要求

<空白>

回應

名稱類型
payload Node_GetNodeRef_Result

IsAlternateFor

檢查呼叫 fuchsia.sysmem2/Node 是否位於子樹狀結構中 根於其他通用父項的子項權杖 fuchsia.sysmem2/BufferCollectionTokenGroup, 傳入 node_ref

這場通話旨在協助解決許可控制資料重複的問題, 以及偵錯。

node_ref 必須使用 fuchsia.sysmem2/Node.GetNodeRef

node_ref 可以重複。不需要呼叫 對每次呼叫 fuchsia.sysmem2/Node.IsAlternateFor 的呼叫而言,都是 GetNodeRef

如果呼叫符記時,呼叫符記實際上可能根本不會是有效憑證, 權杖的可能惡意/不受信任的提供者,呼叫 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 而不是如果 IsAlternateFor 呼叫權杖會因為呼叫權杖不是真正的權杖而無回應 (實際上 和 sysmem 交談)。另一種方式是 fuchsia.sysmem2/Allocator.BindSharedCollection,先使用這個權杖 它也會驗證該憑證並轉換為 fuchsia.sysmem2/BufferCollection,然後呼叫 IsAlternateFor

目前所有的資料表欄位皆為必填。

  • 回應 is_alternate
    • true:呼叫節點與 node_ref NodeBufferCollectionTokenGroup。也就是說 呼叫 Nodenode_ref Node 不會同時 則不受 sysmem 選擇 不是兩者這是因為只有一個子的子系 邏輯運算子選取 BufferCollectionTokenGroup 而且只會有一個子項子樹狀結構 限制匯總
    • false:呼叫 Node 之間的第一個父項節點 且 node_ref Node 不是 BufferCollectionTokenGroup。 目前,共同中的第一個父項節點是 BufferCollectionTokenBufferCollection (不論是否 Release 後)。也就是說,呼叫 Nodenode_ref 在限制期間,Node 可能同時套用了這兩種限制條件 如果兩個 Node 都來自於邏輯分配的匯總值 由相關父項 BufferCollectionTokenGroup 選取。於 在此情況下,沒有任何 BufferCollectionTokenGroup 可直接避免同時選取兩個Node 因此就算 false、其中一項、 Node可能因此遭到排除, Node 有直接或間接父項 BufferCollectionTokenGroup,用於選取其他子項子樹狀結構 才是包含呼叫 Nodenode_ref Node 的子樹狀結構。
  • 錯誤 [fuchsia.sysmem2/Error.NOT_FOUND] node_ref 並未 與呼叫 Node 的緩衝區集合相關聯。 這個錯誤的另一個原因是 node_refzx.Handle.EVENT 擁有足夠的權限,但實際上並非 從 GetNodeRef 取得的實際 node_ref
  • 錯誤 [fuchsia.sysmem2/Error.PROTOCOL_DEVIATION] 呼叫端傳遞 不是 zx.Handle:EVENT 控制代碼的 node_ref,或沒有 實際node_ref所預期的必要權利。
  • 這次呼叫不會傳回其他失敗的狀態碼。不過 sysmem 之後可能會加入其他程式碼,因此用戶端應該 合理的預設處理方式。

要求

名稱類型
payload NodeIsAlternateForRequest

回應

名稱類型
payload Node_IsAlternateFor_Result

發布

fuchsia.sysmem2/BufferCollectionToken 管道上:

一般而言,參與者會將 BufferCollectionToken 轉換為 fuchsia.sysmem2/BufferCollection,但參與者可以改為傳送 透過權杖使用 Release (然後立即關閉管道,或 不久後就會回應伺服器關閉伺服器端, 可避免造成緩衝區收集失敗。如果沒有先前的 Release 關閉 BufferCollectionToken 用戶端端將會導致緩衝區 無法收集。

fuchsia.sysmem2/BufferCollection 管道上:

根據預設,伺服器會處理 fuchsia.sysmem2/BufferCollection 用戶端結束 (不含 Release )。部分原因是 當任何參與者失敗時,關閉 VMO 控點即可收回記憶體。如果 參與者想要完全關閉 BufferCollection, 導致緩衝區收集失敗,參與者可以傳送 Release 再關閉 BufferCollection 用戶端。Release可以 發生在 SetConstraints之前或之後。如果是 SetConstraints 之前, 即使 分配方式。如果在 SetConstraints 之後,系統會保留限制條件,並 卻與 BufferCollection 限制匯總的時間。

fuchsia.sysmem2/BufferCollectionTokenGroup 管道上:

根據預設,BufferCollectionTokenGroup 用戶端意外關閉 結束 (省略 Release) 將觸發緩衝區失敗 集合。如要在不關閉使用者的情況下關閉 BufferCollectionTokenGroup 管道,請按照下列步驟操作: 緩衝區收集失敗,請確認 AllChildrenPresent() 已發送 ,並在關閉BufferCollectionTokenGroup前傳送 Release 用戶端。

如果Release的發生時間早於 請 [fuchsia.sysmem2/BufferCollectionTokenGroup.AllChildrenPresent], the buffer collection will fail (triggered by reception of Releasewithout priorAllChildrenPresent). This is intentionally not analogous to how <a class='link' href='../fuchsia.sysmem2/'>fuchsia.sysmem2</a>/<a class='link' href='../fuchsia.sysmem2/#BufferCollection.Release'>BufferCollection.Release</a> without <a class='link' href='../fuchsia.sysmem2/'>fuchsia.sysmem2</a>/<a class='link' href='../fuchsia.sysmem2/#BufferCollection.SetConstraints'>BufferCollection.SetConstraints</a> first doesn't cause buffer collection failure. For a BufferCollectionTokenGroup, clean close requires AllChildrenPresent(if not already sent), then Release`] 來關閉用戶端。

如果 Release 發生在 AllChildrenPresent 之後,代表子項和全部 限制保持不變 (就像 BufferCollectionTokenGroup 個管道仍未結案),而客戶 結尾關閉不會觸發緩衝區收集失敗。

在所有 fuchsia.sysmem2/Node 管道 (以上任一個) 上:

為求簡潔,上方各管道的通訊協定段落會忽略 可分別建立 fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollection.AttachToken。用戶端結束時 意外關閉 (先未先使用 Release),而該用戶端端 宣告失敗的網域底下,而不是讓整個緩衝區收集失敗 失敗網域失敗,但緩衝區集合本身 則不受失敗網域故障影響。這類故障網域可能是 巢狀結構中,只有最內層的故障網域, Node 存在失敗。

要求

<空白>

SetDebugClientInfo

設定目前用戶端相關資訊,供 sysmem 存取 協助診斷記憶體流失的情形和配置作業等待時間 參與者傳送 fuchsia.sysmem2/BufferCollection.SetConstraints

這會在 fuchsia.sysmem2/Node 和全部設定上設定偵錯用戶端資訊 Node源自這個 Node,除非覆寫 fuchsia.sysmem2/Allocator.SetDebugClientInfo 以上版本 fuchsia.sysmem2/Node.SetDebugClientInfo

每傳送一次 fuchsia.sysmem2/Allocator.SetDebugClientInfo Allocator 是最有效率的做法 fuchsia.sysmem2/Node 會至少包含一些偵錯用戶端資訊 也比單獨傳送相同的偵錯檔案 透過 fuchsia.sysmem2/Node.SetDebugClientInfo 取得用戶端資訊 已建立 fuchsia.sysmem2/Node

啟用詳細記錄功能時也會使用 (請參閱 SetVerboseLogging): 指出哪位客戶先關閉頻道,再導向子樹狀結構 失敗 (如果子樹狀結構的用途已結束,則可能是正常情況,但 如果不是預期情況,則可使用用戶端專屬管道名稱 協助診斷故障來源 顯示比例)。

目前所有的資料表欄位皆為必填。

  • 要求 name 這可以是任意字串,但目前的 程序名稱 (請參閱 fsl::GetCurrentProcessName) 就是很好的預設值。
  • 要求 id 這可以是任意 ID,但目前程序 ID (請參閱 fsl::GetCurrentProcessKoid) 是很好的預設值。

要求

名稱類型
payload NodeSetDebugClientInfoRequest

SetDebugTimeoutLogDeadline

如果沒有發現 sysmem,Sysmem 會記錄警示 所有用戶端的 fuchsia.sysmem2/BufferCollection.SetConstraints

用戶端可以呼叫這個方法,以在記錄列印時變更。如果 多個用戶端設定了期限,因此系統已指定 就會生效。

在大部分的情況下,預設值可正常運作。

目前所有的資料表欄位皆為必填。

  • 要求 deadline sysmem 開始嘗試記錄的時間 警告,除非所有限制在此日期前出現 sysmem。

要求

名稱類型
payload NodeSetDebugTimeoutLogDeadlineRequest

SetDispensable

將此 fuchsia.sysmem2/BufferCollectionToken 設為可付款。

BufferCollectionToken 轉換為 fuchsia.sysmem2/BufferCollection,可支配狀態適用於 以及 BufferCollection

通常,如果用戶端關閉 fuchsia.sysmem2/BufferCollection 用戶端的用戶端程式碼 先是 fuchsia.sysmem2/BufferCollection.ReleaseBufferCollection fuchisa.sysmem2/Node 會失敗,也會失敗 將失敗套用到父項 fuchsia.sysmem2/Node 等 傳送至根 Node,該範圍無法收集整個緩衝區集合。於 相反地,分配的緩衝區之後,備用的 Node 可能會失敗 而不會導致 fuchsia.sysmem2/Node 中的父項失敗 總體。

備用的 Node 會參與限制匯總 在緩衝區分配之前,物件會與其父項物件共用如果 Node 為付款 失敗後,失敗就會傳播至 可付款的 Node 父項。

分配緩衝區後,就會發生錯誤 Node (或任何) 可付款的 Node 的子項) 未套用至可解決的 Node的家長。失敗確實會從 可支付的 Node 至可付款的 Node。孩子的失敗情形是 無法使用以下方式連接子系: fuchsia.sysmem2/BufferCollection.AttachToken 以及分配後發生錯誤

當參與者需要參與者時,可以使用備用的 Node 提供限制,不過在緩衝區配置後,參與者 可能會失敗,而且不會導致父項的緩衝區收集失敗 Node 的視角。

相反地,BufferCollection.AttachToken 可用來建立 不參與限制條件的 BufferCollectionToken 而且隨時都會失敗,Node 未套用至父項 Node,且可能會延遲提供 限制條件不會導致父項 Node 無法完成 緩衝區分配方法

使用 Node 根層級建立者 fuchsia.sysmem2/Allocator.AllocateSharedCollection) 情境選擇一開始使用備用 Node 之後如果有第一個例項 參與者失敗時,系統會指派該參與者的第二個執行個體 使用 AttachToken 建立的 BufferCollectionToken

通常用戶端會在 BufferCollectionToken SetDispensable 再傳送可補貼的 BufferCollectionToken 給 。因為 SetDispensable 不會傳播 子項 Node 失敗至父項 Node(如果用戶端依賴的話) 因父項失敗而注意到子項失敗。Node 用戶端,用戶端可能會透過其他方式發現失敗情形。 若沒有其他方便或方便的方式,客戶可改為 保留備用的 Node,並在該子之下建立子 Node, 傳送給委派參與者,但保留此Node,以便 在此 NodeNode 的 ZX_CHANNEL_PEER_CLOSED 信號,並採取適當行動 (例如啟動新的委派代表執行個體,並交給對方) 是BufferCollectionTokenfuchsia.sysmem2/BufferCollection.AttachToken,或傳播失敗 並以客戶專屬方式進行清理)。

雖然對SetDispensable BufferCollectionTokenGroup Node 的直接子項,則不可能 以便替換失敗的可補償 Node,該值是直接子項的 使用 AttachToken 搭配新符記的 BufferCollectionTokenGroup (因為群組中沒有 AttachToken)。請改為啟用 在本例中,AttachToken 個替代項目,請建立額外的 做為群組的直接子項,並使 做為額外權杖的子項。如此一來 屬於群組直接子項的額外符記 BufferCollection.AttachToken,可用來取代失敗的 系統直接提供憑證

已經補償的符記上的 SetDispensable 為冪等。

要求

<空白>

SetName

為這個緩衝區集合中的 VMO 設定名稱。

如果名稱不適合在 ZX_MAX_NAME_LEN 中,請提供 Vmo 的名稱 系統會將圖片截斷以符合尺寸vmo 的名稱會加上 集合內的緩衝區索引 (如果後置字串符合 ZX_MAX_NAME_LEN).您在這裡指定的名稱 (不含截斷名稱) 將會 「檢查」項目

這個名稱只會影響在設定名稱後分配的 VMO;這場通話 無法重新命名現有的 VMO。如果多個客戶設定不同名稱 那麼優先順序較高的值勝出使用 優先順序與前一個名稱相同,名稱不會改變。

目前所有的資料表欄位皆為必填。

  • 要求 priority 只有在此名稱是第一個 SetName 時才會設定名稱 或 priority 大於priority 在此緩衝區集合的所有 Node 進行之前的 SetName 呼叫。
  • 要求 name 在此緩衝區集合下建立的 VMO 名稱。

要求

名稱類型
payload NodeSetNameRequest

SetVerboseLogging

這會啟用緩衝區集合的詳細記錄功能。

詳細記錄功能包括透過 每個用戶端的 fuchsia.sysmem2/BufferCollection.SetConstraints 與透過 fuchsia.sysmem2/Node.SetDebugClientInfo 設定的資訊 (或 fuchsia.sysmem2/Allocator.SetDebugClientInfo),以及 Node的樹狀結構。

在匯總作業期間,Symem 只會顯示單一行申訴 失敗,只有匯總失敗的確切原因 但背景脈絡並不容易雖然這通常足以 如果隻小幅變更,一切運作正常 因此在進行微幅調整前,通常沒有辦法要求您 新的緩衝區集合首次運作特別是 包含更複雜的節點樹狀結構 fuchsia.sysmem2/BufferCollection.AttachToken fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollectionTokenGroup 節點,和相關 節點的子樹狀結構,詳細記錄可能有助於診斷 以及邏輯配置失敗的原因 子樹狀結構的執行速度比預期更快。

額外記錄的用意是可接受從效能來看 假設該詳細記錄功能已啟用 盡量減少緩衝區集合上的錯誤如果未追蹤錯誤 我們不會傳送這則訊息

要求

<空白>

SetWeak

設定目前的 fuchsia.sysmem2/Node 以及所有子項 Node 建立錯誤後所建立,表示客戶的 Node 用戶端端 (或在這則訊息之後建立的子項) 並非單獨的 足以讓分配的 VMO 保持運作

從低強度 Node 取得的所有 VMO 均為低 sysmem VMO。其他參考資訊 close_weak_asap

只有在 Node 準備就緒時,您才會收到這則訊息 分配 (否則伺服器會使用 ZX_ERR_BAD_STATE 關閉管道):

  • BufferCollectionToken:隨時
  • BufferCollectionSetConstraints之前
  • BufferCollectionTokenGroupAllChildrenPresent之前

目前在最佳化後,沒有從高強度Node轉換到低強度Node 但用戶端可以模擬 額外的 Node,之後即可分配更多資源 Node 可能會降低 Release,並關閉客戶強Node的用戶端端,但是 維持用戶端的低強度 Node

如果 Node 為零,且無高強度的 VMO 控制代碼,則會產生緩衝區 收集失敗 (全部 Node 個用戶端將會看到 ZX_CHANNEL_PEER_CLOSED和全部 close_weak_asapclient_end將 請參閱 ZX_EVENTPAIR_PEER_CLOSED),但 Sysem (刻意) 完全不會發現 直到所有 Node 都準備好配置為止。初始 分配成功,至少須存在一項高強度Node 但之後用戶端收到 VMO 控制代碼之後 用戶端可以BufferCollection.Release並關閉用戶端 導致這類失敗行為

這也意味著 fuchsia.sysmem2/Node.SetWeakOk,但不會 暗示 SetWeakOkfor_children_also 為 true,可以傳送 視需要單獨使用

要求

<空白>

SetWeakOk

這樣 sysmem 就會知道客戶已準備好注意 close_weak_asap

如要傳送,這則訊息必須早於 fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated

所有使用弱 fuchsia.sysmem2/BufferCollection 的參與者都必須 請在 WaitForAllBuffersAllocated前或家長的情況下傳送這則訊息 Node 必須傳送 fuchsia.sysmem2/Node.SetWeakOkfor_child_nodes_also true,否則 WaitForAllBuffersAllocated 會 觸發緩衝區收集失敗。

此訊息是必要的,因為低度的 sysmem VMO 通常 因此年長客戶沒注意到需要注意 close_weak_asap ZX_EVENTPAIR_PEER_CLOSED,並關閉所有項目 sysmem 弱 VMO 處理 Aap。看到這個訊息並要求 的參與者表示他們認同 通訊協定,可避免舊用戶端傳送較弱的 VMO 完全無法透過 sysmem 快速關閉 VMO 以及以每個緩衝區為基準。

無法處理「close_weak_asap」且也未處理這類參與者的參與者 無需透過 WaitForAllBuffersAllocated 擷取任何 VMO 控制代碼 才能傳送 SetWeakOk (不需要有家長 Node 傳送) SetWeakOkfor_child_nodes_also true)。不過, 同一參與者擁有擷取 VMO 的子項/委派項目 子項/委派項目需要先傳送 SetWeakOk WaitForAllBuffersAllocated

  • 要求 for_child_nodes_also 如果存在且為 true,表示 在這個訊息之後建立的這個節點的子節點和所有子節點 這些節點的子系所行為,就像傳送 SetWeakOk 一樣 這些節點在此節點之前建立的任何子節點 訊息就不包含在內。這是「固定式」設定合理來說 未設定此佈林值設為 true 的後續 SetWeakOk 不會重設 伺服器端布林值如果此情況對參與者造成問題, 解決方法為 SetWeakOk,在子項上執行 for_child_nodes_also 為 true 符記參與者只能設定 如果參與者確實承諾以下情況,則為 for_child_nodes_also: 遵守 close_weak_asap 各自的弱 VMO 控制代碼, 低強度 VMO 帳號代碼由持有相應子項的參與者所持有 Node。設定 for_child_nodes_also 時,子系 Node 使用 sysmem(1) 的結構可能較弱 sysmem1 Node 並未直接與 SetWeakOk 或任何 直接得知close_weak_asap的相關資訊。僅適用於 這個 Node 的子系,使用的是 sysmem(1),而不是 直接從 sysmem2 權杖轉換為 sysmem(1) 時為 Node 除非有這個 Node 的祖系,否則配置作業會失敗 指定 for_child_nodes_also 為 true。

要求

名稱類型
payload NodeSetWeakOkRequest

同步

確認已在伺服器端收到先前的郵件。這是 特別是在先前的訊息中建立新符記後 因為在傳送 權杖提供給其他參與者

對符合下列條件的權杖呼叫 fuchsia.sysmem2/BufferCollectionToken.Sync 不是有效的符記將導致 Sync 永久停滯。詳情請見 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 降低惡意/虛假的可能性 fuchsia.sysmem2/BufferCollectionToken, 另一種方法是將權杖 fuchsia.sysmem2/Allocator/BindSharedCollection,也會驗證 用來交換 fuchsia.sysmem2/BufferCollection 管道,和 隨後即可使用 fuchsia.sysmem2/BufferCollection.Sync,完全不必擔心風險 造成衝擊

建立一或多個 fuchsia.sysmem2/BufferCollectionToken 然後開始並完成 Sync,這樣您就能安全地將 「BufferCollectionToken」用戶端會得知其他參與者 當權杖由另一端 並產生 Syem 程式 fuchsia.sysmem2/Allocator.BindSharedCollection 訊息。這是 以高效率的方式建立代幣,同時避開不必要的來回行程。

其他選項包括等待 fuchsia.sysmem2/BufferCollectionToken.Duplicate (單獨呼叫 Sync),或呼叫 fuchsia.sysmem2/BufferCollection.Sync 透過以下方式轉換為 BufferCollectionfuchsia.sysmem2/Allocator.BindSharedCollection,或使用 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync,其中包含 同步處理步驟,且可一次建立多個權杖。

要求

<空白>

回應

名稱類型
payload Node_Sync_Result

BufferCollectionTokenGroup

定義於 fuchsia.sysmem2/collection.fidl

Symem 實作與 分配 / 邏輯分配方式如下:

和往常一樣,邏輯分配方式會考慮根層級和所有具有 連至不會傳輸 fuchsia.sysmem2/Node 的根目錄 使用 fuchsia.sysmem2/BufferCollection.AttachToken 或子樹狀結構建立 根於 AttachToken Node 和所有 Node,並且可連線至 不會傳輸另一個 AttachToken 的子樹狀結構這就是所謂的 邏輯配置經過修剪的子樹狀結構,或為精簡而經修剪的子樹。

在限制匯總期間 fuchsia.sysmem2/BufferCollectionTokenGroup 只會選取單一子項 Node。其餘兒童會看到 邏輯分配失敗,而選取的子項可能會成功。

整體中出現多個BufferCollectionTokenGroup 邏輯配置修剪的子樹狀結構,此為兩個群組的相對優先順序 相當於在樹狀結構的 DFS 預購疊代作業中排序 家長比孩子優先權高,孩子則較高 優先權高於右子項

選取群組的特定子項時 (無論在 進行限制匯總嘗試,或做為最終選擇時, 如未選取群組的其他子項,則會「隱藏」任何其他群組 在這些未獲選的兒童中

在邏輯分配中,系統會先暫時嘗試匯總 從優先順序最高的群組中選取子項 0,並從下一個子群組中選取子項 0 不受佈建設定隱藏的最高優先順序群組 等等

如果匯總嘗試失敗,系統就會使用 所有相同群組的序數 0 子項 (優先順序最低且不隱藏) 將佈建其序數的 1 子項 (接著是子 2) 依此類推如果將新的最低優先順序群組取消隱藏為臨時群組 已更新,現在所有未隱藏的最低優先順序群組 在變更佈建作業前,系統會按照順序考慮其子項 加到優先級最低的群組因此,這和 形成系統式列舉,列出所有可能的選擇組合 按照計數方式更新優先順序最低的群組,會更頻繁地更新 優先順序最高的群組與其實際嘗試 等所有組合加以匯總後,即可略過哪些組合 多半是多餘或對等項目,因為在未變更結果的情況下隱藏出來。

嘗試對列舉的非等效組合進行限制匯總 直到 (a) 所有匯總嘗試 在這種情況下,整體邏輯分配失敗,或 (b) 直到 嘗試匯總成功,此時系統會進行緩衝區分配 (如有需要; 如果這是根層級 Node 的修剪子樹狀結構, 只會嘗試一次根據首次成功後的緩衝區分配情形 限制匯總作業失敗,整體邏輯分配作業會失敗 ( 無需重試 / 重新嘗試緩衝區分配。如果緩衝區分配成功 (或者,由於經修剪的子樹狀結構並未包含 表示邏輯分配成功

如果這種優先配置方式無法合理用於您的 Symem,歡迎聯絡 Sysmem 他們與我們討論可能 以達成您的需求

請避免大量建立BufferCollectionTokenGroup 邏輯分配,特別是整體子項數量眾多時 尤其是在可合理預期匯總 無法使用序數 0 子項,也可能包含後面的子項。 Sysmem 減輕評估過多問題的可能性 子項組合/選擇項目數量過多, 邏輯分配範圍超過一定 (相當高但非龐大) 上限 當做群組子項組合/選項的條件。進階 (及其他功能) 複雜) 緩解措施並非實際必要 值得增加的複雜性如果上限是 sysmem 使用者,請與 sysmem 人員聯絡 或預期流量會下滑 只要設定成「自動重新啟動」 和「在主機維護期間」選項即可

偏好在fuchsia.sysmem2ImageFormatConstraints 單一 fuchsia.sysmem2/BufferCollectionConstraints (如果可行的話) 參與者只要表達出與員工之間 單個 fuchsia.images2/PixelFormat,並選用 sysmem 的 PixelFormat 在所有參與者支援的範圍內使用。

類似 fuchsia.sysmem2/BufferCollectionTokenfuchsia.sysmem2/BufferCollection,關閉 BufferCollectionTokenGroup 管道未傳送 先透過 fuchsia.sysmem2/Node.Release 將緩衝區收集失敗 (如果使用 fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollection.AttachToken BufferCollectionTokenGroup 是這類節點底下某個子樹狀結構的一部分 因此無法將失敗情形傳播至父項)

這個通訊協定中不使用 Epitaph 語言,

新增日期:19

AllChildrenPresent

表示不會再建立任何子項。

建立所有子項後,用戶端應傳送 fuchsia.sysmem2/BufferCollectionTokenGroup.AllChildrenPresent 到 告知 sysmem,不要再建立任何子項,好讓 sysmem 可以 是否適合開始匯總限制。

不允許在 AllChildrenPresent 之後傳送 CreateChild;這將 無法執行群組的子樹狀結構並關閉連結。

如果傳送 fuchsia.sysmem2/Node.Release,則應傳送該版本 AllChildrenPresent後,如果群組的子樹狀結構失敗,就會 這與不使用 Release 的做法類似 先前的 fuchsia.sysmem2/BufferCollection.SetConstraints 子樹狀結構故障。

要求

<空白>

CreateChild

建立子項 fuchsia.sysmem2/BufferCollectionToken。僅限一位孩子 (包括其子項) 在分配作業 (或符合邏輯條件時) 分配)。

將這個權杖的用戶端結尾傳遞至 fuchsia.sysmem2/Allocator.BindSharedCollection,完成 fuchsia.sysmem2/Node.Sync 必須使用 fuchsia.sysmem2/BufferCollectionTokenGroup.CreateChild。 或者,客戶可以使用 fuchsia.sysmem2/BufferCollectionTokenGroup.CreateChildrenSync 基本上包含 Sync

不允許在 AllChildrenPresent 之後傳送 CreateChild;這將 無法執行群組的子樹狀結構並關閉連結。

建立所有子項後,傳送 AllChildrenPresent。

  • 要求 token_request:新權杖管道的伺服器端。
  • 要求 rights_attenuation_mask 如果 ZX_RIGHT_SAME_RIGHTS 可讓持有人取得與進行緩衝區相同的緩衝區 父項權杖 (群組) 的所有物件。如果值不是 ZX_RIGHT_SAME_RIGHTS 值會解讀為含有 0 的位元遮罩 要確保擁有相關權利,因此 0xFFFFFFFF 是同義詞 代表 ZX_RIGHT_SAME_RIGHTS系統不允許且刻意禁止使用值 0 會導致子樹狀結構故障。

要求

名稱類型
payload BufferCollectionTokenGroupCreateChildRequest

CreateChildrenSync

以同步方式一次建立 1 或多個子項符記。對比 fuchsia.sysmem2/BufferCollectionTokenGroup.CreateChild,否 必須使用 fuchsia.sysmem2/Node.Sync 才能傳遞用戶端端 傳回的符記 fuchsia.sysmem2/Allocator/BindSharedCollection

較低索引的子符記優先順序較高 (嘗試越早) 索引子項符記

就所有子項符記而言,成功的匯總作業只會選擇一個 所有已建立的子項中 (涵蓋於 可能會多次呼叫 fuchsia.sysmem2/BufferCollectionTokenGroup.CreateChildfuchsia.sysmem2/BufferCollectionTokenGroup.CreateChildrenSync)。

每個群組允許的兒童總數上限,以及 整體樹狀結構 (根層級) 中的節點數量設有限制 無法透過這些通訊協定進行設定

不允許在 AllChildrenPresent 之後傳送 CreateChildrenSync; 這會使群組的子樹狀結構無法連結,並關閉連線。

建立所有子項後,傳送 AllChildrenPresent。

  • 要求 rights_attentuation_masks rights_attentuation_masks 決定已建立的子項人數 符記值 ZX_RIGHT_SAME_RIGHTS 並不構成任何權利。 0xFFFFFFFF 值是 ZX_RIGHT_SAME_RIGHTS 的同義詞。對於任何 遮罩中的每一個 0 位元都會畫到那邊的位子。
  • 回應 tokens 已建立的子權杖。

要求

名稱類型
payload BufferCollectionTokenGroupCreateChildrenSyncRequest

回應

名稱類型
payload BufferCollectionTokenGroup_CreateChildrenSync_Result

GetBufferCollectionId

取得緩衝區集合 ID。這個 ID 也有: fuchsia.sysmem2/Allocator.GetVmoInfo (以及 buffer_index 集合內)。

這種呼叫在無法傳達訊息時,主要就能派上用場 fuchsia.sysmem2/BufferCollectionTokenfuchsia.sysmem2/BufferCollection,但只能傳輸 VMO 控制代碼,可與 BufferCollection 用戶端彙整在一起 只有透過不同路徑建立的 Pod如果想傳達 盡可能直接BufferCollectionTokenBufferCollection

信任來自 sysmem 以外來源的 buffer_collection_id 值 類似於從 Zircon 以外的來源信任 koid 值。 除非確實有必要,否則應避免同時使用兩者, 。在某些情況下,可以參考 由 buffer_collection_id 透過BufferCollection 目的在於達到效率,但傳入值聲稱 buffer_collection_id 不足以證明授予 buffer_collection_id 任何能力的傳送者。寄件者必須 向接收器證明傳送者已/曾使用 VMO 或已/ 傳送帳號代碼,BufferCollectionToken 至同一個集合 sysmem 確認是有效的 sysmem 控點,且哪一個 sysmem 對應至 buffer_collection_id 的值。接收方應謹慎避免 假設寄件者擁有 BufferCollectionToken 寄件者只是證明傳送方收到了 VMO。

  • 回應 buffer_collection_id 每個緩衝區的 ID 不得重複 每開機一次就收集資料每個緩衝區都可以使用 buffer_collection_idbuffer_index

要求

<空白>

回應

名稱類型
payload Node_GetBufferCollectionId_Result

GetNodeRef

此步驟會獲得一個控制代碼,可當做參數,用於 fuchsia.sysmem2/Node.IsAlternateFor,呼叫任意值 fuchsia.sysmem2/Node。這個帳號代碼僅供確認 用戶端已從此 Node 取得這個帳號代碼。

由於這是一個 get 組合,因此沒有 fuchsia.sysmem2/Node.Sync 需要在 GetNodeRef 和對 IsAlternateFor 的呼叫之間取得適當資訊。 但兩筆呼叫通常來自不同的管道

另請參閱 fuchsia.sysmem2/Node.IsAlternateFor

目前所有的資料表欄位皆為必填。

  • 回應 node_ref 這個帳號代碼可透過以下位置上的 IsAlternateFor 傳送: 不同的 Node 管道,證明客戶取得了帳號代碼 (Node)。

要求

<空白>

回應

名稱類型
payload Node_GetNodeRef_Result

IsAlternateFor

檢查呼叫 fuchsia.sysmem2/Node 是否位於子樹狀結構中 根於其他通用父項的子項權杖 fuchsia.sysmem2/BufferCollectionTokenGroup, 傳入 node_ref

這場通話旨在協助解決許可控制資料重複的問題, 以及偵錯。

node_ref 必須使用 fuchsia.sysmem2/Node.GetNodeRef

node_ref 可以重複。不需要呼叫 對每次呼叫 fuchsia.sysmem2/Node.IsAlternateFor 的呼叫而言,都是 GetNodeRef

如果呼叫符記時,呼叫符記實際上可能根本不會是有效憑證, 權杖的可能惡意/不受信任的提供者,呼叫 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 而不是如果 IsAlternateFor 呼叫權杖會因為呼叫權杖不是真正的權杖而無回應 (實際上 和 sysmem 交談)。另一種方式是 fuchsia.sysmem2/Allocator.BindSharedCollection,先使用這個權杖 它也會驗證該憑證並轉換為 fuchsia.sysmem2/BufferCollection,然後呼叫 IsAlternateFor

目前所有的資料表欄位皆為必填。

  • 回應 is_alternate
    • true:呼叫節點與 node_ref NodeBufferCollectionTokenGroup。也就是說 呼叫 Nodenode_ref Node 不會同時 則不受 sysmem 選擇 不是兩者這是因為只有一個子的子系 邏輯運算子選取 BufferCollectionTokenGroup 而且只會有一個子項子樹狀結構 限制匯總
    • false:呼叫 Node 之間的第一個父項節點 且 node_ref Node 不是 BufferCollectionTokenGroup。 目前,共同中的第一個父項節點是 BufferCollectionTokenBufferCollection (不論是否 Release 後)。也就是說,呼叫 Nodenode_ref 在限制期間,Node 可能同時套用了這兩種限制條件 如果兩個 Node 都來自於邏輯分配的匯總值 由相關父項 BufferCollectionTokenGroup 選取。於 在此情況下,沒有任何 BufferCollectionTokenGroup 可直接避免同時選取兩個Node 因此就算 false、其中一項、 Node可能因此遭到排除, Node 有直接或間接父項 BufferCollectionTokenGroup,用於選取其他子項子樹狀結構 才是包含呼叫 Nodenode_ref Node 的子樹狀結構。
  • 錯誤 [fuchsia.sysmem2/Error.NOT_FOUND] node_ref 並未 與呼叫 Node 的緩衝區集合相關聯。 這個錯誤的另一個原因是 node_refzx.Handle.EVENT 擁有足夠的權限,但實際上並非 從 GetNodeRef 取得的實際 node_ref
  • 錯誤 [fuchsia.sysmem2/Error.PROTOCOL_DEVIATION] 呼叫端傳遞 不是 zx.Handle:EVENT 控制代碼的 node_ref,或沒有 實際node_ref所預期的必要權利。
  • 這次呼叫不會傳回其他失敗的狀態碼。不過 sysmem 之後可能會加入其他程式碼,因此用戶端應該 合理的預設處理方式。

要求

名稱類型
payload NodeIsAlternateForRequest

回應

名稱類型
payload Node_IsAlternateFor_Result

發布

fuchsia.sysmem2/BufferCollectionToken 管道上:

一般而言,參與者會將 BufferCollectionToken 轉換為 fuchsia.sysmem2/BufferCollection,但參與者可以改為傳送 透過權杖使用 Release (然後立即關閉管道,或 不久後就會回應伺服器關閉伺服器端, 可避免造成緩衝區收集失敗。如果沒有先前的 Release 關閉 BufferCollectionToken 用戶端端將會導致緩衝區 無法收集。

fuchsia.sysmem2/BufferCollection 管道上:

根據預設,伺服器會處理 fuchsia.sysmem2/BufferCollection 用戶端結束 (不含 Release )。部分原因是 當任何參與者失敗時,關閉 VMO 控點即可收回記憶體。如果 參與者想要完全關閉 BufferCollection, 導致緩衝區收集失敗,參與者可以傳送 Release 再關閉 BufferCollection 用戶端。Release可以 發生在 SetConstraints之前或之後。如果是 SetConstraints 之前, 即使 分配方式。如果在 SetConstraints 之後,系統會保留限制條件,並 匯總資料,但BufferCollection 限制匯總的時間。

fuchsia.sysmem2/BufferCollectionTokenGroup 管道上:

根據預設,BufferCollectionTokenGroup 用戶端意外關閉 結束 (省略 Release) 將觸發緩衝區失敗 集合。如要在不關閉使用者的情況下關閉 BufferCollectionTokenGroup 管道,請按照下列步驟操作: 緩衝區收集失敗,請確認 AllChildrenPresent() 已發送 ,並在關閉BufferCollectionTokenGroup前傳送 Release 用戶端。

如果Release的發生時間早於 請 [fuchsia.sysmem2/BufferCollectionTokenGroup.AllChildrenPresent], the buffer collection will fail (triggered by reception of Releasewithout priorAllChildrenPresent). This is intentionally not analogous to how <a class='link' href='../fuchsia.sysmem2/'>fuchsia.sysmem2</a>/<a class='link' href='../fuchsia.sysmem2/#BufferCollection.Release'>BufferCollection.Release</a> without <a class='link' href='../fuchsia.sysmem2/'>fuchsia.sysmem2</a>/<a class='link' href='../fuchsia.sysmem2/#BufferCollection.SetConstraints'>BufferCollection.SetConstraints</a> first doesn't cause buffer collection failure. For a BufferCollectionTokenGroup, clean close requires AllChildrenPresent(if not already sent), then Release`] 來關閉用戶端。

如果 Release 發生在 AllChildrenPresent 之後,代表子項和全部 限制保持不變 (就像 BufferCollectionTokenGroup 個管道仍未結案),而客戶 結尾關閉不會觸發緩衝區收集失敗。

在所有 fuchsia.sysmem2/Node 管道 (以上任一個) 上:

為求簡潔,上方各管道的通訊協定段落會忽略 可分別建立 fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollection.AttachToken。用戶端結束時 意外關閉 (先未先使用 Release),而該用戶端端 宣告失敗的網域底下,而不是讓整個緩衝區收集失敗 失敗網域失敗,但緩衝區集合本身 則不受失敗網域故障影響。這類故障網域可能是 巢狀結構中,只有最內層的故障網域, Node 存在失敗。

要求

<空白>

SetDebugClientInfo

設定目前用戶端相關資訊,供 sysmem 存取 協助診斷記憶體流失的情形和配置作業等待時間 參與者傳送 fuchsia.sysmem2/BufferCollection.SetConstraints

這會在 fuchsia.sysmem2/Node 和全部設定上設定偵錯用戶端資訊 Node源自這個 Node,除非覆寫 fuchsia.sysmem2/Allocator.SetDebugClientInfo 以上版本 fuchsia.sysmem2/Node.SetDebugClientInfo

每傳送一次 fuchsia.sysmem2/Allocator.SetDebugClientInfo Allocator 是最有效率的做法 fuchsia.sysmem2/Node 會至少包含一些偵錯用戶端資訊 也比單獨傳送相同的偵錯檔案 透過 fuchsia.sysmem2/Node.SetDebugClientInfo 取得用戶端資訊 已建立 fuchsia.sysmem2/Node

啟用詳細記錄功能時也會使用 (請參閱 SetVerboseLogging): 指出哪位客戶先關閉頻道,再導向子樹狀結構 失敗 (如果子樹狀結構的用途已結束,則可能是正常情況,但 如果不是預期情況,則可使用用戶端專屬管道名稱 協助診斷 Symem 的 顯示比例)。

目前所有的資料表欄位皆為必填。

  • 要求 name 這可以是任意字串,但目前的 程序名稱 (請參閱 fsl::GetCurrentProcessName) 就是很好的預設值。
  • 要求 id 這可以是任意 ID,但目前程序 ID (請參閱 fsl::GetCurrentProcessKoid) 是很好的預設值。

要求

名稱類型
payload NodeSetDebugClientInfoRequest

SetDebugTimeoutLogDeadline

如果沒有發現 sysmem,Sysmem 會記錄警示 所有用戶端的 fuchsia.sysmem2/BufferCollection.SetConstraints

用戶端可以呼叫這個方法,以在記錄列印時變更。如果 多個用戶端設定了期限,因此系統已指定 就會生效。

在大部分的情況下,預設值可正常運作。

目前所有的資料表欄位皆為必填。

  • 要求 deadline sysmem 開始嘗試記錄的時間 警告,除非所有限制在此日期前出現 sysmem。

要求

名稱類型
payload NodeSetDebugTimeoutLogDeadlineRequest

SetName

為這個緩衝區集合中的 VMO 設定名稱。

如果名稱不適合在 ZX_MAX_NAME_LEN 中,請提供 Vmo 的名稱 系統會將圖片截斷以符合尺寸vmo 的名稱會加上 集合內的緩衝區索引 (如果後置字串符合 ZX_MAX_NAME_LEN).您在這裡指定的名稱 (不含截斷名稱) 將會 「檢查」項目

這個名稱只會影響在設定名稱後分配的 VMO;這場通話 無法重新命名現有的 VMO。如果多個客戶設定不同名稱 那麼優先順序較高的值勝出使用 優先順序與前一個名稱相同,名稱不會改變。

目前所有的資料表欄位皆為必填。

  • 要求 priority 只有在此名稱是第一個 SetName 時才會設定名稱 或 priority 大於priority 在此緩衝區集合的所有 Node 進行之前的 SetName 呼叫。
  • 要求 name 在此緩衝區集合下建立的 VMO 名稱。

要求

名稱類型
payload NodeSetNameRequest

SetVerboseLogging

這會啟用緩衝區集合的詳細記錄功能。

詳細記錄功能包括透過 每個用戶端的 fuchsia.sysmem2/BufferCollection.SetConstraints 與透過 fuchsia.sysmem2/Node.SetDebugClientInfo 設定的資訊 (或 fuchsia.sysmem2/Allocator.SetDebugClientInfo),以及 Node的樹狀結構。

在匯總作業期間,Symem 只會顯示單一行申訴 失敗,只有匯總失敗的確切原因 但背景脈絡並不容易雖然這通常足以 如果隻小幅變更,一切運作正常 因此在進行微幅調整前,通常沒有辦法要求您 新的緩衝區集合首次運作特別是 包含更複雜的節點樹狀結構 fuchsia.sysmem2/BufferCollection.AttachToken fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollectionTokenGroup 節點,和相關 節點的子樹狀結構,詳細記錄可能有助於診斷 以及邏輯配置失敗的原因 子樹狀結構的執行速度比預期更快。

額外記錄的用意是可接受從效能來看 假設該詳細記錄功能已啟用 盡量減少緩衝區集合上的錯誤如果未追蹤錯誤 我們不會傳送這則訊息

要求

<空白>

SetWeak

設定目前的 fuchsia.sysmem2/Node 以及所有子項 Node 建立錯誤後所建立,表示客戶的 Node 用戶端端 (或在這則訊息之後建立的子項) 並非單獨的 足以讓分配的 VMO 保持運作

從低強度 Node 取得的所有 VMO 均為低 sysmem VMO。其他參考資訊 close_weak_asap

只有在 Node 準備就緒時,您才會收到這則訊息 分配 (否則伺服器會使用 ZX_ERR_BAD_STATE 關閉管道):

  • BufferCollectionToken:隨時
  • BufferCollectionSetConstraints之前
  • BufferCollectionTokenGroupAllChildrenPresent之前

目前在最佳化後,沒有從高強度Node轉換到低強度Node 但用戶端可以模擬 額外的 Node,之後即可分配更多資源 Node 可能會降低 Release,並關閉客戶強Node的用戶端端,但是 維持用戶端的低強度 Node

如果 Node 為零,且無高強度的 VMO 控制代碼,則會產生緩衝區 收集失敗 (全部 Node 個用戶端將會看到 ZX_CHANNEL_PEER_CLOSED和全部 close_weak_asapclient_end將 請參閱 ZX_EVENTPAIR_PEER_CLOSED),但 Sysem (刻意) 完全不會發現 直到所有 Node 都準備好配置為止。初始 分配成功,至少須存在一項高強度Node 但之後用戶端收到 VMO 控制代碼之後 用戶端可以BufferCollection.Release並關閉用戶端 導致這類失敗行為

這也意味著 fuchsia.sysmem2/Node.SetWeakOk,但不會 暗示 SetWeakOkfor_children_also 為 true,可以傳送 視需要單獨使用

要求

<空白>

SetWeakOk

這樣 sysmem 就會知道客戶已準備好注意 close_weak_asap

如要傳送,這則訊息必須早於 fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated

所有使用弱 fuchsia.sysmem2/BufferCollection 的參與者都必須 請在 WaitForAllBuffersAllocated前或家長的情況下傳送這則訊息 Node 必須傳送 fuchsia.sysmem2/Node.SetWeakOkfor_child_nodes_also true,否則 WaitForAllBuffersAllocated 會 觸發緩衝區收集失敗。

此訊息是必要的,因為低度的 sysmem VMO 通常 因此年長客戶沒注意到需要注意 close_weak_asap ZX_EVENTPAIR_PEER_CLOSED,並關閉所有項目 sysmem 弱 VMO 處理 Aap。看到這個訊息並要求 的參與者表示他們認同 通訊協定,可避免舊用戶端傳送較弱的 VMO 完全無法透過 sysmem 快速關閉 VMO 以及以每個緩衝區為基準。

無法處理「close_weak_asap」且也未處理這類參與者的參與者 無需透過 WaitForAllBuffersAllocated 擷取任何 VMO 控制代碼 才能傳送 SetWeakOk (不需要有家長 Node 傳送) SetWeakOkfor_child_nodes_also true)。不過, 同一參與者擁有擷取 VMO 的子項/委派項目 子項/委派項目需要先傳送 SetWeakOk WaitForAllBuffersAllocated

  • 要求 for_child_nodes_also 如果存在且為 true,表示 在這個訊息之後建立的這個節點的子節點和所有子節點 這些節點的子系所行為,就像傳送 SetWeakOk 一樣 這些節點在此節點之前建立的任何子節點 訊息就不包含在內。這是「固定式」設定合理來說 未設定此佈林值設為 true 的後續 SetWeakOk 不會重設 伺服器端布林值如果此情況對參與者造成問題, 解決方法為 SetWeakOk,在子項上執行 for_child_nodes_also 為 true 符記參與者只能設定 如果參與者確實承諾以下情況,則為 for_child_nodes_also: 遵守 close_weak_asap 各自的弱 VMO 控制代碼, 低強度 VMO 帳號代碼由持有相應子項的參與者所持有 Node。設定 for_child_nodes_also 時,子系 Node 使用 sysmem(1) 的結構可能較弱 sysmem1 Node 並未直接與 SetWeakOk 或任何 直接得知close_weak_asap的相關資訊。僅適用於 這個 Node 的子系,使用的是 sysmem(1),而不是 直接從 sysmem2 權杖轉換為 sysmem(1) 時為 Node 除非有這個 Node 的祖系,否則配置作業會失敗 指定 for_child_nodes_also 為 true。

要求

名稱類型
payload NodeSetWeakOkRequest

同步

確認已在伺服器端收到先前的郵件。這是 特別是在先前的訊息中建立新符記後 因為在傳送 權杖提供給其他參與者

對符合下列條件的權杖呼叫 fuchsia.sysmem2/BufferCollectionToken.Sync 不是有效的符記將導致 Sync 永久停滯。詳情請見 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 降低惡意/虛假的可能性 fuchsia.sysmem2/BufferCollectionToken, 另一種方法是將權杖 fuchsia.sysmem2/Allocator/BindSharedCollection,也會驗證 用來交換 fuchsia.sysmem2/BufferCollection 管道,和 隨後即可使用 fuchsia.sysmem2/BufferCollection.Sync,完全不必擔心風險 造成衝擊

建立一或多個 fuchsia.sysmem2/BufferCollectionToken 然後開始並完成 Sync,這樣您就能安全地將 「BufferCollectionToken」用戶端會得知其他參與者 當權杖由另一端 並產生 Syem 程式 fuchsia.sysmem2/Allocator.BindSharedCollection 訊息。這是 以高效率的方式建立代幣,同時避開不必要的來回行程。

其他選項包括等待 fuchsia.sysmem2/BufferCollectionToken.Duplicate (單獨呼叫 Sync),或呼叫 fuchsia.sysmem2/BufferCollection.Sync 透過以下方式轉換為 BufferCollectionfuchsia.sysmem2/Allocator.BindSharedCollection,或使用 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync,其中包含 同步處理步驟,且可一次建立多個權杖。

要求

<空白>

回應

名稱類型
payload Node_Sync_Result

節點

定義於 fuchsia.sysmem2/collection.fidl

這個通訊協定是樹狀結構中所有節點的父項通訊協定 方法是建立 fuchsia.sysmem2/BufferCollectionToken 建立 fuchsia.sysmem2/BufferCollectionTokenGroup,包括 已轉換的 fuchsia.sysmem2/BufferCollectionToken 連結至 fuchsia.sysmem2/BufferCollection 管道

這個通訊協定中不使用 Epitaph 語言,

新增日期:19

GetBufferCollectionId

取得緩衝區集合 ID。這個 ID 也有: fuchsia.sysmem2/Allocator.GetVmoInfo (以及 buffer_index 集合內)。

這種呼叫在無法傳達訊息時,主要就能派上用場 fuchsia.sysmem2/BufferCollectionTokenfuchsia.sysmem2/BufferCollection,但只能傳輸 VMO 控制代碼,可與 BufferCollection 用戶端彙整在一起 只有透過不同路徑建立的 Pod如果想傳達 盡可能直接BufferCollectionTokenBufferCollection

信任來自 sysmem 以外來源的 buffer_collection_id 值 類似於從 Zircon 以外的來源信任 koid 值。 除非確實有必要,否則應避免同時使用兩者, 。在某些情況下,可以參考 由 buffer_collection_id 透過BufferCollection 目的在於達到效率,但傳入值聲稱 buffer_collection_id 不足以證明授予 buffer_collection_id 任何能力的傳送者。寄件者必須 向接收器證明傳送者已/曾使用 VMO 或已/ 傳送帳號代碼,BufferCollectionToken 至同一個集合 sysmem 確認是有效的 sysmem 控點,且哪一個 sysmem 對應至 buffer_collection_id 的值。接收方應謹慎避免 假設寄件者擁有 BufferCollectionToken 寄件者只是證明傳送方收到了 VMO。

  • 回應 buffer_collection_id 每個緩衝區的 ID 不得重複 每開機一次就收集資料每個緩衝區都可以使用 buffer_collection_idbuffer_index

要求

<空白>

回應

名稱類型
payload Node_GetBufferCollectionId_Result

GetNodeRef

此步驟會獲得一個控制代碼,可當做參數,用於 fuchsia.sysmem2/Node.IsAlternateFor,呼叫任意值 fuchsia.sysmem2/Node。這個帳號代碼僅供確認 用戶端已從此 Node 取得這個帳號代碼。

由於這是一個 get 組合,因此沒有 fuchsia.sysmem2/Node.Sync 需要在 GetNodeRef 和對 IsAlternateFor 的呼叫之間取得適當資訊。 但兩筆呼叫通常來自不同的管道

另請參閱 fuchsia.sysmem2/Node.IsAlternateFor

目前所有的資料表欄位皆為必填。

  • 回應 node_ref 這個帳號代碼可透過以下位置上的 IsAlternateFor 傳送: 不同的 Node 管道,證明客戶取得了帳號代碼 (Node)。

要求

<空白>

回應

名稱類型
payload Node_GetNodeRef_Result

IsAlternateFor

檢查呼叫 fuchsia.sysmem2/Node 是否位於子樹狀結構中 根於其他通用父項的子項權杖 fuchsia.sysmem2/BufferCollectionTokenGroup, 傳入 node_ref

這場通話旨在協助解決許可控制資料重複的問題, 以及偵錯。

node_ref 必須使用 fuchsia.sysmem2/Node.GetNodeRef

node_ref 可以重複。不需要呼叫 對每次呼叫 fuchsia.sysmem2/Node.IsAlternateFor 的呼叫而言,都是 GetNodeRef

如果呼叫符記時,呼叫符記實際上可能根本不會是有效憑證, 權杖的可能惡意/不受信任的提供者,呼叫 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 而不是如果 IsAlternateFor 呼叫權杖會因為呼叫權杖不是真正的權杖而無回應 (實際上 和 sysmem 交談)。另一種方式是 fuchsia.sysmem2/Allocator.BindSharedCollection,先使用這個權杖 它也會驗證該憑證並轉換為 fuchsia.sysmem2/BufferCollection,然後呼叫 IsAlternateFor

目前所有的資料表欄位皆為必填。

  • 回應 is_alternate
    • true:呼叫節點與 node_ref NodeBufferCollectionTokenGroup。也就是說 呼叫 Nodenode_ref Node 不會同時 則不受 sysmem 選擇 不是兩者這是因為只有一個子的子系 邏輯運算子選取 BufferCollectionTokenGroup 而且只會有一個子項子樹狀結構 限制匯總
    • false:呼叫 Node 之間的第一個父項節點 且 node_ref Node 不是 BufferCollectionTokenGroup。 目前,共同中的第一個父項節點是 BufferCollectionTokenBufferCollection (不論是否 Release 後)。也就是說,呼叫 Nodenode_ref 在限制期間,Node 可能同時套用了這兩種限制條件 如果兩個 Node 都來自於邏輯分配的匯總值 由相關父項 BufferCollectionTokenGroup 選取。於 在此情況下,沒有任何 BufferCollectionTokenGroup 可直接避免同時選取兩個Node 因此就算 false、其中一項、 Node可能因此遭到排除, Node 有直接或間接父項 BufferCollectionTokenGroup,用於選取其他子項子樹狀結構 才是包含呼叫 Nodenode_ref Node 的子樹狀結構。
  • 錯誤 [fuchsia.sysmem2/Error.NOT_FOUND] node_ref 並未 與呼叫 Node 的緩衝區集合相關聯。 這個錯誤的另一個原因是 node_refzx.Handle.EVENT 擁有足夠的權限,但實際上並非 從 GetNodeRef 取得的實際 node_ref
  • 錯誤 [fuchsia.sysmem2/Error.PROTOCOL_DEVIATION] 呼叫端傳遞 不是 zx.Handle:EVENT 控制代碼的 node_ref,或沒有 實際node_ref所預期的必要權利。
  • 這次呼叫不會傳回其他失敗的狀態碼。不過 sysmem 之後可能會加入其他程式碼,因此用戶端應該 合理的預設處理方式。

要求

名稱類型
payload NodeIsAlternateForRequest

回應

名稱類型
payload Node_IsAlternateFor_Result

發布

fuchsia.sysmem2/BufferCollectionToken 管道上:

一般而言,參與者會將 BufferCollectionToken 轉換為 fuchsia.sysmem2/BufferCollection,但參與者可以改為傳送 透過權杖使用 Release (然後立即關閉管道,或 不久後就會回應伺服器關閉伺服器端, 可避免造成緩衝區收集失敗。如果沒有先前的 Release 關閉 BufferCollectionToken 用戶端端將會導致緩衝區 無法收集。

fuchsia.sysmem2/BufferCollection 管道上:

根據預設,伺服器會處理 fuchsia.sysmem2/BufferCollection 用戶端結束 (不含 Release )。部分原因是 當任何參與者失敗時,關閉 VMO 控點即可收回記憶體。如果 參與者想要完全關閉 BufferCollection, 導致緩衝區收集失敗,參與者可以傳送 Release 再關閉 BufferCollection 用戶端。Release可以 發生在 SetConstraints之前或之後。如果是 SetConstraints 之前, 即使 分配方式。如果在 SetConstraints 之後,系統會保留限制條件,並 卻與 BufferCollection 限制匯總的時間。

fuchsia.sysmem2/BufferCollectionTokenGroup 管道上:

根據預設,BufferCollectionTokenGroup 用戶端意外關閉 結束 (省略 Release) 將觸發緩衝區失敗 集合。如要在不關閉使用者的情況下關閉 BufferCollectionTokenGroup 管道,請按照下列步驟操作: 緩衝區收集失敗,請確認 AllChildrenPresent() 已發送 ,並在關閉BufferCollectionTokenGroup前傳送 Release 用戶端。

如果Release的發生時間早於 請 [fuchsia.sysmem2/BufferCollectionTokenGroup.AllChildrenPresent], the buffer collection will fail (triggered by reception of Releasewithout priorAllChildrenPresent). This is intentionally not analogous to how <a class='link' href='../fuchsia.sysmem2/'>fuchsia.sysmem2</a>/<a class='link' href='../fuchsia.sysmem2/#BufferCollection.Release'>BufferCollection.Release</a> without <a class='link' href='../fuchsia.sysmem2/'>fuchsia.sysmem2</a>/<a class='link' href='../fuchsia.sysmem2/#BufferCollection.SetConstraints'>BufferCollection.SetConstraints</a> first doesn't cause buffer collection failure. For a BufferCollectionTokenGroup, clean close requires AllChildrenPresent(if not already sent), then Release`] 來關閉用戶端。

如果 Release 發生在 AllChildrenPresent 之後,代表子項和全部 限制保持不變 (就像 BufferCollectionTokenGroup 個管道仍未結案),而客戶 結尾關閉不會觸發緩衝區收集失敗。

在所有 fuchsia.sysmem2/Node 管道 (以上任一個) 上:

為求簡潔,上方各管道的通訊協定段落會忽略 可分別建立 fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollection.AttachToken。用戶端結束時 意外關閉 (先未先使用 Release),而該用戶端端 宣告失敗的網域底下,而不是讓整個緩衝區收集失敗 失敗網域失敗,但緩衝區集合本身 則不受失敗網域故障影響。這類故障網域可能是 巢狀結構中,只有最內層的故障網域, Node 存在失敗。

要求

<空白>

SetDebugClientInfo

設定目前用戶端相關資訊,供 sysmem 存取 協助診斷記憶體流失的情形和配置作業等待時間 參與者傳送 fuchsia.sysmem2/BufferCollection.SetConstraints

這會在 fuchsia.sysmem2/Node 和全部設定上設定偵錯用戶端資訊 Node源自這個 Node,除非覆寫 fuchsia.sysmem2/Allocator.SetDebugClientInfo 以上版本 fuchsia.sysmem2/Node.SetDebugClientInfo

每傳送一次 fuchsia.sysmem2/Allocator.SetDebugClientInfo Allocator 是最有效率的做法 fuchsia.sysmem2/Node 會至少包含一些偵錯用戶端資訊 也比單獨傳送相同的偵錯檔案 透過 fuchsia.sysmem2/Node.SetDebugClientInfo 取得用戶端資訊 已建立 fuchsia.sysmem2/Node

啟用詳細記錄功能時也會使用 (請參閱 SetVerboseLogging): 指出哪位客戶先關閉頻道,再導向子樹狀結構 失敗 (如果子樹狀結構的用途已結束,則可能是正常情況,但 如果不是預期情況,則可使用用戶端專屬管道名稱 協助診斷故障來源 顯示比例)。

目前所有的資料表欄位皆為必填。

  • 要求 name 這可以是任意字串,但目前的 程序名稱 (請參閱 fsl::GetCurrentProcessName) 就是很好的預設值。
  • 要求 id 這可以是任意 ID,但目前程序 ID (請參閱 fsl::GetCurrentProcessKoid) 是很好的預設值。

要求

名稱類型
payload NodeSetDebugClientInfoRequest

SetDebugTimeoutLogDeadline

如果沒有發現 sysmem,Sysmem 會記錄警示 所有用戶端的 fuchsia.sysmem2/BufferCollection.SetConstraints

用戶端可以呼叫這個方法,以在記錄列印時變更。如果 多個用戶端設定了期限,因此系統已指定 就會生效。

在大部分的情況下,預設值可正常運作。

目前所有的資料表欄位皆為必填。

  • 要求 deadline sysmem 開始嘗試記錄的時間 警告,除非所有限制在此日期前出現 sysmem。

要求

名稱類型
payload NodeSetDebugTimeoutLogDeadlineRequest

SetName

為這個緩衝區集合中的 VMO 設定名稱。

如果名稱不適合在 ZX_MAX_NAME_LEN 中,請提供 Vmo 的名稱 系統會將圖片截斷以符合尺寸vmo 的名稱會加上 集合內的緩衝區索引 (如果後置字串符合 ZX_MAX_NAME_LEN).您在這裡指定的名稱 (不含截斷名稱) 將會 「檢查」項目

這個名稱只會影響在設定名稱後分配的 VMO;這場通話 無法重新命名現有的 VMO。如果多個客戶設定不同名稱 那麼優先順序較高的值勝出使用 優先順序與前一個名稱相同,名稱不會改變。

目前所有的資料表欄位皆為必填。

  • 要求 priority 只有在此名稱是第一個 SetName 時才會設定名稱 或 priority 大於priority 在此緩衝區集合的所有 Node 進行之前的 SetName 呼叫。
  • 要求 name 在此緩衝區集合下建立的 VMO 名稱。

要求

名稱類型
payload NodeSetNameRequest

SetVerboseLogging

這會啟用緩衝區集合的詳細記錄功能。

詳細記錄功能包括透過 每個用戶端的 fuchsia.sysmem2/BufferCollection.SetConstraints 與透過 fuchsia.sysmem2/Node.SetDebugClientInfo 設定的資訊 (或 fuchsia.sysmem2/Allocator.SetDebugClientInfo),以及 Node的樹狀結構。

在匯總作業期間,Symem 只會顯示單一行申訴 失敗,只有匯總失敗的確切原因 但背景脈絡並不容易雖然這通常足以 如果隻小幅變更,一切運作正常 因此在進行微幅調整前,通常沒有辦法要求您 新的緩衝區集合首次運作特別是 包含更複雜的節點樹狀結構 fuchsia.sysmem2/BufferCollection.AttachToken fuchsia.sysmem2/BufferCollectionToken.SetDispensablefuchsia.sysmem2/BufferCollectionTokenGroup 節點,和相關 節點的子樹狀結構,詳細記錄可能有助於診斷 以及邏輯配置失敗的原因 子樹狀結構的執行速度比預期更快。

額外記錄的用意是可接受從效能來看 假設該詳細記錄功能已啟用 盡量減少緩衝區集合上的錯誤如果未追蹤錯誤 我們不會傳送這則訊息

要求

<空白>

SetWeak

設定目前的 fuchsia.sysmem2/Node 以及所有子項 Node 建立錯誤後所建立,表示客戶的 Node 用戶端端 (或在這則訊息之後建立的子項) 並非單獨的 足以讓分配的 VMO 保持運作

從低強度 Node 取得的所有 VMO 均為低 sysmem VMO。其他參考資訊 close_weak_asap

只有在 Node 準備就緒時,您才會收到這則訊息 分配 (否則伺服器會使用 ZX_ERR_BAD_STATE 關閉管道):

  • BufferCollectionToken:隨時
  • BufferCollectionSetConstraints之前
  • BufferCollectionTokenGroupAllChildrenPresent之前

目前在最佳化後,沒有從高強度Node轉換到低強度Node 但用戶端可以模擬 額外的 Node,之後即可分配更多資源 Node 可能會降低 Release,並關閉客戶強Node的用戶端端,但是 維持用戶端的低強度 Node

如果 Node 為零,且無高強度的 VMO 控制代碼,則會產生緩衝區 收集失敗 (全部 Node 個用戶端將會看到 ZX_CHANNEL_PEER_CLOSED和全部 close_weak_asapclient_end將 請參閱 ZX_EVENTPAIR_PEER_CLOSED),但 Sysem (刻意) 完全不會發現 直到所有 Node 都準備好配置為止。初始 分配成功,至少須存在一項高強度Node 但之後用戶端收到 VMO 控制代碼之後 用戶端可以BufferCollection.Release並關閉用戶端 導致這類失敗行為

這也意味著 fuchsia.sysmem2/Node.SetWeakOk,但不會 暗示 SetWeakOkfor_children_also 為 true,可以傳送 視需要單獨使用

要求

<空白>

SetWeakOk

這樣 sysmem 就會知道客戶已準備好注意 close_weak_asap

如要傳送,這則訊息必須早於 fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated

所有使用弱 fuchsia.sysmem2/BufferCollection 的參與者都必須 請在 WaitForAllBuffersAllocated前或家長的情況下傳送這則訊息 Node 必須傳送 fuchsia.sysmem2/Node.SetWeakOkfor_child_nodes_also true,否則 WaitForAllBuffersAllocated 會 觸發緩衝區收集失敗。

此訊息是必要的,因為低度的 sysmem VMO 通常 因此年長客戶沒注意到需要注意 close_weak_asap ZX_EVENTPAIR_PEER_CLOSED,並關閉所有項目 sysmem 弱 VMO 處理 Aap。看到這個訊息並要求 的參與者表示他們認同 通訊協定,可避免舊用戶端傳送較弱的 VMO 完全無法透過 sysmem 快速關閉 VMO 以及以每個緩衝區為基準。

無法處理「close_weak_asap」且也未處理這類參與者的參與者 無需透過 WaitForAllBuffersAllocated 擷取任何 VMO 控制代碼 才能傳送 SetWeakOk (不需要有家長 Node 傳送) SetWeakOkfor_child_nodes_also true)。不過, 同一參與者擁有擷取 VMO 的子項/委派項目 子項/委派項目需要先傳送 SetWeakOk WaitForAllBuffersAllocated

  • 要求 for_child_nodes_also 如果存在且為 true,表示 在這個訊息之後建立的這個節點的子節點和所有子節點 這些節點的子系所行為,就像傳送 SetWeakOk 一樣 這些節點在此節點之前建立的任何子節點 訊息就不包含在內。這是「固定式」設定合理來說 未設定此佈林值設為 true 的後續 SetWeakOk 不會重設 伺服器端布林值如果此情況對參與者造成問題, 解決方法為 SetWeakOk,在子項上執行 for_child_nodes_also 為 true 符記參與者只能設定 如果參與者確實承諾以下情況,則為 for_child_nodes_also: 遵守 close_weak_asap 各自的弱 VMO 控制代碼, 低強度 VMO 帳號代碼由持有相應子項的參與者所持有 Node。設定 for_child_nodes_also 時,子系 Node 使用 sysmem(1) 的結構可能較弱 sysmem1 Node 並未直接與 SetWeakOk 或任何 直接得知close_weak_asap的相關資訊。僅適用於 這個 Node 的子系,使用的是 sysmem(1),而不是 直接從 sysmem2 權杖轉換為 sysmem(1) 時為 Node 除非有這個 Node 的祖系,否則配置作業會失敗 指定 for_child_nodes_also 為 true。

要求

名稱類型
payload NodeSetWeakOkRequest

同步

確認已在伺服器端收到先前的郵件。這是 特別是在先前的訊息中建立新符記後 因為在傳送 權杖提供給其他參與者

對符合下列條件的權杖呼叫 fuchsia.sysmem2/BufferCollectionToken.Sync 不是有效的符記將導致 Sync 永久停滯。詳情請見 fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken 降低惡意/虛假的可能性 fuchsia.sysmem2/BufferCollectionToken, 另一種方法是將權杖 fuchsia.sysmem2/Allocator/BindSharedCollection,也會驗證 用來交換 fuchsia.sysmem2/BufferCollection 管道,和 隨後即可使用 fuchsia.sysmem2/BufferCollection.Sync,完全不必擔心風險 造成衝擊

建立一或多個 fuchsia.sysmem2/BufferCollectionToken 然後開始並完成 Sync,這樣您就能安全地將 「BufferCollectionToken」用戶端會得知其他參與者 當權杖由另一端 並產生 Syem 程式 fuchsia.sysmem2/Allocator.BindSharedCollection 訊息。這是 以高效率的方式建立代幣,同時避開不必要的來回行程。

其他選項包括等待 fuchsia.sysmem2/BufferCollectionToken.Duplicate (單獨呼叫 Sync),或呼叫 fuchsia.sysmem2/BufferCollection.Sync 透過以下方式轉換為 BufferCollectionfuchsia.sysmem2/Allocator.BindSharedCollection,或使用 fuchsia.sysmem2/BufferCollectionToken.DuplicateSync,其中包含 同步處理步驟,且可一次建立多個權杖。

要求

<空白>

回應

名稱類型
payload Node_Sync_Result

結構

BufferCollection_CheckAllBuffersAllocated_Response

定義於 fuchsia.sysmem2/collection.fidl

<空白>

Node_Sync_Response

定義於 fuchsia.sysmem2/collection.fidl

<空白>

PixelFormatAndModifier

定義於 fuchsia.sysmem2/constraints.fidl

欄位類型說明預設
pixel_format fuchsia.images2/PixelFormat

當參與者在傳送給 sysmem 的訊息中指定,這可以是任何 參與者可接受的 PixelFormat 值。指定 不允許 kInvalid

參與者可以指定 fuchsia.images2/PixelFormat.DO_NOT_CARE。 表示參與者需要指定 ImageFormatConstraints 限制 pixel_format

無預設
pixel_format_modifier fuchsia.images2/PixelFormatModifier

特定修飾符 (而不僅是旗標) 或 FORMAT_MODIFIER_DO_NOT_CARE, 擷取自 fuchsia.images2 format_modifier.fidl 中定義的一組值。

無預設

ENUMS

CoherencyDomain 彈性

類型:uint32

定義於 fuchsia.sysmem2/constraints.fidl

INACCESSIBLE 僅適用於沒有 CPU 存取權 緩衝區。

無法從 CPU 存取的裝置本機記憶體為 CoherencyDomain INACCESSIBLE,即使可能會造成裝置 (例如實體或 虛擬) 將資料從 INACCESSIBLE 緩衝區複製到緩衝區 所有容器都不會顯示該物件換句話說,INACCESSIBLE 並不表示安全, 但安全意味著 存取權異常

CPU 代表生產者必須確保取用者能夠讀取產生的資料 而無需執行額外的快取作業 即可。

RAM 代表生產者必須確保產生的資料完全存在 中,沒有髒汙的 CPU 快取行,且取用端必須撤銷 使用 CPU 讀取資料前 (或先清除及撤銷) CPU 快取 例如 CPU相較於 CPU 網域,RAM 網域的速度可能比 CPU 網域快。 存取權是透過 HW DMA 進行,因為這樣就不需要進行 CPU 快取運算 因為沒有任何參與者實際使用 CPU 讀取/寫入

新增日期:19

名稱說明
0
1
2

錯誤彈性

類型:uint32

fuchsia.sysmem2/error.fidl 中定義的

無論錯誤代碼為何,在 如果有的話,

Error 值不應儲存在 zx_status_t 中,因為正值 zx_status_t 中的名稱已遭到淘汰

新增日期:19

名稱說明
0

這不是這個錯誤列舉的有效錯誤值。伺服器 傳遞此值做為失敗代碼。系統不會將這個值視為 「成功」。在某些語言中,出現在本機預設初始化的錯誤 執行個體會有這個值,除非透過有效的值來初始化 為正數的錯誤代碼

1

發生不明錯誤。

如果沒有其他適用的錯誤代碼,且發生錯誤,就會使用這個錯誤代碼 而不一定是由透過 傳送這個錯誤的管道

用戶端應將這項錯誤視為一般錯誤來處理。

例如,如果其他用戶端管道中有 用戶端無預警地關閉用戶端 (無 fuchsia.sysmem2/Node.Release),因此會導致 位於同一樹狀結構或子樹狀結構中的節點在此範例中 是否與接收客戶的「錯誤」無關?- 沒有理由 更具體,因為接收用戶端可能找不到 至少不會直接處理錯誤。

再舉一個例子,如果系統呼叫正常的系統呼叫, 失敗的預期失敗情形,也沒有找出原因 「blame」用戶端。

用戶端一律不應要求 / 依賴特定錯誤原因 仍會導致 UNSPECIFIED 遭到破壞,因為任何特定錯誤原因都可能導致 之後可能會產生更明確的錯誤代碼

2

未設定必填欄位或指定的值無效。詳情請參閱 請記錄檔取得更多資訊。

這個位址也會用於接收用戶端伺服器傳送的訊息。 順序錯誤,或與通訊協定規則不符

3

找不到用戶端指定的物件或 ID。

4

物件控制代碼權限不足,無法執行要求。

5

缺少可用記憶體,因此無法滿足分配作業。

記憶體耗盡的情況可能取決於所選堆積 所以有時可能會發生這個錯誤 儘管正常系統 RAM 幾乎沒有耗盡 設定與所選堆積

6

要求有效,但無法滿足要求,原因可能是硬體問題 如果參與者參與這個分配分配作業 使用不相容的限制條件 (空白的交集)。 詳情請參閱記錄。如果有參與者可以 可能被視為選用,詳情請參閱 BufferCollectionTokenGroup

如果在現有的緩衝區空間不足,也可能會發生此情況 以滿足額外符記 (包括衍生工具的子樹狀結構) 使用 fuchsia.sysmem2/BufferCollection.AttachToken 建立。

如果用戶端的節點隸屬於某個群組,而另一個屬於另一個群組,就可能發生這種情況 改為選取群組子項。

7

尚未嘗試分配。撥號中 fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated 封鎖。

8

BufferCollectionTokenGroup 個子項符記選取組合過多 並受到考慮,導致 sysmem 放棄配置 而不要列舉其餘的

資料表

AllocatorAllocateNonSharedCollectionRequest 資源

定義於 fuchsia.sysmem2/allocator.fidl

Ordinal欄位類型說明
collection_request server_end<BufferCollection>

AllocatorAllocateSharedCollectionRequest 資源

定義於 fuchsia.sysmem2/allocator.fidl

Ordinal欄位類型說明
token_request server_end<BufferCollectionToken>

AllocatorBindSharedCollectionRequest 資源

定義於 fuchsia.sysmem2/allocator.fidl

Ordinal欄位類型說明
token BufferCollectionToken
buffer_collection_request server_end<BufferCollection>

AllocatorGetVmoInfoRequest 資源

定義於 fuchsia.sysmem2/allocator.fidl

Ordinal欄位類型說明
vmo handle<vmo>

必須設定 vmo;將擁有權轉移至伺服器 因此在大部分的情況下,用戶端會複製帳號代碼,並將 透過這個欄位複製物件

AllocatorSetDebugClientInfoRequest

定義於 fuchsia.sysmem2/allocator.fidl

Ordinal欄位類型說明
name string[256]
id uint64

AllocatorValidateBufferCollectionTokenRequest

定義於 fuchsia.sysmem2/allocator.fidl

Ordinal欄位類型說明
token_server_koid zx/Koid

Allocator_GetVmoInfo_Response 資源

定義於 fuchsia.sysmem2/allocator.fidl

Ordinal欄位類型說明
buffer_collection_id uint64
buffer_index uint64
close_weak_asap handle<eventpair>

Allocator_ValidateBufferCollectionToken_Response

定義於 fuchsia.sysmem2/allocator.fidl

Ordinal欄位類型說明
is_known bool

BufferCollectionAttachLifetimeTrackingRequest 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
server_end handle<eventpair>
buffers_remaining uint32

BufferCollectionAttachTokenRequest 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
rights_attenuation_mask zx/Rights
token_request server_end<BufferCollectionToken>

BufferCollectionConstraints

定義於 fuchsia.sysmem2/constraints.fidl

分配的緩衝區限制,以及圖片上的限制 (選用) 儲存在緩衝區中您可以為每位參與者指定這些限制條件。 Symem 服務會從多個 位參與者。

新增日期:19

Ordinal欄位類型說明
usage BufferUsage

usage 會提供提示,提示 sysmem 有可能協助您選擇更多 最佳 fuchsia.images2/PixelFormat 和/或pixel_format_modifier 有多個相容選項時

匯總 fuchsia.sysmem2/BufferCollectionConstraints 時,這些 位元-OR 值

至少須指定一個 usage 位元 (但也可用於 設為 fuchsia.sysmem2/BufferCollection.SetConstraints 要求 未設定要求 constraints 欄位,這時 kNoneUsage 且沒有參與者限制)。

如果指定 kNoneUsage,則必須是唯一的位元,且不得為 VMO 將做為回應的 fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated

min_buffer_count_for_camping uint32

參與者可同時並行的緩衝區數量 保留專供獨家使用,時間不僅限於一段時間 (開放訓練營)。 在此情況下,「短暫」是指完成所需時間 執行小規模的非阻斷程式碼 而非緩衝區的擁有權像是從儲存空間讀取資料、等待 避免用於未知的硬體或進行其他操作 即使每秒影格編碼或解碼作業 有時可能很快會完成

舉例來說,影片解碼器會指定 (至少) 的參考影格 + 目前已解碼 1 個影格。但不是 1 通常能執行非同步作業 且能快速提供先前 即使該影格可能成為 暫時性時間長度與下一個影格解碼。

參與者不得坐在超過此處指定的緩衝區數量 (除非 短暫的空檔) 否則處理程序可能會停滯

匯總 BufferCollectionConstraints 時,請新增這些值。

在測試情境中,用比 停留時間很長 (在這個例子中,一個畫面重新整理週期「大幅」 時 (最好) 就會標記為失敗。測試中 系統可能會為參與者提供足夠緩衝區 以並行的方式進行

min_buffer_count_for_dedicated_slack uint32

讓每位參與者所需的緩衝區數量下限 以便處理重疊處理作業 / 成效更佳。

匯總 BufferCollectionConstraints 時,系統會在新增這些值時加入。

參與者通常會在此處指定 0 或 1,通常為 0 如果 min_buffer_count_for_camping 已足夠 與會者相比,參與者有 100% 的時間處於忙碌狀態 之後,如果緩衝區超過 1 個,則適合 1 個 讓露營變得充足,且 100% 的時間都維持在忙碌狀態 (略落後,在沒有額外緩衝的情況下,百分比較低)。

在測試情境中,欄位可能強制設為 0,而所有 都希望參與者可以繼續工作如果 正向進度需要一個緩衝區,該緩衝區應該 在 min_buffer_count_for_camping 中佔有一席之地。

min_buffer_count_for_shared_slack uint32

與「min_buffer_count_for_dedicated_slack」類似,但以下情況除外 加總這些值 (而非加上)這裡的值不是 與任何參與者的min_buffer_count_for_dedicated_slack共用。

參與者可以指定 >如果參與者想確保 會有一些配件 但不必特別留意

選擇要使用 min_buffer_count_for_dedicated_slack 還是 min_buffer_count_for_shared_slack (或兩者皆有) 通常是大約 額外配量提升幅度

在測試情境中,欄位可能強制設為 0,而所有 都希望參與者可以繼續工作如果 正向進度需要一個緩衝區,該緩衝區應該 在 min_buffer_count_for_camping 中佔有一席之地。

min_buffer_count uint32

特別挑逗的參與者可能會想開會 buffer_count 的嚴格範圍,甚至是特定 buffer_count。這個 欄位應保留為 0,除非參與者確實將這個欄位設為 限制整體 BufferCollectionInfo.buffer_count。任何如此 參與者仍應填寫 min_buffer_count_for_* 欄位, 或適當。

如未設定這個欄位,邏輯 min_buffer_count 則為 0。

max_buffer_count uint32

特別挑逗的參與者可能會想開會 buffer_count 的嚴格範圍,甚至是特定 buffer_count。這個 欄位應保留為 0,除非參與者確實將這個欄位設為 限制整體 BufferCollectionInfo.buffer_count。任何如此 參與者仍應填寫 min_buffer_count_for_* 欄位。

如未設定這個欄位,邏輯 max_buffer_count 會是 0xFFFFFFFF。

buffer_memory_constraints BufferMemoryConstraints

BufferCollectionSettings.buffer_settings 的選用限制。

打算設定 image_format_constraints 的參與者將 通常透過 image_format_constraints,且可能僅指定緩衝區上限 透過 buffer_memory_constraints 設定大小

如未設定,用戶端會指定「Don't Care」Re.任何緩衝區記憶體 限制。

image_format_constraints vector<ImageFormatConstraints>[64]

儲存的圖片格式參數的選用限制 集合緩衝區中這包括 fuchsia.images2/PixelFormatpixel_format_modifier (用於圖塊) 等等)。這些限制條件可以分別指定 pixel_formatpixel_format_modifier」配對。重複的pixel_format 不允許使用「pixel_format_modifier」配對。

匯總時,只有 pixel_formatpixel_format_modifier 配對符合 是由所有非零的參與者指定 image_format_constraints大小 (和非空值) BufferCollectionConstraints) 保留的資源都會保留下來。

參與者可以指定pixel_format fuchsia.images2/PixelFormat.DO_NOT_CARE 和/或 pixel_format_modifier fuchsia.images2/FORMAT_MODIFIER_DO_NOT_CARE 允許選取任何值,但至少必須有一個參與者 請指定特定的格式,確保整體分配成效良好。

在 SetConstraints 訊息中,未設定或長度為 0,表示沒有圖片格式 限制;如果沒有其他參與者,則可分配原始緩衝區 指定任何 image_format_constraints 項目。

BufferCollectionInfo 資源

fuchsia.sysmem2/results.fidl 中定義的

緩衝區集合及其緩衝區的相關資訊。

新增日期:19

Ordinal欄位類型說明
settings SingleBufferSettings

這些設定會套用至初始緩衝區中的所有緩衝區 分配速度。

這個欄位一律由 sysmem 設定。

buffers vector<VmoBuffer>[128]

VMO 會針對 集合。

這個向量的大小為 buffer_count (未傳送 buffer_count)。 )。

所有緩衝區 VMO 控制代碼的大小和存取權都相同。檔案大小 位於 settings.buffer_settings.size_bytes。

VMO 存取權限取決於 是與尋找緩衝區集合時指定的用戶端。舉例來說 表示唯讀用量的用戶端會收到沒有寫入的 VMO 權利。另外, 參數可強化權限, BufferCollectionToken.Duplicate() 呼叫。

這個欄位一律包含 VmoBuffer,即使參與者亦然 會指定用途,不需要 VMO 控制代碼。這允許 參與者,才能知道 vmo_usable_start 值 (如果是 參加者使用。

這個欄位將一律由 sysmem 設定 指定任何緩衝區使用 (但 fuchsia.sysmem2/VmoBuffer.vmo 這類情況下不會設定這個欄位中的子欄位)。

buffer_collection_id uint64

每次啟動的所有邏輯緩衝區集合中,這個數字都是獨一無二的。

所有 BufferCollectionToken 的 ID 號碼都相同, BufferCollection(s) 和 BufferCollectionTokenGroup(s) 相同的邏輯緩衝區集合 (衍生自相同的根符記 使用 fuchsia.sysmem2.Allocator.CreateSharedCollection 建立,或 CreateNonSharedCollection)。

相同的 ID 可從 BufferCollectionToken 擷取 BufferCollection 或 BufferCollectionTokenGroup GetBufferCollectionId (從 sysmem 到 sysmem 來回往返的費用)。

這個欄位一律由 sysmem 設定。

BufferCollectionSetConstraintsRequest 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
constraints BufferCollectionConstraints

BufferCollectionTokenCreateBufferCollectionTokenGroupRequest 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
group_request server_end<BufferCollectionTokenGroup>

BufferCollectionTokenDuplicateRequest 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
rights_attenuation_mask zx/Rights
token_request server_end<BufferCollectionToken>

BufferCollectionTokenDuplicateSyncRequest

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
rights_attenuation_masks vector<zx/Rights>[64]

BufferCollectionTokenGroupCreateChildRequest 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
token_request server_end<BufferCollectionToken>

必須設定。

rights_attenuation_mask zx/Rights

如果未設定,則預設值為 ZX_RIGHT_SAME_RIGHTS

BufferCollectionTokenGroupCreateChildrenSyncRequest

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
rights_attenuation_masks vector<zx/Rights>[64]

BufferCollectionTokenGroup_CreateChildrenSync_Response 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
tokens vector<BufferCollectionToken>[64]

BufferCollectionToken_DuplicateSync_Response 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
tokens vector<BufferCollectionToken>[64]

BufferCollection_WaitForAllBuffersAlChanged_Response resource

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
buffer_collection_info BufferCollectionInfo

BufferMemoryConstraints

定義於 fuchsia.sysmem2/constraints.fidl

新增日期:19

Ordinal欄位類型說明
min_size_bytes uint64

未設定就會視為 1

max_size_bytes uint64

未設定的值,就會視為 0xFFFFFFFFFFFFFFFF 。

physically_contiguous_required bool

如果設為 False,緩衝區 VMO 的實體頁面可能不連續。時間 true,緩衝區 VMO 的實體頁面必須連續。A 罩杯 即使用戶端不要求實際連續 VMO,仍必須接受 實體連續的 VMO 或「物理」VMO。

secure_required bool

如果為 true,參與者需要安全記憶體。

匯總 BufferCollectionConstraints 時,這些值是 boolean-OR。

cpu_domain_supported bool

如果為 true (或 BufferMemoryConstraints 不存在時),則 當 sysmem 選擇 CPU 網域時,參與者即可。

如果選取 CPU 網域,參與者必須確保 CPU 可以讀取 或是將資料寫入緩衝區,而不進行快取作業 參與者。

換句話說,若製作人選擇將 DMA 資料直接傳送到裝置上的 RAM 手臂等非快取一致性架構 CPU 快取是乾淨的進入 DMA 寫入前的緩衝區,以及 請在 DMA 寫入之後、 緩衝區。一般使用者 在非快取一致性架構 (例如: 選項,取用端必須在 DMA 前清除 CPU 快取緩衝區 讀取。

如果參與者僅支援 CPU 而不做任何 DMA ,則只需撰寫及讀取 緩衝區 (當它們正常顯示時),就不需要執行任何 CPU 快取運算。

ram_domain_supported bool

如果設為 True,則參與者可在 sysmem 中選取 RAM 網域時使用。

如果選取 RAM 網域,則必須在 RAM 中提供生產端資料 (CPU 快取狀態可使 RAM 資料不會因 CPU 快取行將不正確的資料寫入 RAM),以及取用端 使用 CPU 進行讀取前,必須先撤銷 CPU 快取,然後再讀取 ( 製片商不能保證沒有過時的「乾淨」快取行)。

換句話說,如果生產端參與者使用 CPU 將資料寫入 手臂等非快取連貫架構是指生產者 傳送資料到 RAM 後,再向其他參與者指出緩衝區 準備就緒。如果取用端使用 CPU 讀取 手臂等非快取一致性架構 作廢 (通常在知識沒有快取的情況下清除+失效 ) 讀取緩衝區前的 CPU 快取資料。

如果僅使用 RAM 的參與者未對緩衝區執行任何 CPU 存取權,可以執行以下動作 只要在緩衝區中/從緩衝區進行 DMA 即可 (在應該的時候) 不需要 執行任何 CPU 快取作業

inaccessible_domain_supported bool

如果設為 true,參與者可在 sysmem 中選取 INACCESSIBLE 網域。

如果選取 INACCESSIBLE 網域,CPU 讀取和寫入資料 會遭到阻斷嘗試使用 CPU 讀取/寫入資料可能會導致 及/或程序終止。

如果選取 INACCESSIBLE 網域,參與者就只能操作 根據 HW 執行的指定行銷區域或平台專屬指定行銷區域 (類似平台) 收集資料 傳送至安全環境的要求 (執行所需的 CPU 快取作業) 類似於 RAM 網域參與者運作的方式)。

安全堆積僅支援 INACCESSIBLE 網域,且將無法分配 如果不是NONE_USAGEBufferUsage參與者 inavailable_domain_supported 設為 true。

選取 INACCESSIBLE 網域後,參與者 (位於 安全/DRM 環境) 不得試圖對應緩衝區, 不會嘗試執行任何 CPU 快取作業以致於 與 RAM 網域類似,且所有參與者都僅執行 DMA,但沒有執行 執行 CPU 存取的參與者。

permitted_heaps vector<Heap>[64]

參與者可接受哪些堆積。不支援 請注意,要配置哪個堆積記憶體,應保留這個欄位。A 罩杯 只有在所有參與者皆明確表示時,系統才會選取安全堆積 透過 heap_permitted 可接受安全堆積,或是指定 NONE_USAGE

BufferMemorySettings

fuchsia.sysmem2/results.fidl 中定義的

這些是緩衝區集合所有緩衝區的記憶體相關設定。

新增日期:19

Ordinal欄位類型說明
size_bytes uint64

這個欄位一律由 sysmem 設定。

is_physically_contiguous bool

這個欄位一律由 sysmem 設定。

is_secure bool

這個欄位一律由 sysmem 設定。

coherency_domain CoherencyDomain

這個欄位一律由 sysmem 設定。

heap Heap

分配緩衝區的特定堆積。

這個欄位一律由 sysmem 設定。

BufferUsage

fuchsia.sysmem2/usages.fidl 中定義的

說明用戶端如何存取緩衝區內容。

新增日期:19

Ordinal欄位類型說明
none uint32

如果用戶端設定了這個欄位,客戶便不得設定任何其他 同一個資料表執行個體中的多個欄位這個欄位中唯一有效的位元是 NONE_USAGE;如果已設定這個欄位,則必須設定。重點 這個欄位中的位元是用來證明 用戶端確實表示不需要使用緩衝區,因此不需要 任何 VMO (不是僅填寫表格)。

cpu uint32

如果設定此屬性,則會保留 CPU 使用率位元。請參閱 usages.fidl 中的 CPU_USAGE_* 標記。

vulkan uint32

如果已設定,會保留 Vulkan 用量位元。請參閱VULKAN_IMAGE_*和 在 uses.fidl 中使用 VULKAN_BUFFER_* 位元。VULKAN_USAGE_* 位元 「定義/名稱」已淘汰,

display uint32

如果已設定,則會保留顯示用量位元。觀看 DISPLAY_USAGE_* 位元 usages.fidl.

video uint32

如果設定此屬性,系統會保留影片使用位元。請參閱 usages.fidl 中的 VIDEO_USAGE_* 位元。

設定

fuchsia.sysmem2/config.fidl 中定義的

這種類型是 fidl::Persist()'ed in sysmem_config.persistent_fidl 檔案 並由 Symem 讀取 sysmem 網域設定 驅動程式。

一般而言,JSON[5] 比較適合設定,但我們會產生這項設定 信任,使用 FIDL 類型 (以避免重複並利用 FIDL) rust codegen),而 FIDL 類型沒有 JSON 結構定義。

目前沒有在執行階段變更這項設定的機制 或是從啟動到開機這項設定在每次執行組合工具時為靜態。

請參閱 src/lib/assembly/config_schema/src/platform_config/sysmem_config.rs 直接在資訊板資訊中指定 sysmem 設定的各個層面 或組合平台設定sysmem 設定的兩個部分未包含 (目前) 重疊。這裡的設定適用於 sysmem 設定的各個層面 可能過於冗長,無法直接納入董事會資訊或組裝平台 設定檔。另外,部分/大多數像素格式的費用項目 透過程式產生 (從這個註解開始)。

在透過組合工具進行匯總之前,會有多個 .persistent_fidl 每個檔案都會儲存各自的 Config 執行個體董事會資訊與組件 平台設定會列出輸入 Persistent_fidl 檔案,以及主機資訊 進行邏輯性作業所有檔案清單是 ,以便後續檔案覆寫/取代先前檔案中的資訊。

由於此類型僅適用於永久 fidl, 序列化執行個體的長度不繫結,我們就不會繫結至內部 向量元素數量

新增時間:下一頁

Ordinal欄位類型說明
format_costs vector<FormatCostEntry>

這份有排序的 FormatCost 項目將納入考量 在所有參與者支援的格式之間中斷連結時,Syemem 就會生效 緩衝區集合中

在設定匯總期間,如果後續項目有相符的 FormatCostKey, 因此已遭省略/移除。這樣一來,後續的檔案 覆寫先前檔案中的項目,並允許在 組合平台設定,以覆寫 。

這個向量通常不會有兩個項目與 設定中的 pixel_format、pixel_format_modifier 和 buffer_usage_bits 執行個體是由 sysmem 從 sysmem_config.persistent_fidl 載入。假設 兩個項目與這些欄位中的項目相符,sysmem 可以忽略全部,但只會忽略其中一項 數量

FormatCostEntry

fuchsia.sysmem2/config.fidl 中定義的

FormatCostEntry 可用於影響 PixelFormatAndModifier 是 針對緩衝區收集選取,並視需要將 BufferUsage 納入考量。

預設費用為 f32::MAX,因此任何指定的費用若含有非 MAX 值 會優先使用指定格式,而不是任何沒有任何廣告格式。 FormatCost 項目。

具有相同 pixel_format、pixel_format_modifier 和 required_usage_bits 的值會覆寫前一個項目。 針對比對用途,缺少 pixel_format_modifier 會比對 LINEAR,以及 缺少 required_buffer_usage_bits 的值會比對全部 0 的用量位元。

主面板資訊 sysmem_defaults 項目會按照邏輯順序,列在平台 sysmem 之前 項目。

Sysmem 使用 FormatCostEntry 產生的匯總清單, 各項作業都能支援的格式組合 緩衝區收集參與者的資料。對於每種互支援的格式 系統會忽略格式不相符的項目,以及其他包含額外項目的項目。 系統會忽略 buffer_usage_bits 組合的設定。在其餘項目中 與匯總參與者用量相近, 來決定費用 (如果兩者相同,較晚的項目勝出)。接著, 並會選擇費用最低的格式。如果出價依舊不相同 (維持費用不相上下), 不分隨機,並非隨機破損。

這並不是我們禁止您選用的格式 緩衝區收集的所有參與者都支援此功能。如果參與者 聲稱支援某種格式,但無法正確處理該格式, 必須修正才能正確處理該格式,或是變更設定來停止聲明著作權 該格式支援。

此機制能影響系統選擇的格式選項,提供更多 更有效率的格式,而且記憶體頻寬用量較低 特定用量位元集等,將可能產生的疑慮 專屬於指定主機板或整體平台設定的專屬 ID。

新增時間:下一頁

Ordinal欄位類型說明
key FormatCostKey

必須設定。如果兩個項目在邏輯上相等的鍵 (在欄位之後) 就會套用預設值),後的項目會覆寫先前的項目

cost float32

必須設定。成本較低,但也請查看 FormatCostKey 欄位。 請先依格式和用量位元篩選項目。

每個項目都提供兩個項目 (且每個專案的所有參與者支援的格式各不相同) 緩衝區收集) 的費用不同、成本較低 格式)。

如為非測試情境,只能使用費用值 >0.0 (通常至少為 1.0),並且為 0.0 和負值保留 進行測試。

FormatCostKey

fuchsia.sysmem2/config.fidl 中定義的

具有相同 pixel_format、pixel_format_modifier 和 required_usage_bits 的值會覆寫前一個項目。 針對比對用途,缺少 pixel_format_modifier 會比對 LINEAR,以及 缺少 required_buffer_usage_bits 的值會比對全部 0 的用量位元。

新增時間:下一頁

Ordinal欄位類型說明
pixel_format fuchsia.images2/PixelFormat

像素_format 和 pixel_format_modifier 是指定像素的 適用 FormatCost 資料。

必須設定。

pixel_format_modifier fuchsia.images2/PixelFormatModifier

像素_format 和 pixel_format_modifier 是指定像素的 適用 FormatCost 資料。

未設定會等同於 LINEAR。

buffer_usage_bits BufferUsage

設定後,只有當緩衝區集合在 至少設定的用量位元

緩衝區集合具有匯總的 BufferUsage,此為聯集 每位參與者的 BufferUsage 位元包含額外項目的 FormatCost 項目 指定的位元數都會遭到忽略。剩下的幾個格式 最常使用的位元組合會決定該格式的費用 緩衝區收集。

接著,系統會為緩衝區集合選擇費用最低的格式 所有參與者都能取代的格式 緩衝區收集。

這個欄位的主要用意是允許「關閉」這種格式 對於特定使用組合而言,效果卻不佳。 這樣一來,在有問題的組合時,費用可能就會偏高 的用量位元上限。如果格式是 緩衝區參與者的唯一支援格式 集合。

未設定會等同於設定的 0 位元位元數,表示適用項目 除非套用了其他更特定用途的項目

在某些情況下,對於所有項目會略過這個欄位,這是合理的情況, 當只根據格式費用選擇格式 (忽略使用) 時, 而負責任的 AI 技術做法 有助於達成這項目標

FormatCosts

fuchsia.sysmem2/config.fidl 中定義的

這是永久 fidl 的根,採用格式費用檔案。格式 費用檔案會由組合工具讀取,然後合併為單一 sysmem 網域設定中的 sysmem_config.persistent_fidl 檔案 (請參閱「設定」部分) )。

一般而言,JSON[5] 比較適合設定,但我們會產生這項設定 信任,使用 FIDL 類型 (以避免重複並利用 FIDL) rust codegen),而 FIDL 類型沒有 JSON 結構定義。

雖然產生的 sysmem_config.persistent_fidl 產生單一檔案 包含 sysmem 設定的多個面向,而對比格式費用檔案 僅含格式費用。我們並不介意在處理程序中 但最好將 sysmem 的網域設定調降為單一檔案 應用程式。

新增時間:下一頁

Ordinal欄位類型說明
format_costs vector<FormatCostEntry>

這個部分最後會 ['fuchsia.sysmem2.Config.format_costs'] (請參閱上方),除非 稍後處理的項目 (可以是此向量或稍後處理的檔案中) 產生差異)。

堆積

定義於 fuchsia.sysmem2/constraints.fidl

堆積執行個體的參照。

特定堆積執行個體可以有多個 Heap,可用於 請參考堆積執行個體在不瞭解的情況下比較 Heap 資料表 上述 Heap 別名無法確定是否有兩個 Heap 資料表 參照相同的堆積 (「相符」表示「是」,但不相符代表可能)。 允許堆積別名可讓您更輕鬆地重新命名 Heap.type

新增日期:19

Ordinal欄位類型說明
heap_type string[128]

堆積的類型,使用根據 「註解結構定義」和「方法」 fuchsia.sysmem.heap.bind 檔案。

例如:

  • &quot;fuchsia.sysmem.heap.HEAP_TYPE.SYSTEM_RAM&quot;
  • &quot;fuchsia.goldfish.platform.sysmem.heap.HEAP_TYPE.HOST_VISIBLE&quot;
id uint64

堆積的 uint64 ID。只有每種類型、 。換句話說,只有在物件生命週期中 機器目前的開機 (並非跨開機),且只會在 Heap.type

如果 Heap.type 參照單例堆積,參與者 指定 fuchsia.sysmem2.BufferMemoryConstraints.permitted_heaps 可以離開 這個欄位取消設定,或設為零。Sysmem 一律會填寫這個 產生「堆積」欄位 fuchsia.sysmem2.BufferMemmorySettings.heap (針對單例堆積 「id」欄位將由 sysmem 設為 0)。

ImageFormatConstraints

定義於 fuchsia.sysmem2/constraints.fidl

說明緩衝區中圖片資料的版面配置限制。

Ordinal欄位類型說明
pixel_format fuchsia.images2/PixelFormat

應遵守下列限制的 fuchsia.images2/PixelFormat

pixel_formatpixel_format_modifier 欄位同時是 伺服器會視為額外的 pixel_format_and_modifiers 項目。

一位參與者可能會有多個 fuchsia.sysmem2/PixelFormatAndModifier

  • 如果不同 PixelFormatAndModifier,參與者可以列出其他 要套用限制條件的 PixelFormatAndModifierpixel_format_and_modifiers」欄位中的值。這樣一來,您就能減少 需要傳送的 ImageFormatConstraints (不必變更 也就是傳送大量 ImageFormatConstraints,只有 pixel_formatpixel_format_modifier,且整體指定的 PixelFormatAndModifier)。
  • 如果不同 PixelFormatAndModifier 的圖片限制不同 參與者可以透過 「image_format_constraints」中每個項目有 ImageFormatConstraints 個項目 含有不同圖片的 PixelFormatAndModifier 組 限制。
  • 參與者可以擁有兩個 image_format_constraints 項目只有 pixel_format_and_modifiers 中的不同,但這個 並不是最簡潔的方式 您只要指定兩個項目 單一 ImageFormatConstraints 中的 PixelFormatAndModifier

ImageFormatConstraints 的其他欄位通常用於 依據 pixel_formatpixel_format_modifier 計算,例如 線性格式,可支援小於圖塊格式的大小上限。

其他參考資訊 fuchsia.sysmem2/ImageFormatConstraints.pixel_format_and_modifiers.

Thie 欄位必須設為 fuchsia.images2/PixelFormat.INVALID,除非 pixel_format_and_modifiers 為非空白。也就是說, 每個ImageFormatConstraints至少一項 PixelFormatAndModifier。如果 已設定 pixel_format_modifier,也必須設定這個欄位。

參與者可以指定 fuchsia.images2/PixelFormat.DO_NOT_CARE。 表示參與者需要指定 ImageFormatConstraints 限制 pixel_format

pixel_format_modifier fuchsia.images2/PixelFormatModifier

適用下列限制條件的像素格式修飾符。

pixel_formatpixel_format_modifier 欄位同時是 伺服器會視為額外的 pixel_format_and_modifiers 項目。

這個值來自 fuchsia.images2 format_modifier.fidl 參與者可接受 pixel_format

另請參閱 pixel_format_and_modifiers

如果已設定 pixel_format 但未設定 pixel_format_modifier, 預設取決於其他欄位:

  • 如果 pixel_formatDO_NOT_CARE,則像素格式修飾符為 隱含 FORMAT_MODIFIER_DO_NOT_CARE
  • 否則,如果 BufferCollectionConstraints.usage 不是 NONE,則像素為 格式修飾符為隱含 FORMAT_MODIFIER_LINEAR
  • 否則像素格式修飾符會默示 FORMAT_MODIFIER_DO_NOT_CARE

設定後,這個值是特定修飾符 (而不只是旗標)。 FORMAT_MODIFIER_DO_NOT_CARE,來自 fuchsia.images2 format_modifier.fidl。

color_spaces vector<fuchsia.images2/ColorSpace>[32]

空白有誤。重複項目會發生錯誤。任意順序為 並非錯誤。

用戶端可以指定單一項目 [fuchsia.sysmem2/ColorSpace.DO_NOT_CARE] if the client doesn't want to constrain which ColorSpaceis chosen. At least one participant must specify at least oneColorSpacevalue other than ColorSpace.DO_NOT_CARE`,否則配置作業會失敗。

min_size fuchsia.math/SizeU

允許的最小尺寸 (以像素為單位)。

舉例來說,影片解碼器參與者可將這個欄位設為 串流可能會指定的最小大小。於 對比,required_min_size 會設為目前指定的大小 特定訊息串。min_size 會匯總 required_min_size 會以分鐘為單位匯總。

傳送到 sysmem 時,如果參與者是 以便處理最小可行的非零圖像配置 受限於 pixel_format 隱含的限制 和 pixel_format_modifier。或者,您也可以將這個欄位設為 參與者可處理的最小尺寸。

製作人應設定 min_size,並將寬度和高度設為 製作者可能採用的實際非零最小寬度與高度 。例如,影片解碼器可以將 巨集區塊

從 sysmem 收到時,一律會設定此欄位,且 寬度和高度會是 0,因為至少要有一位參與者 請指定大小的下限,不得為零 (寬度與高度皆不得留空) 零)。

另請參閱 required_min_size

max_size fuchsia.math/SizeU

大小上限 (以像素為單位)。例如,「風景」可能會設定這個欄位 ( 或以子參與者加入) 合併為可合成的大小上限。

如果是傳送到 sysmem,則未設定為 0xFFFFFFFF,0xFFFFFFFF。

如果接收自 sysmem,則一律會設定這個欄位。對於寬度和 高度,如果沒有強制執行上限,該子欄位就會是 0xFFFFFFFF。

另請參閱 required_max_size

min_bytes_per_row uint32

每個資料列的最小位元組數,包括超出 連續的圖片資料

這有時也稱為「步距 (以位元組為單位)」或「換行」 位移」。如果是單一飛機格式,這是指每列的位元組數 比方針。如果是多飛機格式,這是指每列的位元組數 平面 0 的樣本數 (例如 Lulla 中每列的位元組數 範例)。多飛機適用 飛機 0 以外的平面中每列的位元組數是格式 特定但一律與平面之間有特定關係 列。

ImageFormatConstraints 傳送至 sysmem 時,將這個欄位設為 選用。除非參與者設定,否則建議不要設定這個欄位 需要強制 bytes_per_row 大於最小值 在 min_size.width 所推定的「每個寬度像素步長」的 pixel_format + pixel_format_modifier (另請參閱 ImageFormatStrideBytesPerWidthPixel) 和 bytes_per_row_divisor

當 sysmem 收到這個結構時,這個欄位將永遠 設定 (當父項結構有) 時,且至少必須為 min_size.width 隱含的值,即「每個寬度的刪除位元組」 Pixel」加上 pixel_formatpixel_format_modifier bytes_per_row_divisor

部分製作人可能傾向 ImageFormat.bytes_per_rowImageFormatConstraints.min_bytes_per_row,因為 sysmem 是保證 表示 min_bytes_per_row 與寬度圖片相容 min_size.width。不過,生產端參與者 size.width >min_size.width 可以取得相應的 來自 ImageFormatMinimumRowBytes (在 C++ 中) 的 min_bytes_per_row,或 即可直接計算 bytes_per_row

max_bytes_per_row uint32

每個資料列的位元組數上限,包括超出 連續的圖片資料

傳送至 sysmem 時,必須 >= 隱含的值,max_size.width、 「每個寬度像素的步長」,以及 bytes_per_row_divisor,或 限制匯總作業就會失敗未設定表示參與者不會 需要/想要設定嚴格的上限

系統會將傳送到 sysmem 但未設定的值視為 0xFFFFFFFF。

從 sysmem 收到時,系統會一律設定這個欄位。如果最大值為 這個值會是 0xFFFFFFFF (而非 0),才能無限大。

max_width_times_height uint64

像素數量上限。

最大的圖片區域 (以像素為單位) 為 fuchsia.sysmem/BufferMemoryConstraints.max_size_bytes 和 產生 fuchsia.sysmem/BufferSettings.size_bytes 會產生的 透過這個欄位直接強制執行

相較於 fuchsia.sysmem2/ImageFormatConstraints.max_size 欄位,對寬度和高度分開限制,這個欄位會限制 像素總數

對比 fuchsia.sysmem/BufferMemoryConstraints.max_size_bytes,這個欄位 並未限制每列後非像素邊框間距位元組數 且不限制非像素的位元組數。 並排顯示 pixel_format_modifier

圖片長寬比太窄或太短,成效可能不佳 平均每像素像素數 與一般顯示比例相比邊框間距和/或 在極端顯示比例方面,記憶體頻寬負擔通常會增加 參與者可能表示缺乏支援,而且時間太小或太短 採用 ['fuchsia.sysmem/ImageFormatConstraints.min_size`] 的尺寸。

系統會將傳送到 sysmem 但未設定的值視為 0xFFFFFFFF。

從 sysmem 接收,此欄位會一律設定,且可設為 0xFFFFFFFF。

size_alignment fuchsia.math/SizeU

圖片 size 的對齊規定。

  • size.width % size_alignment.width 必須為 0。
  • size.height % size_alignment.height 必須為 0。

如未設定,則系統會視為 1、1。

display_rect_alignment fuchsia.math/SizeU

display_rect 的對齊規定。

  • display_rect.x % display_rect_alignment.width 必須為 0。
  • display_rect.y % display_rect_alignment.height 必須為 0。
  • display_rect.width % display_rect_alignment.width 必須為 0。
  • display_rect.height % display_rect_alignment.height 必須為 0。

如未設定,則系統會視為 1、1。

required_min_size fuchsia.math/SizeU

這些欄位可用於確保匯總限制具有 min_sizemax_size 這樣 required_min_sizerequired_max_size (以及兩者之間符合對齊的任何內容) 條件) 是 ImageFormat.size 的許可值。

舉例來說,製作人影片解碼器不想限制 允許 ImageFormat.size,因為壓縮串流可能會改變尺寸 但製作人影片解碼器必須確保 至少可以使用目前的維度 串流中目前位置的未壓縮影格。

再舉一個例子,企圖解碼影片的發起人 瞭解串流的影格大小上限。 因此,設定 required_max_size 可確保分配的緩衝區 足以支援這個上限 size。除了成功 發起人也會知道 最多可獲得該上限 size

製作人或發起人在設定這些欄位時更為常見 而不是讓消費者設定這些欄位

雖然 min_sizemax_size 是透過有效擷取 交集,required_min_sizerequired_max_size 已匯總 以有效接合的方式

此欄位的匯總方式是擷取每個元件的最小值 required_max_size 匯總。

未設定時,系統會將 0xFFFFFFFF 和 0xFFFFFFFF 視為 0xFFFFFFFF。

required_max_size fuchsia.math/SizeU

另請參閱 required_min_size。未設定的值會視為 0, 0。

bytes_per_row_divisor uint32

fuchsia_images2.ImageFormat.bytes_per_row % bytes_per_row_divisor必須 值應為 0。未設定的值會視為 1。

在意圖時使用 require_bytes_per_row_at_pixel_boundary 確保 `bytes_per_row'是像素大小的倍數 (以位元組為單位)。

傾向使用 size_alignment.width 時,如果要確保 系統會以像素為單位對齊寬度相對地,這個欄位可以指定 「步長 (以位元組為單位)」(從圖片開頭到第 n 列開頭的位元組偏移 從圖片開頭到第 n-1 列開頭減去位元組偏移,得出結果 (以位元組為單位) 必須對齊指定的位元組數。適用對象 例如,當 PixelFormat.BGR24 (24 位元顏色,每像素 3 位元組) 是 參與者通常需要每列像素 從圖片起始距離 4 位元組對齊的位移, 只要在每列像素末端加上一些邊框間距位元組, 從下一列像素開始

雖然任何 bytes_per_row_divisor 的值都可以改為 將 size_alignment.width 設為 「每個寬度像素的刪除位元組」以及步距校正要求 強制執行步距對齊要求,以 填補所需的邊框間距 (意即緩衝區超過必要),且 也會導致size.width;以免 情境。相反地,以位元組為單位的步距對齊要求為 直接在這裡指定

start_offset_divisor uint32

vmo_usable_start % start_offset_divisor 必須為 0。未設定 1.

製作者不建議將圖片的起始畫面設為零 除非實際需要,否則偏移 (與緩衝區基之間) 的偏移值 應能正確處理非零影像開始位移。

pixel_format_and_modifiers vector<PixelFormatAndModifier>[64]

(額外) fuchsia.sysmem2/PixelFormatAndModifier 相關限制如下

做為非限制的例子,如果參與者只想設定單一 PixelFormatAndModifierfuchsia.sysmem2/ImageFormatConstraints,因此參與者可以 (a) 使用 pixel_formatpixel_format_modifier 欄位指定 第一個 PixelFormatAndModifier 的欄位,然後 pixel_format_and_modifiers 未設定,或 (b) 退出 pixel_format 和 取消設定 pixel_format_modifier 欄位並放入 PixelFormatAndModifier位在 pixel_format_and_modifiers

如果設定 pixel_format,伺服器會採用 pixel_format 以及 pixel_format_modifier 欄位 (在程序中取消設定),請封裝這些欄位 並移入 PixelFormatAndModifier 中 ,整體大小上限為 MAX_COUNT_PIXEL_FORMAT_AND_MODIFIERS + 1

伺服器將 pixel_format 移到一個項目後,pixel_format_modifier 這個向量的其他項目,這個向量不可空白。當 結果清單中有超過 1 個項目,但這個向量中的項目 等同於 (尺寸) 列出 (size) ImageFormatConstraints 個項目,每pixel_format_and_modifiers一個 項目,每個都有一個 PixelFormatAndModifier,其中有 有 ImageFormatConstraints 個項目的限制相同 (相較於 欄位 (不含 pixel_formatpixel_format_modifier) 或 pixel_format_and_modifiers 欄位)。

SetConstraints 訊息中,每個項目會指定 參與者可以接受 PixelFormatAndModifier (假設下列限制條件欄位也滿足)。

回應 WaitForAllBuffersAllocated 時,這個欄位將 如未設定,系統會指明所選的 PixelFormatAndModifier 使用 pixel_formatpixel_format_modifier 欄位

SetConstraints 訊息中的所有 PixelFormatAndModifiers,來自 所有參賽者在 image_format_constraints。如果fuchsia.images2.PixelFormat.DO_NOT_CARE 且不得包含任何其他項目 (考慮所有 image_format_constraints 下的項目) 符合 pixel_format_modifier。如果使用 FORMAT_MODIFIER_DO_NOT_CARE,則 不得為其他項目 (考量 image_format_constraints) 搭配相符的 pixel_format

PixelFormatAndModifier值具有 DO_NOT_CAREFORMAT_MODIFIER_DO_NOT_CARE (但不得同時用於此目的) 範例) 可與來自不同雲端服務供應商的 PixelFormatAndModifier 合併使用 其他欄位表示「我不在乎」, 可以成功分配的完整 PixelFormatAndModifier。 不過,目前至少一個參與者不得使用這項功能 指定兩個含有「do」PixelFormatAndModifier 不在乎」不同欄位中的值這並未禁止單一 同時包含 DO_NOT_CARE 和 PixelFormatAndModifier PIXEL_FORMAT_DO_NOT_CARE (只有一個項目) PixelFormatAndModifier 值)。如果用戶端確實需要 與 pixel_format 相關的限制條件, pixel_format_modifier FORMAT_MODIFIER_DO_NOT_CARE 和其他 使用 pixel_formatpixel_format_modifier 相關限制條件 DO_NOT_CARE,用戶端可以複製符記並 使用/連線至兩個不同的參與者。

另請參閱pixel_format,查看更多與多則留言相關的註解 單一 ImageFormatConstraints 中的 PixelFormatAndModifier

require_bytes_per_row_at_pixel_boundary bool

若已設定且為 true,則產生的位元組_per_row_divisor ImageFormatConstraints 保證值為 個位元組_per_row 代表像素的整數。這麼做 每列末端的邊框間距;如果不將這個欄位設為 是,但可確保步距能夠以整數表示 比方針。

舉例來說,如果所選 PixelFormatB8G8R8 (如果這個欄位) 設為 true,則產生的 bytes_per_row_divisor 會是 3.在本例中,如果其他參與者設定了 bytes_per_row_divisor 變更為 4,則產生的 bytes_per_row_divisor 會是 12 的倍數。

NodeIsAlternativeForRequest 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
node_ref handle<event>

NodeSetDebugClientInfoRequest

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
name string[256]
id uint64

NodeSetDebugTimeoutLogDeadlineRequest

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
deadline zx/Time

NodeSetNameRequest

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
priority uint32
name string[64]

NodeSetWeakOkRequest 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
for_child_nodes_also bool

Node_GetBufferCollectionId_Response

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
buffer_collection_id uint64

Node_GetNodeRef_Response 資源

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
node_ref handle<event>

Node_IsAlternateFor_Response

定義於 fuchsia.sysmem2/collection.fidl

Ordinal欄位類型說明
is_alternate bool

SingleBufferSettings

fuchsia.sysmem2/results.fidl 中定義的

這些設定和限制會套用至集合中的所有緩衝區。

新增日期:19

Ordinal欄位類型說明
buffer_settings BufferMemorySettings

這個欄位一律由 sysmem 設定。

image_format_constraints ImageFormatConstraints

若是保留未壓縮圖片資料的緩衝區,就不會有 這個欄位。保留未壓縮圖片資料的緩衝區 這個欄位

目前至少要重新配置 PixelFormat 緩衝區。

如未設定,就不會對圖片格式設下限制。

VmoBuffer 資源

fuchsia.sysmem2/results.fidl 中定義的

新增日期:19

Ordinal欄位類型說明
vmo handle<vmo>

如果參與者只有vmo fuchsia.sysmem2/BufferUsage.none 已設為 NONE_USAGE (明確或 由 fuchsia.sysmem2/BufferCollection.SetConstraints 隱含 沒有設定 constraints)。

vmo_usable_start uint64

在第一個可用位元組的 VMO 中偏移。必須小於選擇 VMO 的大小 並且保留足夠的空間來存放 BufferMemorySettings.size_bytes 是在 VMO 結束之前

目前 sysmem 將一律將此欄位設為 0,而日後的 sysmem 不會將這個欄位設為非零的值,除非所有參與者都有 明確表示支援非零 vmo_usable_start (這個 這類機制不存在。未提及的參與者 明確表示支援非零 vmo_usable_start (全部 用戶端) 應默示將這個欄位設為 0,而不將這個欄位設為 0 實際上檢查的是這個欄位

close_weak_asap handle<eventpair>

如果 vmo 是 sysmem 弱 VMO 控制代碼,則會設定這個欄位。用戶端必須 將close_weak_asap留在 vmo 處,且必須留意 ZX_EVENTPAIR_PEER_CLOSED。如果發生這個信號,用戶端必須關閉 降速 vmo。若未這麼做,則視為用戶端的 VMO 外洩情形 這個情況最終會透過 Syslog 表達 5 秒之後)。

聯合國

Allocator_GetVmoInfo_Result 嚴格 資源

定義於 fuchsia.sysmem2/allocator.fidl

OrdinalVariant類型說明
response Allocator_GetVmoInfo_Response
err Error
framework_err internal

Allocator_ValidBufferCollectionToken_Result 嚴格

定義於 fuchsia.sysmem2/allocator.fidl

OrdinalVariant類型說明
response Allocator_ValidateBufferCollectionToken_Response
framework_err internal

BufferCollectionTokenGroup_CreateChildrenSync_Result 嚴格 資源

定義於 fuchsia.sysmem2/collection.fidl

OrdinalVariant類型說明
response BufferCollectionTokenGroup_CreateChildrenSync_Response
framework_err internal

BufferCollectionToken_DuplicateSync_Result 嚴格 資源

定義於 fuchsia.sysmem2/collection.fidl

OrdinalVariant類型說明
response BufferCollectionToken_DuplicateSync_Response
framework_err internal

BufferCollection_CheckAllBuffersAllocations_Result 嚴格

定義於 fuchsia.sysmem2/collection.fidl

OrdinalVariant類型說明
response BufferCollection_CheckAllBuffersAllocated_Response
err Error
framework_err internal

BufferCollection_WaitForAllBuffersAlChanged_Result 嚴格 資源

定義於 fuchsia.sysmem2/collection.fidl

OrdinalVariant類型說明
response BufferCollection_WaitForAllBuffersAllocated_Response
err Error
framework_err internal

Node_GetBufferCollectionId_Result 嚴格

定義於 fuchsia.sysmem2/collection.fidl

OrdinalVariant類型說明
response Node_GetBufferCollectionId_Response
framework_err internal

Node_GetNodeRef_Result 嚴格 資源

定義於 fuchsia.sysmem2/collection.fidl

OrdinalVariant類型說明
response Node_GetNodeRef_Response
framework_err internal

Node_IsAlternativeFor_Result 嚴格

定義於 fuchsia.sysmem2/collection.fidl

OrdinalVariant類型說明
response Node_IsAlternateFor_Response
err Error
framework_err internal

Node_Sync_Result 嚴格

定義於 fuchsia.sysmem2/collection.fidl

OrdinalVariant類型說明
response Node_Sync_Response
framework_err internal

觀測站

名稱類型說明
CPU_USAGE_READ 1 uint32
新增日期:19
CPU_USAGE_READ_OFTEN 2 uint32
新增日期:19
CPU_USAGE_WRITE 4 uint32
新增日期:19
CPU_USAGE_WRITE_OFTEN 8 uint32
新增日期:19
DISPLAY_USAGE_CURSOR 2 uint32
新增日期:19
DISPLAY_USAGE_LAYER 1 uint32
新增日期:19
MAX_CLIENT_NAME_LENGTH 256 int32

name 要求欄位的長度上限 (以位元組為單位)。 fuchsia.sysmem2/Allocator.SetDebugClientInfofuchsia.sysmem2/Node.SetDebugClientInfo

新增日期:19
MAX_COUNT_BUFFER_COLLECTION_CONSTRAINTS_IMAGE_FORMAT_CONSTRAINTS 64 uint32

大小上限 fuchsia.sysmem2/BufferCollectionConstraints.image_format_constraints

新增日期:19
MAX_COUNT_BUFFER_COLLECTION_INFO_BUFFERS 128 uint32

最多可以包含 fuchsia.sysmem2/BufferCollectionInfo.buffers 欄位。

新增日期:19
MAX_COUNT_BUFFER_MEMORY_CONSTRAINTS_PERMITTED_HEAPS 64 uint32

大小上限 fuchsia.sysmem2/BufferMemoryConstraints.permitted_heaps

新增日期:19
MAX_COUNT_CREATE_CHILDREN 64 int32

每個 OR 群組可建立的符記子項數量上限 對 fuchsia.sysmem2/BufferCollectionTokenGroup.CreateChildrenSync 的呼叫。

一般情況下,我們不建議建立這種數量的子項 也不會因為測試原因而擴充 特殊情境需求緩解 sysmem 會限制實際考慮的團體子組合數量 ,以便嘗試取得無法透過 Symem 通訊協定。sysmem 權杖樹狀結構中的節點總數上限 受限於無法透過這些通訊協定設定的個別上限。

新增日期:19
MAX_COUNT_DUPLICATES 64 uint32
新增日期:19
MAX_COUNT_IMAGE_FORMAT_CONSTRAINTS_COLOR_SPACES 32 uint32

fuchsia.sysmem2/ImageFormatConstraints.color_spaces 的大小上限。

MAX_COUNT_PIXEL_FORMAT_AND_MODIFIERS 64 uint32

大小上限 fuchsia.sysmem2/ImageFormatConstraints.pixel_format_and_modifiers.

NONE_USAGE 1 uint32
新增日期:19
VIDEO_USAGE_CAPTURE 8 uint32
新增日期:19
VIDEO_USAGE_DECRYPTOR_OUTPUT 16 uint32
新增日期:19
VIDEO_USAGE_HW_DECODER 1 uint32
新增日期:19
VIDEO_USAGE_HW_DECODER_INTERNAL 32 uint32
新增日期:19
VIDEO_USAGE_HW_ENCODER 2 uint32
新增日期:19
VULKAN_BUFFER_USAGE_INDEX_BUFFER 4194304 uint32
新增日期:19
VULKAN_BUFFER_USAGE_INDIRECT_BUFFER 16777216 uint32
新增日期:19
VULKAN_BUFFER_USAGE_STORAGE_BUFFER 2097152 uint32
新增日期:19
VULKAN_BUFFER_USAGE_STORAGE_TEXEL_BUFFER 524288 uint32
新增日期:19
VULKAN_BUFFER_USAGE_TRANSFER_DST 131072 uint32
新增日期:19
VULKAN_BUFFER_USAGE_TRANSFER_SRC 65536 uint32
新增日期:19
VULKAN_BUFFER_USAGE_UNIFORM_BUFFER 1048576 uint32
新增日期:19
VULKAN_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER 262144 uint32
新增日期:19
VULKAN_BUFFER_USAGE_VERTEX_BUFFER 8388608 uint32
新增日期:19
VULKAN_IMAGE_USAGE_COLOR_ATTACHMENT 16 uint32
新增日期:19
VULKAN_IMAGE_USAGE_INPUT_ATTACHMENT 128 uint32
新增日期:19
VULKAN_IMAGE_USAGE_SAMPLED 4 uint32
新增日期:19
VULKAN_IMAGE_USAGE_STENCIL_ATTACHMENT 32 uint32
新增日期:19
VULKAN_IMAGE_USAGE_STORAGE 8 uint32
新增日期:19
VULKAN_IMAGE_USAGE_TRANSFER_DST 2 uint32
新增日期:19
VULKAN_IMAGE_USAGE_TRANSFER_SRC 1 uint32
新增日期:19
VULKAN_IMAGE_USAGE_TRANSIENT_ATTACHMENT 64 uint32
新增日期:19