福希西亞的元件可能會公開有關自身的結構化資訊 符合 Inspect API本文件將介紹 元件檢查、介面、C++ 語言實作 介面以及面向使用者的工具 公開風險中
快速連結
不確定該從哪裡著手嗎?
- 快速入門導覽課程 - 元件檢查入門指南。
ffx inspect
:用於檢查元件的ffx
指令。- Codelab:完整的 C++ 和 Rust 程式碼研究室。
健康狀態檢查 - 說明健康狀態檢查子系統。
概念
元件可以公開「節點」樹狀結構,每個節點都有一組 屬性:
節點
節點是元件中的匯出實體,其內容可能為 0 或 就會有更多孩子每個節點都有名稱 所有子項的名稱皆不得重複。
資源
節點的屬性數量不限。屬性包含字串鍵和值 可以是下列任一種類型:
數字類型
UintProperty
:64 位元無正負號整數。IntProperty
- 64 位元帶正負號整數。DoubleProperty
:64 位元浮點值。BoolProperty
- 布林值。
字串類型
StringProperty
- UTF-8 字串。ByteVectorProperty
- 位元組向量。
陣列類型
UintArray
、IntArray
、DoubleArray
- 對應數字類型的陣列。
直方圖類型
LinearUintHistogram
、LinearIntHistogram
、LinearDoubleHistogram
儲存在陣列中的固定大小值區的直方圖。
ExponentialUintHistogram
、ExponentialIntHistogram
、ExponentialDoubleHistogram
這張直方圖含有儲存在陣列中的值區大小占比極高的。
檢查檔案格式
「Inspect File Format」是二進位格式 支援高效率的插入、修改和刪除節點,以及 執行階段的屬性。讀者會擷取一貫的內容快照 不必與寫作溝通
檔案系統介面
頂層節點會在元件的傳出目錄中以 VmoFiles 的形式公開
結尾是副檔名 .inspect
。如果是要公開的元件
主要或根樹狀結構為 out/diagnostics/root.inspect
。
語言程式庫
C++
寫入檢查資料的元件不應讀取該資料。 讀取需要掃遍整個緩衝區,所費不貲。
Inspector
類別提供用於建立新緩衝區的包裝函式
可新增一個根節點節點和屬性已輸入
包裝函式,會從
緩衝區。
inspect_component 程式庫提供簡易的 ComponentInspector
單例模式介面,可協助您將單一
每個元件的階層結構
健康功能可公開結構化的健康資訊 並且支援健康狀態檢查工具已知的格式
測試比對工具程式庫提供 GMock 比對器,以便進行驗證 系統在測試中從檢查階層讀取的資料。
閱讀輔助
讀取程式庫支援剖析檢查檔案
轉換為「階層」。Hierarchy
包含 NodeValue
和 PropertyValues
分別是 Node
的剖析版本
Property
。
node()
和子項傳回 Hierarchy
的 NodeValue
Hierarchy
由 children()
以向量傳回。GetByPath
函式支援按照路徑讀取特定子階層。
特定 NodeValue
的屬性可透過
properties()
存取子。您可以判斷屬性是否含有
方法是將對應的 PropertyValue
類型做為
範本參數套用至 Contains<T>()
方法:
// Returns true if the first property of the hierarchy's node is an INT value.
if (hierarchy.node().properties()[0].Contains<IntPropertyValue>()) {
// ...
}
使用 Get<T>()
方法取得屬性:
// Get the IntPropertyValue of the first property on the node.
// Note: This causes a runtime exception if the property does not contain
// the given type, crashing the program.
hierarchy.node().properties()[0].Get<IntPropertyValue>();
您也可以根據不同的格式類型切換:
const auto& property = hierarchy.node().properties()[0];
switch (property.format()) {
case FormatType::INT:
const auto& value = property.Get<IntPropertyValue>();
/* ... */
break;
/* ... */
}
陣列型別可能會經過特殊格式,以便包含直方圖。
GetBuckets()
方法支援傳回直方圖值區陣列
來自 {Int,Uint,Double}ArrayValue
類型。如果
基礎陣列不是特殊格式的直方圖。
Rust
Rust 檢查程式庫提供完整的編寫功能, 讀取支援檢查檔案格式。
寫入檢查資料的元件不應讀取該資料。 讀取需要掃遍整個緩衝區,所費不貲。
Inspector
類別提供用於建立新緩衝區的包裝函式
可新增一個根節點節點和屬性已輸入
包裝函式,會從
緩衝區。
component 模組支援簡單的 inspector
函式,
處理從元件公開單一階層的常見用法。
health 模組支援公開結構化的健康資訊 並且支援健康狀態檢查工具已知的格式
testing 模組支援 assert_data_tree!
巨集,
「檢查資料」以進行測試
測試
驗證工具架構說明瞭檢查用的整合測試架構 語言庫。
使用者空間工具
如要檢查元件的檢查階層,您可以使用
ffx inspect show
指令:
列印所有檢查階層:
ffx inspect show
列印特定元件 (例如
core/font_provider
):ffx inspect show core/font_provider
或是執行 ffx target snapshot
會產生包含系統診斷資訊的 ZIP 封存檔
包含檢查:
ffx target snapshot