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

The underlying container of our Duration/Instant types

Our Duration type, representing time elapsed in microseconds

Our Instant type, representing a snapshot in time from a clock with 1 µs precision (or at least, converted to this representation)