You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Puffin macros write data to a thread-local data stream. When the outermost scope of a thread is closed, the data stream is sent to a global profiler collector. The scopes are pretty light-weight, costing around 50-200 ns.
You have to turn on the profiler before it captures any data with a call to puffin::set_scopes_on(true);. When the profiler is off the profiler scope macros only has an overhead of 1 ns on an M1 MacBook Pro (plus some stack space).
Once per frame you need to call puffin::GlobalProfiler::lock().new_frame();.
fnmain(){let server_addr = format!("127.0.0.1:{}", puffin_http::DEFAULT_PORT);let _puffin_server = puffin_http::Server::new(&server_addr).unwrap();eprintln!("Run this to view profiling data: puffin_viewer {server_addr}");
puffin::set_scopes_on(true);
…
// You also need to periodically call// `puffin::GlobalProfiler::lock().new_frame();`// to flush the profiling events.}
Also check out the crate profiling which provides a unifying layer of abstraction on top of puffin and other profiling crates.
Contributing
We welcome community contributions to this project.
Please read our Contributor Guide for more information on how to get started.
Releasing
We use the cargo release tool to manage changelogs, git tags and publishing crates.
Each substantial pull request should add a changelog entry under the [Unreleased] section (see keep a changelog
and previous changelog entries). The crate version in Cargo.toml is never updated manually in a PR as it's handled by cargo release.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
About
🐦 Friendly little instrumentation profiler for Rust 🦀