This page describes how to register a new trace provider in a Fuchsia system.
To participate in tracing, new trace providers must be registered with the trace manager in the Fuchsia tracing system. (However, drivers don't have to register as a trace provider since the devhost process does it through libdriver.so
.)
To register a trace provider, the steps are:
Register a component with the trace managerTo register a component as a trace provider, you can use the libtrace-provider
library to provide an asynchronous loop in your component's code.
See the examples below:
C++ Note: This example usesfdio
to set up the FIDL channel with the trace manager. For more information, see fdio
.
#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();
// ...
}
Set up capability routing
For your component to request the appropriate tracing capabilities, include the following field in the component manifest (.cml
):
{
include: [
"trace/client.shard.cml",
],
...
}
This allows your component to communicate with the trace manager using the fuchsia.tracing.provider.Registry
protocol as well as forward the offer to its direct children. If your component is a child of another component, you'll need to include the client.shard.cml
in each of the parents' cmls as well.
If your component uses a Chromium-based fuchsia.web
service and you want to be able to collect trace data from it, both the fuchsia.tracing.provider.Registry
and fuchsia.tracing.perfetto.ProducerConnector
capabilities need to be provided to your Context
. (To understand how capabilities are passed to the Context
, see fuchsia.web/CreateContextParams.service_directory
.)
Once you have registered your component as a trace provider, you can enable tracing in your code. For more information, see the next Add tracing in your code page.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-02-28 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-02-28 UTC."],[],[]]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4