为驱动程序添加跟踪记录

本文档介绍了如何在 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_cc_driver("my_driver") {
  deps = [
    ...
    "//zircon/system/ulib/trace",
  ]
}

使用跟踪

使用 ffx trace 记录跟踪记录,并使用 Perfetto 查看器查看结果。

以下示例命令使用了上文源代码更新部分中描述的 example 类别:

$ ffx trace start --categories "example,kernel:sched,kernel:meta"

如果您想直观呈现结果,则需要提供 kernel:sched,kernel:meta 类别。可视化工具需要将轨迹数据与线程和进程相关联,并且需要内核通过这些类别提供的数据。

如需了解更多详情以及有关如何在没有 ffx 的情况下直接在 Fuchsia 设备上进行跟踪的说明,请参阅记录轨迹以进行性能分析

深入阅读

如需了解详情,请参阅 Fuchsia 跟踪指南