Crates.io | embedded-profiling |
lib.rs | embedded-profiling |
version | 0.3.0 |
source | src |
created_at | 2021-10-31 21:59:40.373672 |
updated_at | 2021-12-25 19:34:11.133454 |
description | Profiling for `no-std` embedded targets |
homepage | |
repository | https://github.com/TDHolmes/embedded-profiling |
max_upload_size | |
id | 474901 |
size | 22,799 |
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.
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 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!");
}
EmbeddedProfiler
ImplementationsA 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
.
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.
This code is licensed under either of:
at your option.
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.