# Timetrace
A lightweight Rust profiling library inspired by Hazel and Tracy-style instrumentation.
Generates JSON traces compatible with Chrome Tracing and Perfetto.
## Features
- RAII profiling (scope-based)
- Function attribute macro: `#[profile_function]`
- Session management: `#[profile_session]`
- Frame indexing in trace (`args.frame`)
- Minimal overhead
- Thread-aware (thread id included)
## Example
```rust
use timetrace::{profile_function, profile_session};
#[profile_session("Example", "trace.json")]
fn main() {
work();
}
#[profile_function]
fn work() {
let mut sum = 0.0;
for i in 0..1_000_000 {
sum += (i as f64).cos();
}
println!("{sum}");
}
```
## Run
```bash
cargo run -p timetrace_example
```
## View Trace
Open in:
- https://ui.perfetto.dev
- Only in Google Chrome: chrome://tracing
## Output Example
```json
{
"name": "work",
"cat": "function",
"ph": "X",
"ts": 123456789,
"dur": 23000,
"pid": 0,
"tid": 12345,
"args": {
"frame": 0
}
}
```
(Actual output is written as a single line JSON)
## Cargo Features
Enable macros:
```toml
timetrace = { path = "...", features = ["macros"] }
```
(macros are enabled by default)
Disable macros:
```toml
timetrace = { path = "...", default-features = false }
```
## License
Copyright 2026 Gleb Petrikov
Licensed under Apache-2.0