| 1 | //! This crate provides a library for high-performance event tracing which is used by |
| 2 | //! the Rust compiler's unstable `-Z self-profile` feature. |
| 3 | //! |
| 4 | //! The output of a tracing session will be an `.mm_profdata` file containing a stream |
| 5 | //! of events and a string table that allows to decode the `StringId`s in the event stream. |
| 6 | //! |
| 7 | //! # Writing event trace files |
| 8 | //! |
| 9 | //! The main entry point for writing event trace files is the [`Profiler`] struct. |
| 10 | //! |
| 11 | //! To create a [`Profiler`], call the [`Profiler::new()`] function and provide a `Path` with |
| 12 | //! the directory and file name for the trace files. |
| 13 | //! Alternatively, call the [`Profiler::with_counter()`] function, to choose the [`Counter`] |
| 14 | //! the profiler will use for events (whereas [`Profiler::new()`] defaults to `wall-time`). |
| 15 | //! |
| 16 | //! For more information on available counters, see the [`counters`] module documentation. |
| 17 | //! |
| 18 | //! To record an event, call the [`Profiler::record_instant_event()`] method, passing a few |
| 19 | //! arguments: |
| 20 | //! - `event_kind`: a [`StringId`] which assigns an arbitrary category to the event |
| 21 | //! - `event_id`: a [`StringId`] which specifies the name of the event |
| 22 | //! - `thread_id`: a `u32` id of the thread which is recording this event |
| 23 | //! |
| 24 | //! Alternatively, events can also be recorded via the |
| 25 | //! [`Profiler::start_recording_interval_event()`] method. This method records a "start" event and |
| 26 | //! returns a `TimingGuard` object that will automatically record the corresponding "end" event |
| 27 | //! when it is dropped. |
| 28 | //! |
| 29 | //! To create a [`StringId`], call one of the string allocation methods: |
| 30 | //! - [`Profiler::alloc_string()`]: allocates a string and returns the [`StringId`] that refers |
| 31 | //! to it |
| 32 | //! |
| 33 | //! [`Counter`]: counters::Counter |
| 34 | #![deny (warnings)] |
| 35 | |
| 36 | #[macro_use ] |
| 37 | extern crate log; |
| 38 | |
| 39 | pub mod counters; |
| 40 | pub mod event_id; |
| 41 | pub mod file_header; |
| 42 | mod profiler; |
| 43 | mod raw_event; |
| 44 | mod serialization; |
| 45 | pub mod stringtable; |
| 46 | |
| 47 | pub mod rustc; |
| 48 | |
| 49 | pub use crate::event_id::{EventId, EventIdBuilder}; |
| 50 | pub use crate::profiler::{DetachedTiming, Profiler, TimingGuard}; |
| 51 | pub use crate::raw_event::{RawEvent, MAX_INTERVAL_VALUE, MAX_SINGLE_VALUE}; |
| 52 | pub use crate::serialization::{ |
| 53 | split_streams, Addr, PageTag, SerializationSink, SerializationSinkBuilder, |
| 54 | }; |
| 55 | pub use crate::stringtable::{SerializableString, StringComponent, StringId, StringTableBuilder}; |
| 56 | |