为驱动程序添加跟踪记录

本文档介绍了如何在 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
}

大多数宏的前两个参数是跟踪类别和 事件名称。在此示例中,它们是 exampleDoSomething

通过跟踪类别,您可以指定跟踪系统的数据类型 收集。如果未请求某个类别,则不会收集任何数据。类别 不需要在驱动程序中是唯一的一个通常将多个 同一类别下的多个活动。

跟踪记录中包含一个事件名称,用于描述事件。时间是 通常每个事件都是唯一的

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 跟踪指南