Crate time_graph[−][src]
time-graph
provides always-on profiling for your code, allowing to
record the execution time of functions, spans inside these functions and the
full call graph of spans and functions at run-time.
Core concepts
There are two main concepts in this crate: CallSite
identify a single
call site in the source, usually a full function. One can then create a
Span
from any callsite, representing a single execution of the code.
When executed, the Span
will its elapsed time, and store it in the
global call graph.
Controlling data collection
By default, no data is collected until you call enable_data_collection
to start collecting timing data. Once you are done running your code, you
can extract collected data with get_full_graph
, and possibly clear all
collected data using clear_collected_data
.
Overhead and limitations
When data collection is disabled, this crate adds an overheard around 10 ns when calling a function or entering a span. With data collection enabled, this crate adds an overhead around 100 ns when calling a function or entering a span.
This makes this crate only useful for gathering profiling data on function/spans taking at least 1 µs to execute.
Crate features
This crate has two cargo features:
- json: enables json output format for the full call graph
- table: enables pretty-printing the full call graph to a table using term-table
Macros
callsite | Create a new |
spanned | Run a block of code inside a new span |
Structs
CallSite | A |
FullCallGraph | Full call graph including execution time and number of calls between functions/spans. |
Span | A |
SpanGuard | When a |
TimedSpan |
|
Functions
clear_collected_data | Clear the global call graph from all data |
enable_data_collection | Enable/disable data collection |
get_full_graph | Get a copy of the call graph as currently known |
traverse_registered_callsite | Execute the given function on all call sites we know about. |
Attribute Macros
instrument | Instruments a function to create and enter a |