Crate embedded_profiling[−][src]
Expand description
Embedded-Profiling
A lightweight framework for profiling functions, geared towards
no-std
embedded environments. 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.
Usage
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 the set_profiler
function.
#[embedded_profiling::profile_function]
fn my_long_running_function() {
println!("Hello, world!");
}
Re-exports
pub use fugit;
Modules
Monotonic
implementation based on DWT and SysTick
Structs
A recorded snapshot
Indicates that setting the profiler has gone awry, probably because the profiler has already been set.
Traits
The main trait to implement. All that is required is a way to read time and a way to output our results, if desired. You can also implement functions that get called when a snapshot starts and ends.
Functions
computes the duration of the snapshot given the start time using the globally configured profiler
Logs the given snapshot with the globally configured profiler
Profiles the given closure target
with name name
.
Sets the profiler. Must be completed with no other threads running or, on an embedded single core environment, with interrupts disabled.
takes the starting snapshot of a specific trace
Type Definitions
Our Duration
type, representing time elapsed in microseconds