# 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
