注册跟踪提供程序

本页介绍如何在 Fuchsia 系统中注册新的跟踪提供程序。

如需参与跟踪,新的跟踪提供程序必须在Fuchsia 跟踪系统中向 跟踪管理器注册。 (不过,驱动程序不必注册为跟踪提供程序,因为 devhost 进程会通过 libdriver.so 执行此操作。)

如需注册跟踪提供程序,请按以下步骤操作:

  1. 向跟踪管理器注册组件
  2. 设置 capability 路由

向跟踪管理器注册组件

如需将组件注册为跟踪提供程序,您可以使用 libtrace-provider 库在组件的代码中提供异步循环。

请参阅以下示例:

C++

#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/trace-provider/provider.h>
// further includes

int main(int argc, const char** argv) {
  // process argv

  async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread);
  trace::TraceProviderWithFdio trace_provider(
      loop.dispatcher(), "my_trace_provider");

  // further setup

  loop.Run();
  return 0;
}

C

#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/trace-provider/provider.h>

int main(int argc, char** argv) {
  zx_status_t status;
  async_loop_t* loop;
  trace_provider_t* trace_provider;

  // Create a message loop.
  status = async_loop_create(&kAsyncLoopConfigNoAttachToCurrentThread, &loop);
  if (status != ZX_OK) exit(1);

  // Start a thread for the loop to run on.
  // Alternatively, use async_loop_run() to run on the current thread.
  status = async_loop_start_thread(loop, "loop", NULL);
  if (status != ZX_OK) exit(1);

  // Create the trace provider.
  async_dispatcher_t* dispatcher = async_loop_get_dispatcher(loop);
  trace_provider = trace_provider_create(dispatcher);
  if (!trace_provider) exit(1);

  // Do something...

  // Tear down.
  trace_provider_destroy(trace_provider);
  async_loop_shutdown(loop);
  return 0;
}

Rust

fn main() {
    fuchsia_trace_provider::trace_provider_create_with_fdio();
    // ...
}

设置 capability 路由

如需让组件请求适当的跟踪 capability,请在组件清单 (.cml) 中添加以下字段:

{
  include: [
    "trace/client.shard.cml",
  ],
  ...
}

这样,您的组件就可以使用 fuchsia.tracing.provider.Registry 协议与跟踪管理器通信,并将其提供的内容转发给其直接子项。如果您的组件是另一个组件的子项,您还需要在每个父项的 cml 中添加 client.shard.cml

如果您的组件使用基于 Chromium 的 fuchsia.web 服务,并且您希望能够从中收集跟踪数据,则需要向 Context 提供 fuchsia.tracing.provider.Registryfuchsia.tracing.perfetto.ProducerConnector capability。(如需了解如何将 capability 传递给 Context, 请参阅 fuchsia.web/CreateContextParams.service_directory。)

将组件注册为跟踪提供程序后,您就可以在代码中启用跟踪了。如需了解详情,请参阅下一页 在代码中添加跟踪