Fuchsia 元件檢查總覽

福希西亞的元件可能會公開有關自身的結構化資訊 符合 Inspect API本文件將介紹 元件檢查、介面、C++ 語言實作 介面以及面向使用者的工具 公開風險中

不確定該從哪裡著手嗎?

概念

元件可以公開「節點」樹狀結構,每個節點都有一組 屬性

圖:節點的樹狀結構

節點

節點是元件中的匯出實體,其內容可能為 0 或 就會有更多孩子每個節點都有名稱 所有子項的名稱皆不得重複。

圖:節點

資源

節點的屬性數量不限。屬性包含字串鍵和值 可以是下列任一種類型:

數字類型

  • UintProperty:64 位元無正負號整數。
  • IntProperty - 64 位元帶正負號整數。
  • DoubleProperty:64 位元浮點值。
  • BoolProperty - 布林值。

字串類型

  • StringProperty - UTF-8 字串。
  • ByteVectorProperty - 位元組向量。

陣列類型

  • UintArrayIntArrayDoubleArray - 對應數字類型的陣列。

直方圖類型

  • LinearUintHistogramLinearIntHistogramLinearDoubleHistogram

儲存在陣列中的固定大小值區的直方圖。

  • ExponentialUintHistogramExponentialIntHistogramExponentialDoubleHistogram

這張直方圖含有儲存在陣列中的值區大小占比極高的。

檢查檔案格式

「Inspect File Format」是二進位格式 支援高效率的插入、修改和刪除節點,以及 執行階段的屬性。讀者會擷取一貫的內容快照 不必與寫作溝通

檔案系統介面

頂層節點會在元件的傳出目錄中以 VmoFiles 的形式公開 結尾是副檔名 .inspect。如果是要公開的元件 主要或根樹狀結構為 out/diagnostics/root.inspect

語言程式庫

C++

C++ 檢查程式庫提供完整的寫入讀取支援檢查檔案格式。

寫入檢查資料的元件不應讀取該資料。 讀取需要掃遍整個緩衝區,所費不貲。

Inspector 類別提供用於建立新緩衝區的包裝函式 可新增一個根節點節點和屬性已輸入 包裝函式,會從 緩衝區。

inspect_component 程式庫提供簡易的 ComponentInspector 單例模式介面,可協助您將單一 每個元件的階層結構

健康功能可公開結構化的健康資訊 並且支援健康狀態檢查工具已知的格式

測試比對工具程式庫提供 GMock 比對器,以便進行驗證 系統在測試中從檢查階層讀取的資料。

閱讀輔助

讀取程式庫支援剖析檢查檔案 轉換為「階層」Hierarchy 包含 NodeValuePropertyValues 分別是 Node 的剖析版本 Property

node() 和子項傳回 HierarchyNodeValue Hierarchychildren() 以向量傳回。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