Fuchsia 中的组件可能会公开关于自身的结构化信息 符合 Inspect API 的要求。本文档介绍了 组件检查、接口、C++ 语言实现 以及与组件交互的面向用户的工具 来呈现信息
快捷链接
不知从何下手?
- 快速入门 - 组件检查入门指南。
ffx inspect
- 用于检查组件的ffx
命令。- Codelab - 一个使用 C++ 和 Rust 编写的完整的 Codelab。
健康检查 - 描述健康检查子系统。
概念
组件可能会公开 Nodes 树,其中每个节点都有一组 属性。
节点
节点是组件中导出的实体, 儿童。每个节点都有一个名称 节点的每个子节点都有一个名称 在子元素中必须具有唯一的名称。
属性
节点可以具有任意数量的属性。属性具有字符串键和值 可以是多种类型中的任意一种:
数字类型
UintProperty
- 64 位无符号整数。IntProperty
- 64 位有符号整数。DoubleProperty
- 64 位浮点值。BoolProperty
- 布尔值。
字符串类型
StringProperty
- UTF-8 字符串。ByteVectorProperty
- 字节矢量。
数组类型
UintArray
、IntArray
、DoubleArray
- 相应数字类型的数组。
直方图类型
LinearUintHistogram
、LinearIntHistogram
、LinearDoubleHistogram
包含存储在数组中的固定大小分区的直方图。
ExponentialUintHistogram
、ExponentialIntHistogram
、ExponentialDoubleHistogram
直方图,其中包含存储在数组中的指数大小的分区。
检查文件格式
检查文件格式是一种二进制格式 支持高效插入、修改和删除节点以及 运行时的属性。读者可对内容进行一致的快照 而无需与写手交流
文件系统接口
顶级节点作为组件的传出目录中的 VmoFile 公开
以扩展名 .inspect
结尾。通常,组件会公开
其主树或根树为 out/diagnostics/root.inspect
。
语言库
C++
C++ Inspect 库提供了完整的编写和 针对检查文件格式提供读取支持。
写入检查数据的组件应避免读取该数据。 读取需要遍历整个缓冲区,成本非常高。
Inspector
类提供了一个用于创建新缓冲区的封装容器
具有一个可添加到的根节点。节点和属性已指定
封装容器,用于从环境中自动删除底层数据
缓冲区空间。
inspect_component 库提供了一个简单的 ComponentInspector
单例接口,有助于解决公开一个单一实例
层次结构。
health 功能支持公开结构化健康信息 采用健康检查工具已知的格式
测试匹配器库提供 GMock 匹配器,用于验证 从测试中的 Inspect 层次结构中读取的数据。
阅读支持
读取库支持解析检查文件
划分到一个层次结构中。Hierarchy
包含 NodeValue
和 PropertyValues
,它们是 Node
和
Property
。
Hierarchy
的 NodeValue
由 node()
和子级返回。
children()
会在矢量中返回 Hierarchy
。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!
宏
与“检查数据”匹配,以便进行测试。
测试
验证器架构描述了 Inspect 的集成测试框架 语言库
用户空间工具
要检查组件的检查层次结构,您可以使用
ffx inspect show
命令:
输出所有检查层次结构:
ffx inspect show
输出特定组件的检查层次结构(例如,
core/font_provider
):ffx inspect show core/font_provider
或运行 ffx target snapshot
来生成包含系统诊断信息的 ZIP 压缩文件,
包含检查:
ffx target snapshot