1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[]
= "backbeat"
= "0.1.2"
= "A system-wide flight recorder with a self-describing, schema-driven on-disk format"
= true
= true
= true
= true
= true
= "../README.md"
= "https://docs.rs/backbeat"
= ["tracing", "flight-recorder", "observability", "profiling", "no-std"]
= ["development-tools::debugging", "development-tools::profiling", "no-std"]
[]
# `std` is on by default and pulls in the recorder runtime + the inventory-based registry. Turn it
# off (`default-features = false`) for the `no_std` format/descriptor half so events can be defined
# in `no_std` crates. The CLI tooling (Parquet/inspect) lives in the separate `backbeat-cli` crate,
# so a library consumer never pulls in arrow/parquet/clap.
#
# `capture` is the compile-time master switch for recording: on by default, but a build that depends
# on `backbeat` with `default-features = false` (or `capture` off) gets a recorder whose `record`
# calls compile to nothing — `is_enabled()` folds to `const false` and the optimizer strips the
# rest. The runtime `set_enabled` toggle still exists when `capture` is on.
= ["std", "capture"]
= ["dep:inventory", "dep:libc"]
= []
# Makes the default `SystemClock` bach-aware: when the caller is inside a `bach` discrete-event
# simulation, timestamps come from the simulated clock (deterministic, host-independent) instead of
# the wall clock, so recorded events line up with simulated time. Outside a bach scope it falls back
# to the wall clock, so a binary built with this on still behaves normally in production. Implies
# `std` (bach is a std-only runtime).
= ["std", "dep:bach"]
[]
= true
# Records are written by a plain memcpy of the event's bytes. `IntoBytes` makes that a checked,
# zero-cost `as_bytes()`, and its derive *rejects* layouts with implicit padding — exactly what the
# schema reader cannot describe. `default-features = false` keeps the format half `no_std`.
= { = "0.8", = false, = ["derive"] }
# Distributed slice of every `#[derive(Event)]` type compiled in, so the dumper self-populates the
# registry. `std`-only (life-before-main collection).
= { = "0.3", = true }
# The dump reader hands out records as zero-copy refcounted slices of the file buffer. `bytes` is
# `no_std`+alloc, so this stays compatible with the `no_std` format half.
= { = "1", = false }
# The `bach` feature makes the default clock query bach's simulated time when the recorder runs
# inside a discrete-event simulation. Optional and off by default; pulled in only with `bach`.
= { = "0.1.2", = true }
# The global recorder's optional `kill -<sig>` dump trigger installs a signal handler via libc.
# Unix-only and only pulled in with `std` (the global recorder is `std`-only).
[]
= { = "0.2", = true }
[]
# The derive-smoke test defines events, whose `IntoBytes`/`Immutable` derives emit `::zerocopy`
# paths, so the test crate needs `zerocopy` directly.
= { = "0.8", = ["derive"] }