blob: ec437861dffdd97a246ddeadb583b4bd189d357a [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBBRILLO_BRILLO_TRACING_H_
#define LIBBRILLO_BRILLO_TRACING_H_
#include <brillo/brillo_export.h>
namespace brillo {
// Enables Perfetto tracing by connecting to the system tracing service
// (traced). After this, track events (`TRACE_EVENT`) in the calling process
// will be recorded into future tracing sessions that have the track event data
// source enabled. Use https://ui.perfetto.dev to start tracing sessions and
// view recorded traces. Traces can also be recorded using the `perfetto`
// command line tool.
//
// By default, just built-in events from libchrome will be recorded. To add your
// own events:
//
// 1. Define tracing categories (in a header file):
//
// #include <perfetto/perfetto.h>
//
// PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE(
// my_namespace,
// perfetto::Category("foo")
// .SetDescription("Events from the Foo subsystem"));
//
// 2. Initialize tracing and register your categories (in a .cc file):
//
// PERFETTO_TRACK_EVENT_STATIC_STORAGE_IN_NAMESPACE(my_namespace);
//
// void Init() {
// brillo::InitPerfettoTracing();
// my_namespace::TrackEvent::Register();
// }
//
// 3. Instrument your code with events:
//
// namespace my_namespace {
//
// void FooOperation(int x, int y) {
// TRACE_EVENT("foo", "FooOperation", "x", x, "y", y);
// ...
// }
//
// } // namespace my_namespace
//
// See https://perfetto.dev/docs/instrumentation/track-events for more.
//
BRILLO_EXPORT void InitPerfettoTracing();
} // namespace brillo
#endif // LIBBRILLO_BRILLO_TRACING_H_