20 releases (10 stable)

11.0.1 Jan 13, 2024
11.0.0 Dec 18, 2023
10.1.2 Dec 14, 2023
10.1.1 Feb 8, 2023
0.1.0 Mar 14, 2019

#9 in Profiling

Download history 10018/week @ 2023-11-27 10997/week @ 2023-12-04 11863/week @ 2023-12-11 10738/week @ 2023-12-18 8914/week @ 2023-12-25 8721/week @ 2024-01-01 10339/week @ 2024-01-08 10561/week @ 2024-01-15 10054/week @ 2024-01-22 13974/week @ 2024-01-29 18416/week @ 2024-02-05 16758/week @ 2024-02-12 16382/week @ 2024-02-19 15145/week @ 2024-02-26 17216/week @ 2024-03-04 6781/week @ 2024-03-11

57,686 downloads per month
Used in 50 crates (8 directly)

MIT/Apache

105KB
2K SLoC

This crate provides a library for high-performance event tracing which is used by the Rust compiler's unstable -Z self-profile feature.

The output of a tracing session will be an .mm_profdata file containing a stream of events and a string table that allows to decode the StringIds in the event stream.

Writing event trace files

The main entry point for writing event trace files is the Profiler struct.

To create a Profiler, call the [Profiler::new()] function and provide a Path with the directory and file name for the trace files. Alternatively, call the [Profiler::with_counter()] function, to choose the Counter the profiler will use for events (whereas [Profiler::new()] defaults to wall-time).

For more information on available counters, see the counters module documentation.

To record an event, call the [Profiler::record_instant_event()] method, passing a few arguments:

  • event_kind: a StringId which assigns an arbitrary category to the event
  • event_id: a StringId which specifies the name of the event
  • thread_id: a u32 id of the thread which is recording this event

Alternatively, events can also be recorded via the [Profiler::start_recording_interval_event()] method. This method records a "start" event and returns a TimingGuard object that will automatically record the corresponding "end" event when it is dropped.

To create a StringId, call one of the string allocation methods:

  • [Profiler::alloc_string()]: allocates a string and returns the StringId that refers to it

Dependencies

~0.4–7MB
~15K SLoC