Rust API for Optick Profiler

Build Status Crates.io Docs

Supported Platforms

| Windows (x64) | Linux | MacOS | | ------------- | ----- | ----- | | YES | NO (IN PROGRESS) | NO (IN PROGRESS) |

How to use

In Cargo.toml add:

toml [dependencies] optick = "1.3.4"

Example 1 (generic app, automation, etc.):

```rust fn calc(n: u32) { // Profile current scope (automatically extracts current function name) // You could also specify a custom name if needed - e.g. optick::scope!("calc"); optick::event!();

// Attach custom data tag to the capture (i32, u32, u64, f32, str, vec3)
optick::tag!("number", n);
optick::tag!("name", "Bob");
optick::tag!("position", (10.0f32, -12.0f32, 14.0f32));

...

}

pub fn main() { // Start a new capture optick::start_capture();

calc(42);

// Stop and save current capture to {working_dir}/capture_name(date-time).opt
optick::stop_capture("capture_name");

} ```

Example 2 (game):

```rust fn update(framenum: u32) { optick::event!(); optick::tag!("frame", framenum); std::thread::sleep(std::time::Duration::from_millis(33)); }

pub fn main() { let mut frame = 0; loop { optick::next_frame(); update(frame); frame = frame + 1; } } ```

GUI

Use Optick GUI to open saved *.opt capture for further analysis: https://github.com/bombomby/optick/releases
After grabbing the latest available Optick_vX.X.X.zip => launch Optick.exe.

Video Tutorial (Features Overview)

Vide Tutorial

Procedural Macros

Optick supports a set of procedural macros for simplifying the process of code markup: https://crates.io/crates/optick-attr ```rust // Instrument current function

[optick_attr::profile]

fn calc() { // Do some stuff } //Generate performance capture for function to {workingdir}/capturename(date-time).opt.

[optickattr::capture("capturename")]

pub fn main() { calc(); } ```

Feature flags

Run as Administartor to collect ETW events

Optick uses ETW to collect hardware counters: switch-contexts, auto-sampling, CPU core utilization, etc. Run your app as administrator to enable the collection of ETW events: Start-Process cargo run -Verb runAs