本页介绍了如何在 Fuchsia 系统中注册新的轨迹提供程序。
如需参与跟踪,必须在 Fuchsia 跟踪系统中向跟踪管理器注册新的跟踪提供程序。(不过,驱动程序无需注册为轨迹提供程序,因为 devhost 进程会通过 libdriver.so
执行此操作。)
如需注册轨迹提供程序,请按以下步骤操作:
向轨迹管理器注册组件
如需将组件注册为轨迹提供程序,您可以使用 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 路由
如需让组件请求适当的跟踪功能,请在组件清单 (.cml
) 中添加以下字段:
{
include: [
"trace/client.shard.cml",
],
...
}
这样,您的组件就可以使用 fuchsia.tracing.provider.Registry
协议与轨迹管理器通信,并将优惠转发给其直接子项。如果您的组件是其他组件的子组件,您还需要在每个父级的 cml 中添加 client.shard.cml
。
如果您的组件使用基于 Chromium 的 fuchsia.web
服务,并且您希望能够从中收集轨迹数据,则需要向 Context
提供 fuchsia.tracing.provider.Registry
和 fuchsia.tracing.perfetto.ProducerConnector
功能。(如需了解如何将 capability 传递给 Context
,请参阅 fuchsia.web/CreateContextParams.service_directory
。)
将组件注册为轨迹提供程序后,您就可以在代码中启用轨迹功能了。如需了解详情,请参阅下一个在代码中添加跟踪页面。