A high-performance, ergonomic timeline tracing library for Rust.
[dependencies]
minitrace = { git = "https://github.com/pingcap-incubator/minitrace-rust.git" }let (root, collector) = minitrace::trace_enable(0u32);
{
let _parent_guard = root;
{
let _child_guard = minitrace::new_span(1u32);
}
}
let spans = collector.collect();Futures:
use minitrace::prelude::*;
let task = async {
let guard = minitrace::new_span(1u32);
// ...
drop(guard);
async {}.trace_async(2u32).await;
runtime::spawn(async {}.trace_task(3u32));
async {}.trace_async(4u32).await;
};
let (spans, _r) = runtime::block_on(task.future_trace_enable(0u32));Threads:
let (root, collector) = minitrace::trace_enable(0u32);
let handle = minitrace::trace_crossthread(1u32);
std::thread::spawn(move || {
let mut handle = handle;
let _parent_guard = handle.trace_enable();
{
let _child_guard = minitrace::new_span(2u32);
}
});
drop(root);
let spans = collector.collect();$ cargo +nightly run --example synchronous
====================================================================== 111.69 ms
= 2.13 ms
1.06 ms
== 4.14 ms
= 2.07 ms
=== 6.16 ms
= 3.08 ms
===== 8.18 ms
== 4.09 ms
====== 10.20 ms
=== 5.10 ms
======= 12.18 ms
=== 6.09 ms
======== 14.15 ms
==== 7.08 ms
========== 16.16 ms
===== 8.08 ms
=========== 18.17 ms
===== 9.08 ms
============ 20.17 ms
====== 10.08 ms$ cargo +nightly run --example asynchronous
============= ============= 21.49 ms
============= 10.65 ms
========================== 21.33 ms
============= 10.66 ms
============= 10.64 ms
============= ========================== 31.62 ms
============= 10.66 ms
============= 10.63 ms
========================= ============= ============= 41.30 ms
============= 10.62 ms
============= 10.57 ms
====================================== ========================== 51.43 ms
============= 10.57 ms
============= 10.79 ms
============= 10.71 ms