本文档介绍了如何在 Fuchsia 系统中添加对驱动程序的跟踪功能。
概览
如需简要了解跟踪,请参阅 Fuchsia 跟踪系统。 但是,驱动程序不需要指定跟踪提供程序。通过 驱动程序主机为其驱动程序提供一个。
有关跟踪的教程,请参阅在代码中添加跟踪。 如需查看跟踪 API 参考文档,请参阅跟踪:C 和 C++ 宏。
添加跟踪记录
如需添加对驱动程序的跟踪,您需要更新驱动程序的源代码
和 BUILD.gn
文件。
源代码更新
如需在驱动程序组件中添加跟踪记录,请更新要调用的源代码
lib/trace/event.h
中的 TRACE_*()
宏,例如:
#include <lib/trace/event.h>
void DoSomething(int a, std::string b) {
TRACE_DURATION("example", "DoSomething", "a", a, "b", b);
// Do something
}
大多数宏的前两个参数是跟踪类别和
事件名称。在此示例中,它们是 example
和 DoSomething
。
通过跟踪类别,您可以指定跟踪系统的数据类型 收集。如果未请求某个类别,则不会收集任何数据。类别 不需要在驱动程序中是唯一的一个通常将多个 同一类别下的多个活动。
跟踪记录中包含一个事件名称,用于描述事件。时间是 通常每个事件都是唯一的
BUILD.gn 更新
要获取跟踪支持,请将以下目标添加到驱动程序的
BUILD.gn
:
fuchsia_driver("my_driver") {
deps = [
...
"//zircon/system/ulib/trace",
]
}
使用跟踪记录启动
Fuchsia 使用内核命令行标志在驱动程序中启用跟踪 启动期间:
driver.tracing.enable=1
这是 Fuchsia 设备的默认设置。
要禁止驱动程序参与 Fuchsia 跟踪,请使用以下命令启动内核: 以下命令行标志:
driver.tracing.enable=0
有关启动特定 Fuchsia 设备的说明,请参阅 硬件或 QEMU在启动期间,跟踪不需要执行任何特殊操作。
使用跟踪记录
使用 ffx trace
记录轨迹并使用
Perfetto 查看器。
下面的示例命令使用了 example
类别,如
上面的源代码更新部分:
$ ffx trace start --categories "example,kernel:sched,kernel:meta"
否则,必须提供kernel:sched,kernel:meta
类别
想要直观呈现结果可视化工具想要将跟踪记录数据相关联
它需要内核提供的数据,
通过这些类别获得收入。
有关其他详情,以及有关直接在
不带 ffx
的 Fuchsia 设备,请参阅
记录轨迹以执行性能分析。
深入阅读
如需了解详情,请参阅 Fuchsia 跟踪指南。