embedded-profiling

Crates.ioembedded-profiling
lib.rsembedded-profiling
version0.3.0
sourcesrc
created_at2021-10-31 21:59:40.373672
updated_at2021-12-25 19:34:11.133454
descriptionProfiling for `no-std` embedded targets
homepage
repositoryhttps://github.com/TDHolmes/embedded-profiling
max_upload_size
id474901
size22,799
Tyler Holmes (TDHolmes)

documentation

README

Embedded-Profiling

A lightweight framework for profiling functions, geared towards no-std embedded environments.

Documentation

Usage

Initialization is very similar to how the log crate is initialized. By default, there is a no-op profiler that does nothing until you call set_profiler. Once your profiler has been installed, your profiling functionality will be in use.

Alternatively, if you don't want to use the globally installed profiler or have the overhead of dyn trait objects, you can obviously use the trait methods directly on the struct that implements the trait.

You can manually start & end your snapshot:

let start = embedded_profiling::start_snapshot();
// (...) some expensive computation
let snapshot = embedded_profiling::end_snapshot(start, "name-of-computation");
// Optionally, log it
embedded_profiling::log_snapshot(&snapshot);

Or profile some code in a closure:

embedded_profiling::profile("profile println", || {
    println!("profiling this closure");
});

With a Procedural Macro

With the proc-macros feature enabled, you can simply annotate the target function with the procedural macro profile_function. Note that you must first set your profiler with theset_profiler function.

#[embedded_profiling::profile_function]
fn my_long_running_function() {
    println!("Hello, world!");
}

Example Project & EmbeddedProfiler Implementations

A working example program on a feather_m4 development board is provided in the embedded-profiling github repo. These examples use some libraries implementing this trait, ep-systick, ep-dwt, and ep-pin-toggle.

Minimum Supported Rust Version (MSRV)

This crate is guaranteed to compile on stable Rust 1.57 and up. It might compile with older versions but that may change in any new patch release.

License

This code is licensed under either of:

at your option.

Contribution

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.

Commit count: 123

cargo fmt