| //! 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 `StringId`s 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 |
| //! |
| //! [`Counter`]: counters::Counter |
| #![deny(warnings)] |
| |
| #[macro_use] |
| extern crate log; |
| |
| pub mod counters; |
| pub mod event_id; |
| pub mod file_header; |
| mod profiler; |
| mod raw_event; |
| mod serialization; |
| pub mod stringtable; |
| |
| pub mod rustc; |
| |
| pub use crate::event_id::{EventId, EventIdBuilder}; |
| pub use crate::profiler::{DetachedTiming, Profiler, TimingGuard}; |
| pub use crate::raw_event::{RawEvent, MAX_INTERVAL_VALUE, MAX_SINGLE_VALUE}; |
| pub use crate::serialization::{ |
| split_streams, Addr, PageTag, SerializationSink, SerializationSinkBuilder, |
| }; |
| pub use crate::stringtable::{SerializableString, StringComponent, StringId, StringTableBuilder}; |