diff --git a/docs/reference/tracebox.md b/docs/reference/tracebox.md index 0c64b7e0467..0647e395991 100644 --- a/docs/reference/tracebox.md +++ b/docs/reference/tracebox.md @@ -87,6 +87,9 @@ The following applets are available: `traced_probes` : Probes for system-wide tracing (ftrace, /proc pollers). +`traced_relay` +: Relays trace data to a remote tracing service. + `traced_perf` : Perf-based CPU profiling data source. diff --git a/src/tracebox/BUILD.gn b/src/tracebox/BUILD.gn index 65a64279132..d967889dfe0 100644 --- a/src/tracebox/BUILD.gn +++ b/src/tracebox/BUILD.gn @@ -23,6 +23,7 @@ executable("tracebox") { "../perfetto_cmd", "../perfetto_cmd:trigger_perfetto_cmd", "../traced/service", + "../traced_relay:lib", "../websocket_bridge:lib", ] if (enable_perfetto_traced_probes) { diff --git a/src/tracebox/tracebox.cc b/src/tracebox/tracebox.cc index f8833aef97e..2fc8ba45429 100644 --- a/src/tracebox/tracebox.cc +++ b/src/tracebox/tracebox.cc @@ -48,6 +48,7 @@ struct Applet { const Applet g_applets[]{ {"traced", ServiceMain}, {"traced_probes", ProbesMain}, + {"traced_relay", RelayServiceMain}, #if PERFETTO_BUILDFLAG(PERFETTO_TRACED_PERF) {"traced_perf", TracedPerfMain}, #endif diff --git a/src/traced_relay/relay_service.cc b/src/traced_relay/relay_service.cc index e973e5cf10e..bad3677af9b 100644 --- a/src/traced_relay/relay_service.cc +++ b/src/traced_relay/relay_service.cc @@ -602,6 +602,16 @@ int PERFETTO_EXPORT_ENTRYPOINT RelayServiceMain(int argc, char** argv) { svc->Start(listen_socket, GetRelaySocket()); } + // If the TRACED_RELAY_NOTIFY_FD env var is set, write 1 and close the FD. + // This is so tools can synchronize with the point where the IPC socket + // has been opened, without having to poll. + const char* env_notif = getenv("TRACED_RELAY_NOTIFY_FD"); + if (env_notif) { + int notif_fd = atoi(env_notif); + PERFETTO_CHECK(base::WriteAll(notif_fd, "1", 1) == 1); + PERFETTO_CHECK(base::CloseFile(notif_fd) == 0); + } + // Set the CPU limit and start the watchdog running. The memory limit will // be set inside the service code as it relies on the size of buffers. // The CPU limit is the generic one defined in watchdog.h.