跳转至

Registering a trace provider

Trace providers must register with the trace manager in order to participate in tracing. Drivers don't have to register as a trace provider since the devhost process does it through libdriver.so.

To register a trace provider, you must do the following:

Note: For more information on the Fuchsia tracing system, see Fuchsia tracing system.

Register with the trace manager {#register-with-the-trace-manager}

To register as a trace provider, you can use the libtrace-provider library to provide an asynchronous loop in your component's code.

Note: For more information on tracing libraries, see Tracing libraries.

For example:

  • {C++}

Note: This example uses fdio to set up the FIDL channel with 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;
}

Give the trace manager component access {#give-trace-manager-component-access}

In the component manifest file (a .cmx file) of your component, you must specify that it needs to communicate with the Fuchsia trace manager.

Note: For information on component manifests, see Component Manifests.

To give the trace manager component access, specify fuchsia.tracing.provider.Registry as a "services". For example:

  • {.cmx file}
{
    "program": {
        "binary": "bin/app"
    },
    "sandbox": {
        "services": [
            "fuchsia.tracing.provider.Registry"
        ]
    }
}

Once you have registered your component as a trace provider, you can enable tracing in your code. For more information, see Adding tracing in your code.


最后更新: 2022 年 12 月 31 日(Saturday) 21:07 CST